ひとりぶろぐ

価値ある情報をユーザー視点で発信するブログ

無線LAN付きSDカードFlashAirの極めて間違った楽しみ方

      2015/12/16

Eye-Fiのライバル、FlashAirを入手しました

IMG 0071

無線LAN付きSDカード、東芝のFlashAirが発売されたので買ってみました。
FlashAirは、Eye-Fiと似た無線LAN機能付きのSDカードです。

IMG 0168

既にEye-Fi Pro X2を持っているんですが、方向性が違うこともあって興味があったのです。

Amazonのレビューが悪いですが、僕は全然そうは思いません。Eye-Fiを買うべき人がFlashAirを買ってしまっただけのように見受けられます。

FlashAirをカメラに入れると、いとも簡単にWebブラウザを使って画像をダウンロードできて便利です。(続きは[Read More]から)

IMG 0076 IMG 0080

FlashAirの使用感

無線LANルータ同様、アクセスポイントモードでの接続となるFlashAir。

無線LANルータに接続するのと同様の手順でFlashAirに接続。Webブラウザで「http://flashair/」を開くと、あたかも画像共有サービスを使っているかのように、カメラ内の画像をWebブラウザ上から見ることができます。iPhoneとの初回接続時の手順を追ってみます。

Skitched 20120324 203507

▲FlashAirを入れたデジカメの電源をオン、そこから約20秒でWi-Fiネットワークに「flashair_〜」というSSIDが現れます。

IMG 0131

▲タップするとパスワードの入力を求められます。初期パスワードは「12345678」です。

IMG 0134

▲接続が確立したら、Mobile Safariなどで「http://flashair/」を開きます。開くと初回はWelcome!ページが表示され、SSIDとパスワードの入力が促されます。

IMG 0136 IMG 0138

▲SSIDとパスワードを入力すると、いったん確認が入った後、再接続を促されます。

IMG 0139 IMG 0140

▲再度20秒ほど待つと、設定した新しいSSIDがWi-Fiネットワークに表示されます。設定したパスワードを入力して接続を確立、再度「http://flashair/」を開くと、今度はFlashAirの中身をブラウザ上で見ることができます。

IMG 0076 IMG 0080

画像のサムネイルをタップするとリンク先は実画像で、それがブラウザに表示されます。

MobileSafariの仕様で、表示されるのは縮小されたものです。画像を長押しして表示されるメニューから「画像を保存」を選択すると、カメラロールに保存されるのは縮小前のフルサイズの画像です。

無線LANのON/OFF機能はありますが、それを除くとFlashAirの機能は現状これだけで、至極シンプルです。

Eye-Fiが自動転送に重きを置いたプッシュ型のものだとするならば、もの静かなFlashAirは、プル型のものだと定義することもできそうです。

Eye-Fiじゃダメなのか

Eye-Fiを持っているのにFlashAirを買ったのは、こちらの方が僕の使用スタイルに合っているからです。

僕は、デジカメで撮影した画像のごく一部をiPhone / iPadに転送したいだけなのです。
具体的には、散歩などでパシャパシャ撮影した画像のうち、うまく撮影できたものだけ……一日の外出中に、せいぜい4〜5枚でしょうか……を、その場でInstagramやTwitterに投稿したいのです。

Eye-Fiにある、SDカードから無差別的にWebサービスないしPCにアップロードする機能は、僕には不要です。
デジカメのバッテリを浪費しますし、無駄なパケット通信を発生させることにもなりますから。

現在僕はSIGMA DP2xというデジカメを使っています。DP2xは動作確認機器一覧に記載がありませんでしたが、イチかバチかで買ってみたら大丈夫でした。

このカメラが記録するJPEGはオマケで、基本的にRAWで撮影するスパルタンな作りとなっています。

Twitter等への投稿のことを考えてJPEGとRAWの同時記録をしますが、このJPEGはかりそめのもので、家に帰ったら捨ててしまいます。

RAWから現像した画像とDP2xが記録するJPEGとでは決定的にクオリティに差が付きますし、現像工程で本機にあるマゼンタかぶりのクセを補正したりするので、そうならざるを得ないのです。捨ててしまうものを全部アップしてもしょうがないので、Eye-Fiの特長が自分にとってのメリットにならないのです。

