今回も前回に引き続き、FlashAirのGPIO機能を試してみたいと思います。
【CQ出版社のInterface 2016年8月号 第1章】で紹介されているので記事を参考に試していきます。
今回は3回目なので「実験3:スタンドアローンでLuaスクリプト記述指定でI/O」を試してみたのですが失敗。。。
「実験4:PC側ブラウザからLuaスクリプト記述指定でI/O」を先に試します。
使用する機器は前回と同じなので省かせていただきます。
手順
1.FlashAirのCONFIG設定
2.Luaスクリプト記述
3.機器の接続
4.FlashAirへネットワーク接続
5.実行
では手順に沿って進めていきます。
1.FlashAirのCONFIG設定
FlashAirをPCに接続しCONFIGファイルを編集します。
GPIOを制御するため「IF_MODE=1」を記述します。
以下を追記します。
IF_MODE=1
2.Luaスクリプト記述
FlashAirをPCに接続しLuaスクリプトを記述します。
仕様は以下のようにします。
・LEDを赤→青→緑の順で点灯させる
・スイッチで点灯時間(1秒 / 3秒)を切り替える
書籍を見ながらbit32.bandって何だろうとググったところLua のバージョン 5.2 と 5.3 とで、
ビット演算の仕様が大きく代わるようです。
FlashAir W-03 は 5.2 みたいです。
5.2 では bit 演算用パッケージ bit32 の関数を利用する必要があるとのことです。
5.3 では C と同様に bit 演算用の演算子を利用できるようなので 5.3に対応されることを期待、、、
-- sleep(3000) -- 起動後即、pioを使用すると問題があるようです。今回は不要なのでコメントアウト -- Switchの状態取得とSleep値設定 s, indata = fa.pio(0x02, 0x00) sw = bit32.band(indata, 0x01) if sw == 1 then slp=1000 -- Switch=Highの場合、Sleep値に1秒を設定 else slp=3000 -- Switch=Lowの場合、Sleep値に3秒を設定 end -- Sleep値に従いLEDを赤→青→緑の順で点灯させる fa.pio(0x02, 0x02) sleep(slp) fa.pio(0x04, 0x04) sleep(slp) fa.pio(0x08, 0x08) sleep(slp) -- Httpレスポンス送信 print("HTTP/1.1 200 OK\r") print("\r") outstr = string.format("Switch=%d Sleep=%d", sw, slp) print(outstr)
ファイル名を request.luaとし保存します。
3.機器の接続
FlashAirとAirioとモバイルバッテリーを接続し通電する。
FlashAirをAirioに挿す。
Airioをモバイルバッテリーに挿す。
モバイルバッテリーの電源をONにします。
4.FlashAirへネットワーク接続
PCの接続先をルータなどからFlashAirに切り替える
5.実行
5.1 スイッチで点灯時間を1秒にする
AirioのスイッチをHigh側に倒します。
ブラウザのURLに以下のアドレスを入力しLuaを実行します。
http://flashair/request.lua
仕様どおりLEDが赤→青→緑の順で1秒の間隔で切り替わっていきます。
またブラウザに以下が出力されました。
Switch=1 Sleep=1000
5.2 スイッチで点灯時間を3秒にする
スイッチをLow側に倒して再度 ブラウザよりLuaを実行します。
遅くなりました。
仕様どおりLEDが赤→青→緑の順で3秒の間隔で切り替わっていきます。
Switch=0 Sleep=3000
はいっ。仕様どおり動きました。
今回はここまでとします。
次回は実験3に再チャレンジします。