FlashAirにはLuaという軽量言語が内蔵されています。
RubyやPythonのような文字列、配列を軽く操作できる便利関数が揃っています。
それに加えて、極めて高速。
どれほどかと言えば、ゲームエンジンの開発初期段階でパラメータ調整なんかに使われる程。
フットプリントも軽いのでSDカードのような非力な実行環境でもサクサク動きます。
FlashAirではデフォからos系の機能を削り、代わりにWEBやSDカードIOまわりを強化した独自パターンのものを採用しています。
今回はこの独自Luaを使ってLチカさせる方法を考えてみます。
実際のところ
作業環境
- FlashAir W-03 32Gbyte
- OS X Yosemite(10.10)
部材
- 発光LED
- 100kΩ
- 小型USBシリアル変換モジュール
- SDカードスロットDIP化モジュール
- USBマイクロのケーブル
- ジャンパ線
- ブレッドボード
初期設定
まずは設定。
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
動作確認
http://flashair.local/index.htmlを見ると、ブラウザに簡単なボタンが二個表示されている筈です。
indexはsubmitからluaスクリプトを呼び出しています。
呼び出されたluaは303を返すので、そのままindex.htmlに返します。
が、バックでは動いているのでLEDがボタン通りに動きます。