2012-03-20 二子玉川 (SIGMA DP2x)

僕はiPhone 4S、iPad 2、MacBook Airを併用しており、取っ替え引っ替えしているので、ペアとなるデバイスを変えるたびに設定し直さないといけないEye-Fiは、いかにも面倒です。

FlashAirなら、FlashAir、接続デバイス共に、一度設定を済ませたら、以後再設定の必要はありません。

FlashAirは無線LANのON/OFFを制御できる

FlashAirは、無線LANをカメラの操作でON/OFFできるようになっています。具体的には、無線LANスイッチの代わりとなる「無線LAN起動画面」(表現としては「無線LAN起動画像」の方が正しいと思うのですが)に対する画像保護をOFFにすると無線LANがONとなり、画像保護をONにすると無線LANがOFFとなります(自動起動モードを「無線LAN起動画面を使って起動する」に設定した場合)。

IMG 0119

▲DP2xの「▶」ボタンを押し、画像のプレビューモードへ。「無線LAN起動画面」を選択。

IMG 0120

▲Menuボタンでロック(画像保護)のメニューを表示。このロック/ロック解除で無線LANのON/OFFがコントロール可能。

この点と、前述の無差別アップロードが不要、一部のみ転送したいという僕のニーズが相俟って、FlashAirがとても魅力的に映ります。

FlashAirは、必要無い場面では無線LANをOFFにして節電できるわけです。自動起動モードを「無線LAN起動画面を使って起動する」に設定すると、無線LANは常時OFFになります。「無線LAN起動画像」に対し、画像保護をON→OFFとして初めて無線LANが一度だけONになります。

ON時は20秒ほどのタイムラグの後にSSIDが出現、OFF時は即時反映されます。OFF時は、カメラの電源を落とした方が手っ取り早いですね。次回カメラの電源を入れるときは、「無線LAN起動画像」の画像保護の状態を問わず、無線LANがOFFの状態から始まりますので。

一方、Eye-Fiは、それが必要無い状況であっても、無線LANをその場でOFFにすることができません。
Eye-Fiに通電されるたびに無線LANの電源が入り、タイムアウトするまでは、少なくとも30秒貴重なバッテリライフと共に電波をたれ流してしまいます。

サムネイルがブラウザで一覧できることの使いやすさ

Eye-Fiでも、「転送モード>選択転送」を「選択転送」に設定すると、画像保護指定を使った部分転送は可能です。

しかし、そのときに問題になるのが、たくさんある画像の中からどれを転送するか決めるときの効率です。

FlashAirは、Webブラウザ越しにSDカード内の画像のサムネイルをリスト表示してくれます。iOSのMobile Safariで表示すれば、スクロールはスイスイと軽快ですし、リキッドデザインですので、iPadのように大きな画面であれば一覧性が高まり、目当ての画像を探すことに労苦はありません。

IMG 0106

Eye-Fiの場合は、どれを転送するか決めるのはデジカメ側での操作となりますので、その操作の効率は確実にFlashAirの場合より劣ります。

僕の使っているSIGMA DP2xは、画像選択の軽快さという点においては(も?)かなり前近代的なところがありますから、FlashAirのブラウザ越しの画像選択は、それと比較するとかなりやりやすいといえます。

使われている技術が標準的なので様々に応用が可能

FlashAirはWebサーバがカード内で起動し、Webブラウザでアクセスするという標準的な技術の組み合わせからなる作り。

moyashiがFlashAirに一番惹かれたのは、実はここです。

蓄積された様々なツールやノウハウを使って工夫ができます。iOSにおいて、ユーザーに許された最大の自由はWebブラウザの中にありますので、iOSユーザーとしては見逃せません。

例えば、FlashAirについてのレビューで二言目に出てくる画像の一括ダウンロード。

Webですから、これはさして難しいことではありません。

iOSでは、Unit KayさんのブラウザiNetDualで、表示中のページに含まれるリンク先画像の、カメラロールへの一括直接保存が可能です。

iNetDual – 画面分割&画像一括ダウンロードWebブラウザ App
カテゴリ: 仕事効率化
価格: ¥170

