FlashAir の HTTPD をエミュレーションするスクリプト
FlashAir に搭載されている HTTPD をエミュレーションする Plack::App::Emulate::FlashAir というのを書いた。SD カードマウントして書きかえて実機に直接アクセスするでもいいんだけど、それだと、書きこみで待たされたり、接続している間ネットができなかったりする。
機能は以下の通り
- ./sdcard/ を sdcard のルートディレクトリとする
- List.htm (コピーするのはアレっぽいので、付属のは自分で書いたやつ) によるディレクトリインデックス
- thumnail.cgi によるサムネイル画像取得 (実機と同じく exif の ThumbnailImage を展開しているだけ)
- command.cgi のダミーレスポンス
- config.cgi のダミーレスポンス
List.htm をリライト (デザインかえたいとか) するとか、別途機能をちょっとつけたいときのデバッグに便利だと思う。
あと、SDカード内のファイルを最新順に表示するページをつくった。
- https://github.com/cho45/flashair/blob/master/sdcard/recent.htm
- https://github.com/cho45/flashair/blob/master/sdcard/lib.js
を FlashAir のカード内のどっかにおいて、アクセスしたら動くとおもう。iPhone と Android でまぁまぁいい感じになるように調整した。
FlashAir
FlashAir というのが最近出たらしく、おもしろそうなので買ってみた。機能的には、Wi-Fi の AP と HTTPD として動いて、SD カード内の画像をダウンロードできる、というもので、Eye-Fi の競合 (機能的には違うんだけど) 的製品になっている。
Eye-Fi は持っていないのに、いきなりこんな謎なものを買ったのは、HTTPD が動いてくれるというところにひっかかったからだ。カメラみたいなデバイスで HTTPD が動くのはなんとなくわくわくするのである。
FlashAir は、割と素直な感じで、SD カードの中身をそのまま HTTPD で配信する感じなので、組み込みのページ以外に、自分で HTML と JS と CSS を書けば独自ページを作成できる。また、組み込みで配信されるページ自体も、SD カード内のファイルをいじると変更できるようになっている。ハードコードされていたりしないのは非常に嬉しいと思う。
ということで、SDカード内の写真のうち、最新順に表示するページを作ってみた。ファイルシステムの関係上ファイル名に制限がある (拡張子が3文字までとか) とか、thumbnail.cgi の挙動がおかしいとかあるけど、こういうのは簡単につくれた。今後ファームウェアアップデートで HTTPD がもうちょい安定するといいなあと思う。
なんとなく、スマフォのカメラの変わりに使えたらいいな、と思っていたけれど、ネットワークの関係でそうもいかない。FlashAir には AP として接続するため、その間、3G 回線など、Wi-Fi と排他的になっているネットワークが使用できない。FlashAir はもちろんインターネットには接続されないので、FlashAir に接続している間、スマフォはインターネットから切断されてしまう。picplz とかそういうアプリは、送信できない場合にキューに貯めるから、AP からの接続をきったあとにアップロードが開始されるだろうけれど、インターネットと同時に接続できないのは結構ストレスがあるので、用途によっては全く使えない感じになりそう。
あと Yahoo! トピックスに載ってた情報によると、SDK も配布されるみたいな話があるので、それはそれで楽しみです。
追記
関連エントリー
- ✖ PQI Air Card Wi-Fi内蔵SDカードアダプタ (アダプタのみモデル) 6W21-0000R1 cho45 pqi ★ 4.0 ...
- スマフォのテザリングを主回線にした家庭内LANの構築 cho45 ★ 5.0 / 5.0 cho45 結局これを買って、あとかなり昔に買ったしょぼいルーターを使って構築してみた。 インターネット...
- NanoVNA のリモート化 (Wi-Fi 中継) アンテナの調整をする場合、給電点 (測定点) と調整点は離れていることが多いなというコンテキストで、NanoVNA の Bluetooth ...
- IPv6 IPoE + DS-Lite 環境での RTX1200 の設定 ひょんなことから(?)RTX1200を譲ってもらったので使ってみる。VPN 貼りたいとかいう欲求はなくて、普通に家庭用ブロードバンドルーター...
- おうちのメインRaspberryPiの入れ替え メインの Raspi という存在が自宅にはあるのだが、だいぶ前にセットアップしていろいろ秘伝のタレのような状態になっていたうえに、ろくに a...
最近書いたなんとなくかっこいいかなと思うコード
JSDeferred のサンプルコードの殆どは、pre に書いてあるやつをそのままJSで実行する形になっている (二重に書いていない)
その中で console.log() とかを使っているけれど、デモなので console.log() をブラウザ側ではなく、ページ側に表示させたいと思い、それらの console.log をフックしている。この場合、評価したいコードは文字列として存在するので、Function オブジェクトを使って console のダミーを作って実行するようにした。
new Function('console', code)({ log : function () { ... } });Function オブジェクトの引数の名前を console にして、実行するときに代替オブジェクトを渡すようにした。すなわちこの場合 console はローカル変数になっている。
こうすることで、元々の console.log には一切手を加えず、このコードを実行している間だけ、console オブジェクトをさしかえた。一時的に大本の console.log を差し替えるやりかたは、非同期なコードがまざると大変なので、いい思い付きをした、と自画自賛しました。




