Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

FlashAir内蔵Luaを使ってWEBブラウザからLEDをチカチカさせる

FlashAirにはLuaという軽量言語が内蔵されています。
RubyPythonのような文字列、配列を軽く操作できる便利関数が揃っています。
それに加えて、極めて高速。
どれほどかと言えば、ゲームエンジンの開発初期段階でパラメータ調整なんかに使われる程。
フットプリントも軽いのでSDカードのような非力な実行環境でもサクサク動きます。

FlashAirではデフォからos系の機能を削り、代わりにWEBやSDカードIOまわりを強化した独自パターンのものを採用しています。
今回はこの独自Luaを使ってLチカさせる方法を考えてみます。

実際のところ

作業環境

  • FlashAir W-03 32Gbyte
  • OS X Yosemite(10.10)

部材

初期設定

まずは設定。
SDカードをスロットに

$ nano /Volumes/NO\ NAME/SD_WLAN/CONFIG 

キモは

  • APPNAME
  • IFMODE

です。
前の記事で紹介したツールを使うと、これら値の設定は空白で出てませんでした。

最終的に私のは、こんな感じに

[Vendor]

CIPATH=/DCIM/100__TSB/FA000001.JPG
VERSION=FA9CAW3AW3.00.00
CID=02544d535733324731ea8ec97900f701
PRODUCT=FlashAir
VENDOR=TOSHIBA
APPMODE=5
APPAUTOTIME=300000
DNSMODE=1
APPNAME=flashair
APPSSID=YOURSSID
APPNETWORKKEY=*********
LOCK=1
WEBDAV=1
TIMEZONE=36
IFMODE=1

index.html

設定が終わったら、いよいよファイルです。
場所は"/Volumes/NO\ NAME/index.index"のように、SDカード直下でよいです。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Test</title>
  </head>
  <body>
    <form action="index.lua" method="GET">
      <button type="submit" name="light" value="on">ON</button>
      <button type="submit" name="light" value="off">OFF</button>
    </form>
  </body>
</html>

index.lua

-- /Volumes/NO\ NAME/index.lua

print[[
HTTP/1.1 303 See Other
Location: index.html

]]
local arg = ...
local light = arg:match("light=(%a+)")
local LED_PIN = 0x01 -- CMD

if light == "on" then
  fa.pio(LED_PIN, 0x01)
  print "ON"
else
  fa.pio(LED_PIN, 0x00)
  print "OFF"
end

配線

電源はUSBシリアル変換器の5Vから、信号はSDIから出力。

動作確認

http://flashair.local/index.htmlを見ると、ブラウザに簡単なボタンが二個表示されている筈です。
indexはsubmitからluaスクリプトを呼び出しています。
呼び出されたluaは303を返すので、そのままindex.htmlに返します。
が、バックでは動いているのでLEDがボタン通りに動きます。