IMG 0141 IMG 0142
IMG 0151 IMG 0163

また、以下のブックマークレットを実行することで、現在表示しているページに含まれる画像への直接リンクのリストが取得可能です。

FlashAirのページで表示中の画像一覧からURLのリストを取得する

Mac / PCでは、これで取得したURL一覧をダウンローダなどにかければ一括転送が可能でしょう。
FlashAir上に置いたファイルは、画像に限らず基本的にFlashAirのWebサーバ越しにWebブラウザで見ることができますので、html、css、jsなどを置き、独自の機能を備えたページを作ることも可能です(後述の「FlashAir上にある画像のサムネイルを取得する」、「表示中のページにある画像の実データへのURLのリストを取得」を参照)。ただ、ファイル名は8.3のMS-DOSフォーマットなので、ファイル名の命名には注意する必要があります。

いっそのこと、後述のSD_WLAN内のhtmlファイルなどを書き換えて、フルカスタムしてしまうのもアリかもしれません。htmlファイル、画像ファイルの書き換えは反映されました。非常に簡素な作りなので、改造は容易です。「痛FlashAir」も作れますね。

Skitched 20120326 151212

▲ややMac風に改造したFlashAir。FlashAir初音ミク化キットなどの登場が予想されます。jQuery、Twitter Bootstrapなどで今風に改造するのもアリでしょう。

ファームウェアのアップデート、スマートフォン用の公式クライアントが予定され、またサードパーティに対して対応ソフトウェアの開発のオファーが行っているようですから、今後は手の込んだことをする必要性は薄れていくものと思いますが、Webベースというのは柔軟性を生む重要な特長になっています。

Mac / OS XだけでFlashAirの設定はできる?

FlashAirに興味を持ったものの、Windows用のユーティリティを使った設定や初期化が必要、という説明を見て購入意欲が萎えた人もいるのではないでしょうか。

僕もその一人です。僕はOS X LionにVMware Fusionをインストールしており、その中でWindows XPを動かすこともありますが、何ぶんマシンが古くメモリの積載量にも限界があるので、できれば起動したくない。Macだけで何とかならないかと調べてみました。

最初に言えることは、ファームウェアのアップデートだけはWindowsを使わざるを得ないということ。ここはどうにもならないと思います。

SONYのNEXで使えない不具合をファームウェアで解決、といった話もありますし、将来あるであろう機能アップを含むファームウェアアップデートに備えておく必要はあるかと思います。

その意味ではFlashAirを使う限りWindowsと縁が切れないということになりますが、調べた限りでは、それ以外の初期化、各種設定作業は、現状ではMacのみで大丈夫という結論を得ています。

ちなみに、OS X Lion上で動作するVMware Fusion上のWindows XPからSDHC対応のカードリーダ(980円で購入)に挿入したFlashAirのファームウェアのアップデートを試みましたが、無事成功しました。保証はありませんし、避けられるなら避けた方がいいとは思いますが。

Windows用のユーティリティで初期化した直後のFlashAir内は以下のようになっています。

.
├── DCIM
│   ├── 100__TSB
│   │   ├── FA000001.JPG
│   └── MISC
└── SD_WLAN
    ├── CONFIG
    ├── CONFIG.htm
    ├── List.htm
    ├── Thumbs.db
    ├── file.jpg
    ├── folder.jpg
    ├── gear.jpg
    ├── go.jpg
    ├── header.gif
    ├── ico_card.gif
    ├── ico_lock.gif
    ├── man.jpg
    └── welcome.htm

まず最初に押さえておきたいのが、FlashAirがどこに設定を保存しているかということ。

それは、以下の場所にあるCONFIGというファイルです。パスは、Macにマウントされたときのものです。「CARD_NAME」の部分は、それぞれの環境で違うかと思うので仮のものです。

/Volumes/CARD_NAME/SD_WLAN/CONFIG

ただ、MacのFinderからは見当たらないかもしれません。

FlashAir 2012 03 23 0 42 16

なぜならば、SD_WLANディレクトリとCONFIGには、不可視属性が付いているからです。以下のようにターミナルから操作すると見えるようになります。

