FlashAirでEye-Fiの代用をさせよう!
もう、とうに終わったEye-FiとFlashAirで今さら何をという気もしますが、それでも、非常に快適な環境が復活したので、ご紹介したいと思います。
Eye-Fiは良かった…
以前は、TG-3+Eye-Fiを使っており、撮った写真が自動的にPCに転送され、非常に快適な環境でした。ところがEy-Fiはサービスを終了してしまい、この環境は失われてしまいました。
TG-3には内蔵Wi-Fiがあり、スマホで吸い出すこともできます。それでも、以前の環境と比べるとかなり使い勝手が悪くなりました。しばらくはFlashAir+Snowlyで吸い出していたのですが、接続に失敗することも多く、かなりイライラさせられました。またカメラ内の写真を削除しないと、同じ写真を何度も吸い出してしまいます。
いい加減うんざりしていたのですが、先日、FlashAirでLuaを使えば、Eye-Fiと同等の機能が実現できることを知りました。最初は半信半疑でしたが、最終的に、Eye-fiと同等の快適な環境を取り戻すことができました。
構築方法の概要
FlashAirのW-03以降では、Luaというスクリプト言語が使えます。下記は、おおまかな手順です。
画像送信用のスクリプト(後記:PicUpload.lua)をルートにコピー
設定用ファイル(後記)を、DATAフォルダを作成してコピー
(ルートでもいいけど、目障りなのでフォルダに入れました)/SD_WLAN/configの内に、いくつかの追加記述をする(後述)
テキストエディタが使えれば設定は可能です。FTPサーバーを準備する
Windows標準のFTPサーバーを使用することができます。ただ、FTP?サーバー?という方には、ちょっときびしいかもしれません。
FlashAirの設定準備
FlashAirのファームウェアが最終版であることを確認してください。
FlashAirToolでバージョン表示ができます。ファームウェア自身やアップデートの仕方は、ネットを検索してください。このアップデートを行うとすべての設定が消えてしまうので、最初に行ってください。FlashAirToolでWi-Fiアクセスポイントの設定(SSIDとパスワード)を行ってください。この設定は/SD_WLAN/configに書き込まれます。
FTPサーバーの準備
FlashAirのFTPクライアントはパッシブ接続のようですので、ファイヤーウォールで、下記の2つのポートを開いてください。
ファイルの転送や書換え
言うまでもありませんが、FlashAirはSDカードですので、USBアダプタに挿入して、PCのドライブとして見えるようにして、ファイルの転送や書換えを行います。
USBアダプタは、デバイスが認識がされているかが確認できるパイロットランプ付きのものが便利です。
ソースコード
「FTPを使ったファイルのアップロード」から、ほぼ、まるパクリです。改修した点は…
FTPサーバー設定と撮影画像フォルダを別ファイルにした
/DATA/config.lua送信したファイルのタイムスタンプを記録して、次回は、それ以降に撮影した画像のみを送信する(all_upload=falseの場合)。作られるタイムスタンプのファイルパスは下記になります。
/DATA/last_upload.txt
-- /PicUpload.lua
print("ver0.9.0")
local config_file = "/DATA/config.lua"
local last_upload_file = "/DATA/last_upload.txt"
local last_upload_date = 0
local f = io.open(last_upload_file, "r")
if f then
last_upload_date = tonumber(f:read("*a"))
--print(last_upload_date)
f:close()
else
print("fail open "..last_upload_file)
end
-- Load the configuration
local config = dofile(config_file)
for file in lfs.dir(config.directory_path) do
if lfs.attributes(config.directory_path.."/"..file, "mode") == "file" then
local image_path = config.directory_path.."/"..file
local file_date = lfs.attributes(image_path).modification
if config.all_update or file_date > last_upload_date then
local response = fa.ftp("put", config.ftpstring.."/"..file, image_path)
if response ~= nil then
print("Success")
local f = io.open(last_upload_file, "w")
f:write(file_date)
f:close()
else
print("Fail")
end
print(" FTP put: "..image_path.." -> "..config.ftpstring.."/"..file)
else
print("skip: "..image_path)
end
end
end
設定ファイル(FTPサーバー接続文字列と撮影フォルダ)
-- /DATA/config.lua
return {
ftpstring="ftp://<ユーザー名>:<パスワード>@<IPアドレス>/<記録パス>",
directory_path="/DCIM/<撮影フォルダ名>",
all_update=false
}
ftpstringの内容を、ファイルエクスプローラーのアドレス窓に張り付ければ開けるはずです。開けない場合、FTPの設定かアクセス権、またはファイヤーウォール、もしくはパスの誤りかもしれません。
この接続テストは、FTPサーバーを稼働させているPCとは別のPCから行ってください。なぜならFTPサーバーを稼働させているPCと同じPCで操作すると、ファイヤーウォールの設定が不適切であっても接続できてしまうからです。
all_updateをtrueにすると、directory_pathにあるファイルを、タイムスタンプに関係なくすべてアップロードします。アップロードテストをする場合にtrueに、運用ではfalseにしてください。
撮影フォルダは、カメラごとに名前が違います。1枚撮影すればフォルダが作られると思いますので、その名前で書き換えてください。
/SD_WLAN/configの書換え
ファイルのアップロードを行う設定と、Luaプログラムを起動するタイミングを/SD_WLAN/configに追記します。
ファイルの最後は空行にしないと認識しないとの情報もありました(未検証)。ちょっと説明がしにくいのですが、下記の場合だとエディタのカーソルが4行目の先頭にという意味です。カーソルが3行目の末尾だとダメということです。
Upload=1
LUA_RUN_SCRIPT=/PicUpload.lua
LUA_SD_EVENT=/PicUpload.lua
この設定は、作業の最後に行います。なぜなら、この設定が有効になった時点から、FlashAirに通電するたび、ファイルが書き込まれるたびにスクリプトが実行されてしまうからです。
これはカメラに挿入した場合には意図した動作ですが、USBアダプタがパソコンに接続された場合でも同じ動作になります。
今回のように、FTPサーバーに接続してファイル転送という重たい処理が動くことになりますので、この点は留意しておく必要があります。
トラブルシューティング
上記の手順を正しくおこなっても、うまく画像がアップロードされないかもしれません。そんなときは下記をヒントにしてください。
いきなりFlashAirをカメラに取り付けずに、USBアダプタの操作でテストしたほうが状況をつかみやすいと思います。それでうまく動作したらカメラに装着してテストしてください。
カメラの電源を入れる=FlashAirをUSBアダプタを挿入する
カメラで撮影する=FlashAirの撮影フォルダに画像をコピーする
まずPCのエクスプローラーを使って、FTPサーバーマシン以外からサーバーに接続できるか試してください。これで成功しないかぎり、カメラからも成功しません。
遭遇したトラブル
撮影時にアップロードされない
カメラ電源の切り入りだとアップロードされたりする。原因は不明。
まとめ
ここに記述した内容は、FlashAir+FTPで検索すると似たような記事がでてきますの参考にしてください。
なにより、もうFlashAirは生産終了しているので、興味のあるかたはオークションなどで、早めに入手されることをお勧めします。
うまくいかないと、デバッカーでどこに問題があるか調べたくなる方もいると思いますが、これがなかなか手ごわいです。今回、多少の見識を得ましたので、機会があれば書いてみたいと思います。