FlashAirからLuaでJSONをPOSTしてNode-REDに連携するメモです。
やりたいこと
FlashAirの起動時にLuaプログラムを動かして、シンプルな形でJSONデータをPOSTしてNode-REDとやりとりします。
FlashAirの設定
FlashAirの4世代を使用して設定を行います。
CONFIGの設定
こちらを参考に SD_WLAN/CONFIG のCONFIGファイルを以下のように設定しました。
[Vendor] CIPATH=/DCIM/100__TSB/FA000001.JPG APPMODE=5 APPNAME=myflashair APPSSID=APPSSID APPNETWORKKEY=************ VERSION=VERSION CID=CID PRODUCT=FlashAir VENDOR=TOSHIBA MASTERCODE=MASTERCODE LUA_RUN_SCRIPT=/Hello_Node-RED.lua
キモはLUA_RUN_SCRIPTです。このHello_Node-RED.luaがFlashAirが起動したときに実行されます。
APPSSID・APPNETWORKKEY・VERSION・CID・MASTERCODEあたりは適宜自分の環境に合わせて設定しておきましょう。APPMODEを5にしているのでSTAモードです。これでAPPSSID・APPNETWORKKEYの設定を行ってWi-Fiへ通信可能にしておきます。
Hello_Node-RED.lua
続いて、実行先のLuaプログラムです。
最上位の階層にHello_Node-RED.luaを置きます。先ほどのCONFIGで示したLUA_RUN_SCRIPTの /Hello_Node-RED.lua ですね。
プログラムは以下を参考にしました。
FlashAir非公式Luaチュートリアル – 3.Twitterでつぶやく – おまけ程度のツール置き場
こちらでPOSTの送り方を、
IFTTT Maker ChannelをFlashAirで使ってみた
こちらで、JSONデータの送り方を参考にしました。
/Hello_Node-RED.lua
sleep(15000); local cjson = require "cjson" mes = { messageEN = "Hello Node-RED!!!", messageJP = "やあ!のーどれっど!", flag= "true" } mes = cjson.encode(mes) len_s = tostring(string.len(mes)) b,c,h = fa.request{ url = "http://163.43.30.76:1880/flashair_post", method = "POST", headers = {["Content-Length"] = len_s,["Content-Type"] = "application/json;charset=utf-8"}, body = mes } print("HTTP/1.1 200 OK\r") print("Content-Type:application/json;charset=utf-8;\r") print("\r") print(b) print(c)
**** NODE-RED ADDRESS **** の部分は、Node-REDを起動しているサーバーアドレスにしましょう。私の場合は、さくらインターネットで起動しているNode-REDに向けて無事動きました。
その他に大事な点としては、起動時にWi-Fiつながるまでに少し時間がかかるのでsleepを15秒かけています。
Node-REDの設定
つづいて、Node-REDの設定です。
このようにシンプルにPOSTでJSONを受けて返答するだけの仕組みです。
http in ノードは以下のとおりです。
/flashair_post というURLで受けています。
このフローをデプロイした後にFlashAirで試しにURLと叩いてみると動作確認できました!
JSONフロー
JSONフローも置いておきます。
[ { "id": "f27b4253.48fbf", "type": "http in", "z": "8554fe50.57faf", "name": "", "url": "/flashair_post", "method": "post", "upload": false, "swaggerDoc": "", "x": 310, "y": 420, "wires": [ [ "284c2301.87529c", "f500ec5e.7abf4" ] ] }, { "id": "284c2301.87529c", "type": "debug", "z": "8554fe50.57faf", "name": "", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "x": 500, "y": 420, "wires": [] }, { "id": "f500ec5e.7abf4", "type": "http response", "z": "8554fe50.57faf", "name": "", "statusCode": "", "headers": {}, "x": 490, "y": 480, "wires": [] } ]
動かしてみる
それではいざ動かしてみましょう。
FlashAirを差し込みます。
しばらく待っていると起動の5秒とスリープの15秒でだいたい20秒くらいでしょうか。
Node-REDのdebugノードが反応し、英語も日本語もしっかりデータがJSONで送られていることが確認できました。日本語が文字化けしないのも素敵ですね。
FlashAirでファイルをPOSTで送るサンプルは多かったのですが、このようにシンプルな形でJSONデータをPOSTで送るものが試せてよかったです。Node-REDとFlashAirを引き合わせることができました。
ひきつづき、いろいろと試してみます。