chflags nohidden /Volumes/CARD_NAME/SD_WLAN/
chflags nohidden /Volumes/CARD_NAME/SD_WLAN/CONFIG

FlashAir 2012 03 23 0 41 54

FlashAir 2012 03 23 1 39 46

FlashAir 2012 03 23 1 40 00

元に戻す場合は以下のようにします。

chflags hidden /Volumes/CARD_NAME/SD_WLAN/
chflags hidden /Volumes/CARD_NAME/SD_WLAN/CONFIG

マウントする度に不可視属性が戻るようなので、戻す必要は無いかもしれません。

CONFIGに、設定情報がテキストで書き込まれています。改行コードはCR+LFです。

FlashAir初期化直後のCONFIGは以下のような内容になっています。

[Vendor]

CIPATH=/DCIM/100__TSB/FA000001.JPG
APPMODE=4
APPNETWORKKEY=********
項目名 解説
CIPATH 無線LAN起動画面のパス。機種によってはデフォルトのパスではプレビューモードで表示できないことがあるよう。その場合はこれを書き換えると救済されるかも?
APPMODE 自動起動モード設定。4が「自動起動」(デフォルト) 、0が「無線LAN起動画面を使って起動する」
APPNETWORKKEY 無線LANのパスワード。Webインターフェースで設定したパスワードはいったんここに生テキストで書き込まれ、ネットワークの再起動時に取り込まれ、「********」に置き換わるという動作をしている模様。「********」が指定されている場合は、無線LANにセキュリティがかかる。適用されたパスワードは、どこか別の領域に書き込まれている模様。「APPNETWORKKEY=」と何も指定しないと、オープンネットワークになる

このほか以下のような項目があります。

項目名 解説
MASTERCODE FlashAirのMACアドレスが自動的に記入される
LOCK 不明。1が指定されている
APPSSID SSID。ここを書き換えるとSSIDが変更される
APPAUTOTIME 無線LAN起動後、どれぐらい無接続時間が経過したら無線LANをオフにするか。単位はミリ秒。5分の場合300000

具体例を下記します。

自動起動モードは「無線LAN起動画面を使って起動する」、無線LANのパスワード無し、SSIDは「AirAlbum」、無線LAN自動起動後のタイムアウトは5分に設定。

MASTERCODEにはFlashAirのMACアドレスが入りますが、ここでは「001122334455」と伏せています。

[Vendor]

CIPATH=/DCIM/100__TSB/FA000001.jpg
APPMODE=0
APPNETWORKKEY=
MASTERCODE=001122334455
LOCK=1
APPSSID=AirAlbum
APPAUTOTIME=300000

純正ユーティリティで設定するとCONFIGが壊れることがある

Windows用の純正ユーティリティでSSIDなどを設定すると、FlashAirにつながらなくなることがあります。

純正ユーティリティはあまり出来がよくないようで、CONFIGを調べると、以下のような感じでAPPAUTOTIMEに与えるべき数値(300000)だけがファイルの末尾に付いていました。

[Vendor]

CIPATH=/DCIM/100__TSB/FA000001.jpg
APPMODE=0
APPNETWORKKEY=
MASTERCODE=001122334455
LOCK=1
APPSSID=AirAlbum
APPAUTOTIME=300000
300000

最後の300000を削除したら動くようになりましたが、そのようなトラブルに遭遇したら、このエントリを思い出してください。

怨言を列ねるのもいいですが、十分人の手で管理できるものなので、Webの設定画面で設定できないCIPATH、APPAUTOTIME、APPMODEは、直接テキストエディタで書き換える/書き加えるようにするといいと思います。

Macだけで自動起動モードを「無線LAN起動画面を使って起動する」に設定する

本来、Windows用のユーティリティを使わないと変更できない無線LANの自動起動モード。

改めて、Macだけで自動起動モードを「無線LAN起動画面を使って起動する」に設定するという観点から前述の情報をまとめると、以下の手順となります。

ターミナルから以下のように操作し、「/Volumes/CARD_NAME/SD_WLAN/CONFIG」を不可視状態から可視状態に。

chflags nohidden /Volumes/CARD_NAME/SD_WLAN/
chflags nohidden /Volumes/CARD_NAME/SD_WLAN/CONFIG

