FlashAirのrubyプログラムによる利用一例

東芝の便利SDカード,FlashAirを買って便利に使っている.

このSDカードの特徴は無線LANを搭載している点だ.デジタルカメラやPCからはふつうのSDカードのように見えるが,実は無線LANアクセスポイントとして動作しており,スマートフォンから無線LANで接続してブラウザ上から画像をダウンロードすることが出来る.

こうした文章上では使いやすそうな印象を持つのだが,実際は「接続した先のWebサイトが使いにくい」「転送が遅い」「写真を1枚ずつダウンロードする手間がかかる」「PCに画像をダウンロードする場合は,PCの無線LANの接続先をFlashAirに変更する必要がある」など,辛い面がいくつかある.よって,一般人は素直にEyefiを買う方が幸せになれる可能性が高い.

しかし,Linux上などでのプログラミング知識があるのなら使いやすくなる.

まず,FlashAir自体がAPになるモードではなく,FlashAirが子機になるステーションモードに設定を変更することを行うと良い. FlashAir Developers – ドキュメント – 上級者向けチュートリアル – ステーションモードの利用

これをすることによって,PCの設定を変更することなくFlashAirに接続することができる.だが自宅のAP範囲内に限られるため,外で使いたい場合は,APとして起動するように再度設定を変えなければならない.

第2に,手元のフォルダとの同期をプログラムで行うことだ. 例えば,Linuxサーバ上に/picture_dataのようなフォルダを用意し,以下のようなrubyプログラムをcamera.rbとして保存,実行する.あくまで例.

#!/usr/bin/env ruby

require 'open-uri'
require 'csv'

ip = `nmblookup flashair | tail -n1`.split(" ").first

dist = "/picture_data/"

path = "/DCIM/100__TSB"
CSV.parse(open("http://#{ip}/command.cgi?op=100&DIR=#{path}")).each do |row|
  unless row.size == 6
    next
  end
  name = row[1]
  unless name =~ /^IMG/
    next
  end
  url = "http://"+ip+path+"/"+name

  dist_path = dist + name
  if File.exists? dist_path
  else
    p url
    p dist_path
    open(dist_path, "wb") do |f|
      f.write open(url).read
    end
  end
end

FlashAirのcommand.cgiにアクセスすることで画像ファイル一覧がcsvとして取得できる. FlashAir Developers – ドキュメント – APIガイド – command.cgi

その画像ファイル一覧と,手元のpicture_dataフォルダ内の画像を比較し,手元にないものを複数枚ダウンロードして保存する,という操作をプログラムを書くと一括して行うことができる.こうした操作を10秒に一度実行するようなループ動作させてもいいし,定時に実行するタイマー動作させても便利だ.

FlashAirはNetBIOSによって”flashair”というNetBIOS名を広告しており,Windows機からはhttp://flashair/というURLでアクセスできる.IPアドレスを知っている必要がない.本プログラムでは,sambaに含まれるnmblookupを用いて,NetBIOS名からIPアドレスの問い合わせを行っている.しかし,FlashAir側の設定で固定IPにしても良いし,そうすることでWindows上のrubyでも活用可能だろうと思う(そもそもWindows上ではNetBIOSによる指定が普通に使えるのかもしれない).

なぜ,このようなFlashAirの使い方をしているのかというと,

  • 自宅でのレンズのチェックのための撮影,もしくは撮影技術の修練
  • 即時のPCの画面による確認

という反復作業を行うことが多く,PCでの確認は従来手法では

  • デジタルカメラからSDカード取り出し
  • PCに差し込み
  • 自動起動からディレクトリ閲覧をクリック
  • 最新の画像をダブルクリック

という手順を踏む必要があった.これがFlashAirとプログラムを使うと,

  • プログラム実行
  • フォルダに増えているのでダブルクリック

程度の手間になる.プログラムをループ動作するようにすれば,

  • フォルダに勝手に増えているのでダブルクリック

の手間だけになるし,その気になれば

  • 増えたファイルを勝手に全画面表示する

まで行ける.

この利点が大きい.さらに工夫を加えたい場合にも,command.cgiやhttpベースの単純な仕組みは,プログラム上,簡単に取り扱うことができるので,容易である.

ただ,唯一,面倒だと思う作業があり,それはデジタルカメラのオートパワーセーブ設定を変えねばならぬ点である.FlashAirは仕組み上,SDカードに通電されていなければならないが,今,手元にあるデジタルカメラのオートパワーセーブの設定では15秒で通電が切れることになっている.その設定を「15分」や「セーブしない」などの設定に変更しなければ,画像の閲覧中・転送中に切断されてしまう.一方,セーブしないような設定にしておくと,無駄に電池を消耗してしまうので,戻す必要がある.この手間ばかりは仕方がない.

ということで,多少プログラミング知識ある人なら撮って見を楽しむことができるFlashAir,という話. Eyefi Pro X2を買えば,こんな苦労はする必要がないのだが,どうしてもLinuxサーバに自動取得・自動保存をさせたかったので.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください