読者です 読者をやめる 読者になる 読者になる

Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

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がボタン通りに動きます。