FlashAir 2012 03 23 0 41 54

FlashAir 2012 03 23 1 40 00

ファイル「CONFIG」をエディタで開き、「APPMODE」とある行を探します。

「APPMODE=4」が自動起動モード、「APPMODE=0」が「無線LAN起動画面を使って起動する」モードなので、「APPMODE=4」となっていたら、それを「APPMODE=0」に書き換え、セーブ。

FlashAirを一度抜くなどして再起動すると、「無線LAN起動画面を使って起動する」モードとして動きます。

FlashAirをカメラで初期化するとどうなるか?

Windowsが無い環境では、カメラでカードを初期化した後にFlashAirが使いものにならなくなるのでは、と心配する人もいるのではないでしょうか。

結果の保証はできませんが、実際にやってみると、「/Volumes/CARD_NAME/SD_WLAN/」はどこからともなく復旧され、普通に動き始めます。

無線LANのパスワードは初期値の「12345678」に戻ります。

ただ、無線LAN起動画面「/Volumes/CARD_NAME/DCIM/100__TSB/FA000001.jpg」は100__TSB/諸共消えてしまいます。

バックアップしておいたFA000001.jpgを「/Volumes/CARD_NAME/DCIM/100__TSB/」にコピーし、CONFIGのAPPMODEを0に書き換えて再起動したら、きちんと自動起動モードが「無線LAN起動画面を使って起動する」として動作しました。

ちなみに、Macでの無線LAN起動画面の画像保護の操作は、Finder上でFA000001.JPGを選択し、Command+Iで表示されるダイアログにある「ロック」のチェックボックスをON/OFFに相当します。

FlashAir 2012 03 23 0 38 00

FlashAir 2012 03 23 0 37 23

ロックされていなかった場合は、いったんロックして、ロック解除という風にします。
ターミナルからなら、以下のようにします。

chflags uchg /Volumes/CARD_NAME/DCIM/100__TSB/FA000001.JPG
chflags nouchg /Volumes/CARD_NAME/DCIM/100__TSB/FA000001.JPG

無線LAN起動画面のバックアップを取っておきさえすれば、初期化も怖くありませんね。

一応、無線LAN起動画面のバックアップを置いておきます。

100__TSB.zip

固定IPにすると通信の安定度が増す

FlashAir上でDHCPサーバが動いていて、FlashAirに接続する端末はFlashAirからIPアドレスの払い出しを受けます。無線LANルータを使っているかのように、ネットワークの設定を全く意識せずに使えるのは便利です。

しかし、カメラの電源が切れるたびにFlashAirの電源も落ち、カメラの電源を入れるたびにFlashAirのDHCPサーバからのIP払い出し待ちから始めることになります。

小刻みに電源をON/OFFしない無線LANルータの場合と違い、それは接続の不安定さに通じることになります。

FlashAirのIPアドレスは192.168.0.1で不変なので、端末のIPを192.168.0.x固定にしてしまうと、接続確立までのスピードと安定度が向上します。

ゆえに、僕はiPhone, iPad等をFlashAirに対しては固定IPにして使っています。

IMG 0165

以降、理不尽な通信の不通というものは味わっていません。

わりと通信の挙動に不審なところのあるEye-Fiと比較して、至って普通な感じですね。

当方の環境では、MacBook Pro (Early 2008)とFlashAirとの通信において、互いの距離と通信スピードとの間に顕著な相関関係が認められました。少し離すと著しくスピードが低下、近づけるとグンとスピードがアップするといった具合です。

FlashAir上にある画像のサムネイルを取得する

FlashAirには、FlashAir上にある画像のサムネイルを生成する機能が搭載されています。

画像一覧のhtmlを生成するときに機能していますから、存在するのは明らかです。

thumbnail.cgiというサムネイル生成cgiが存在します。引数として画像へのパスを渡します。

http://flashair/thumbnail.cgi?/DCIM/HOGE/SDIM0063.JPG

表示中のページにある画像の実データへのURLのリストを取得

表示中のページのwlansd(window.wlansd)という変数の中に、そのページのディレクトリにあるファイルの情報が配列で入っています。配列の一要素が一つのファイルに対応しています。

