LoginSignup
9

More than 5 years have passed since last update.

FlashAirを用いてカメラで撮影した写真を自動取り込みする

Last updated at Posted at 2019-02-17

はじめに

デジカメで撮影した写真をPCに取り込む作業は、以下のように何かと手順が多く面倒です。

  1. SDカードをカメラから取り出す
  2. SDカードをPCに接続する
  3. エクスプローラー等で取り込む写真を選択する
  4. どこかのディレクトリに保存する
  5. SDカードをPCから取り外す
  6. SDカードをカメラに戻す

この面倒さ故に取り込み作業をサボってしまい、せっかく撮った写真がSDカードの中で眠った状態になってしまうことがあります。そこでFlashAirを用いて、写真の取り込み作業を自動化してみました。写真撮影後にカメラの電源を入れるだけで、撮影した写真が自動的にPCに転送されます。

IMG_3267-セグメント 1.gif

FlashAirとは

概要

FlashAirは、東芝が生産している無線LAN機能付きのSDカードです。SDカード自体が無線LANの親機として動作し、スマホ等がそれに接続することで、SDカード中のデータをダウンロード出来ます。CM等では、デジカメで撮った写真を周囲の人とシェア出来ることをアピールしています。32GBの容量でヨドバシ等では4,500円ぐらい、Amazonの並行輸入品だと3,500円ぐらいで買えます。

FlashAirに秘められたポテンシャル

このようなFlashAirですが、実は非常に開発者フレンドリーな製品です。FlashAir Developersという開発者向けの情報サイトも開設されており、開発者向けの様々な情報が公開されています。これはSDカードなのか…?という機能が盛りだくさんであり、例えば次のようなことが出来ます。

  • 無線LAN親機と子機、それぞれに役割を切り替えて動作する(同時動作も可能)
  • インターネット上からファイルをダウンロードする
  • FlashAirがWebサーバとして振る舞う
  • GPIO制御によりSDカードの端子を操作する
  • Luaスクリプトにより、FlashAirの動作を制御する

今回は主にLuaスクリプト実行機能を用いて、カメラで撮影した写真をPCに転送してみます。

写真自動取り込みシステムの概要

今回構築したシステムは、以下の要素から成り立ちます。

  • FlashAir:カメラに挿入。撮影した写真データの保存先であるとともに、写真の転送処理を行う。無線LAN子機として動作。
  • FTPサーバ:写真の保存先であり、今回はPC上に構築。無線LAN子機として動作。
  • 無線LANルータ:FlashAirとFTPサーバを接続するためのネットワークを構成する。無線LAN親機として動作。

図2.png

そしてこのような構成の上で、写真の取り込み作業を次のように行います。

  1. 無線LANのネットワーク圏内でカメラの電源をONにする(手動)。
  2. FlashAirの電源がONとなる。
  3. FlashAirが無線LANネットワークに接続する。
  4. SDカードに保存されている写真データを、FTPサーバに対して転送する。
  5. 転送が終わるまでカメラを放置し、転送が終了次第カメラの電源をOFFにする(手動)。

2~4の動作は自動で行われるため、実際に手を動かすのはカメラの電源のON/OFF作業のみとなります。転送が終わるのを見極めてカメラの電源をOFFにするのが面倒ですが、妥協することとします。

実装手順

実装手順は以下の通りです。

  1. FTPサーバの構築
  2. FlashAirのCONFIG設定
  3. Luaスクリプトの作成と配置

1. FTPサーバの構築

まず写真を受け取るためのFTPサーバを構築します。今回はお試し用として、Windows 10 Homeの環境で構築しました。Windowsには標準でFTPサーバの機能が付いているため、比較的簡単に構築が出来ます。構築にはWindows 10/8/7/Vista に FTP サービス をインストールを参考にしました。Homeエディションの場合、"管理ツール"からのユーザの追加が制限されていますが、"設定>アカウント>家族とその他のユーザー"から、他のユーザとしてローカルアカウントを作れば大丈夫です。

2. FlashAirのCONFIG設定

