からくりブログ

株式会社からくり社員のブログです

【FlashAir】GPIO機能を試す その3

今回も前回に引き続き、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に再チャレンジします。

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>