["/DCIM/HOGE,SDIM0063.JPG,1404084,32,16501,14565", "/DCIM/HOGE,SDIM0062.JPG,704626,32,16501,14562", "/DCIM/HOGE,SDIM0061.JPG,1318035,32,16501,14555", "/DCIM/HOGE,SDIM0060.JPG,1257640,32,16501,14551"]

各要素にはカンマ区切りのデータが入っていて、その1番目の項目と2番目の項目をスラッシュを挟んで結合し、ドメイン名(http://flashair)を頭にくっつけるとファイルへのURLが完成します。

function buildURL(data) {
    var a = data.split(",");
   return "http://flashair" + a[0] + "/" + a[1];
}
flist = [];
for (var i = 0; i < wlansd.length; i++) {
    flist.push(buildURL(wlansd[i]));
}
console.log(flist);
[/code]

各項目の内訳

  1. ファイルへのパス(例: /DCIM/HOGE)
  2. ファイル名(例: SDIM0063.JPG)
  3. ファイルサイズ(例: 1404084)
  4. 不明(ファイルの種類?ファイルだと32、ディレクトリだと16)(例: 32)
  5. タイムスタンプ(時間)(例: 16501)
  6. タイムスタンプ(日付)(例: 14565)
ちなみに、ルートディレクトリにあるファイルの一覧を取得するコマンドは以下です。 http://flashair/command.cgi?op=100

100〜108にコマンドが割り当てられているようです。SSIDやパスワード、MACアドレスなどが取得できます。

ディレクトリを指定してファイル一覧を取得する方法は不明ですが、XMLHttpRequestを使って取得可能です。これでFlashAir内Webアプリが作れますね。このままでは乱暴に過ぎるので、実際に使うときはもっと丁寧にやる必要がありますが。

function getFileList(path) {
	var xhr = new XMLHttpRequest();
	xhr.open("GET", path, false);
	xhr.send(null);
	var html = xhr.responseText;
	document.head.innerHTML = html;
	var js = document.head.children[4].innerHTML;
	eval(js);
	return wlansd;
}

getFileList("/DCIM/");

wlansdの中身は、テンプレートとなる「SD_WLAN/List.htm」の中にある「<!--WLANSDJLST-->」というマクロがFlashAirのWebサーバで特別に展開される仕組みです。「SD_WLAN」の外に置いたhtmlファイルでは、この記述は展開されませんでした。ゆえに、こんな手を使う必要があります。外から参照するのでなしに、「SD_WLAN/List.htm」自体を書き換えて済むなら、そうしてしまう方がスマートですね。

設定アイコンが消えた場合

WebブラウザでFlashAir(http://flashair/)にアクセスしても、SSIDとパスワード設定のためのページに飛ぶギアの形をした設定アイコンが表示されないケースを体験しました。

それは、以下のURL(Aと呼称)で取得できるMASTERCODEと、

http://flashair/command.cgi?op=106

以下のCONFIG内のMASTERCODEとが一致していない場合になるようです。

/Volumes/CARD_NAME/SD_WLAN/CONFIG

一致しているかどうかは、以下のURLのxxxの部分に上記Aで得たMASTERCODEを与えてアクセスし、「SUCCESS」と返ってくるかどうかで確認できます。

http://flashair/config.cgi?MASTERCODE=xxxxxxxxxxxx

CONFIG内のMASTERCODEをAで得られるものに書き換えれば設定アイコンが表示されると思います。

わぁいFlashAir大好き

ここまでの解説で、FlashAirの極めて間違った方向性の楽しみ方について、何らか琴線に触れることはありましたでしょうか。

思った通りWebベースであることの可能性を感じることができ、理不尽な挙動の無い素直な製品なので、moyashiはとてもFlashAirを気に入っています。

ポメラDM100がFlashAirに対応!

2012.10.16追記: ポメラDM100がFlashAir対応し、Evernoteに投稿できるようになりました!

興奮の乾電池Evernote投稿マシンに!ポメラDM100が無線LAN内蔵SDカードFlashAirとEvernoteに対応 | ひとりぶろぐ

 - iPad, iPhone, Photo, SIGMA DP2x