FlashAir中の/SD_WLAN/CONFIGを書き換え、次のように設定します。

  • 無線LANモードをSTAモード(FlashAirが無線LAN子機となるステーションモード)に変更:APPMODE
  • 接続先無線LANネットワークの設定:APPSSID, APPNETWORKKEY
  • アップロード機能の有効化:UPLOAD
  • 起動時に実行するLuaスクリプトのパス:LUA_RUN_SCRIPT

実際のCONFIGファイルを以下に示します。

[Vendor]
CIPATH=/DCIM/100__TSB/FA000001.JPG
VERSION=F15DBW3BW4.00.02
CID=12345678901234567890123456789012
PRODUCT=FlashAir
VENDOR=TOSHIBA
MASTERCODE=AAAAAAAAAAAA

APPMODE=5
APPSSID=接続先のSSID
APPNETWORKKEY=接続先のセキュリティキー
UPLOAD=1
LUA_RUN_SCRIPT=/UploadPhotos.lua

これらの設定により、FlashAirは電源が入ると、APPSSIDで指定した無線LANネットワークに接続し、LUN_RUA_SCRIPTで指定されたLuaスクリプトを実行します。

3. Luaスクリプトの作成と配置

作成したスクリプトを以下に示します。FlashAir Developers中のFTPを使ったファイルのアップロードを参考とし、カメラの保存ディレクトリ内のファイルを、順次アップロードします。今回用いたカメラはRICOHのGR IIであり、/DCIM/458RICOH中に撮影写真が保存されるため、そのディレクトリ中のファイルを順次アップロードします。アップロードを終えたデータは、再アップロードされないよう別のディレクトリ(/DCIM/AlreadyUploaded)に移動します(削除しても良いですが、何らかの要因でデータを紛失した場合に備えておきます)。server, serverDir, user, passwdには、FTPサーバのIPアドレス、アップロード先ディレクトリ、ユーザ名、パスワードを指定します。

local photosFolder    = "/DCIM/458RICOH"
local destinationFolder    = "/DCIM/AlreadyUploaded"

local server    = "192.168.11.3" -- IP address of FTP server
local serverDir = "/wwwroot"     -- FTP server upload folder
local user      = "flashair"     -- FTP user name
local passwd    = "password"     -- FTP password

local ftpstring = "ftp://"..user..":"..passwd.."@"..server..serverDir

for file in lfs.dir(photosFolder) do
    attr = lfs.attributes(photosFolder .. "/" .. file)
    if attr.mode == "file" then
        response = fa.ftp("put", ftpstring .. "/" .. file, photosFolder .. "/" .. file)
        if response ~= nil then
            fa.rename(photosFolder .. "/" .. file, destinationFolder .. "/" .. file)
        end
    end
end

このプログラムをUploadPhotos.luaとしてSDカードのルートディレクトリ中に保存することで、電源投入後に写真の転送処理が行われます。

おわりに

このシステムにより、帰宅後にカメラの電源を入れて放置するだけで、写真が自動で取り込まれます。気がつけば取り込みが完了しているため、写真の選定や現像作業にスムーズに移行できます。似たようなシステムを作りたい方の参考になれば幸いです。

注意点など

  • カメラの設定によっては、一定時間後に電源が切れるため、設定を変更し、起動時間を伸ばした方が良いかもしれません
  • SDカードの電源はカメラから供給されるため、写真転送時はカメラのバッテリーの消費が早くなります。
  • 環境にもよると思いますが、転送にはそこそこの時間がかかります(1MBあたり1秒程度)。そのため数百枚のRAWデータを転送する場合などは、素直にSDカードリーダで読み込んだ方が早いです。
  • 現状のプログラムは、ファイル送信後にファイルの場所を移動する動作であるため、SDカードの空き容量がどんどんと減っていきます。そのため適度なタイミングでデータを削除する必要があります。
  • FlashAirのデバッグ作業はかなり辛いです。有志の方がFlashTools Lua Editor(FTLE)というすごいツールを公開しているので、開発を行う際には利用することをおすすめします。デバッグ時に本当に役立ちました!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9