FlashAir IoT HubにArduinoからアップロードする極めて簡単なスクリプトです.
簡単さ,理解しやすさを主眼においてスクリプトを構成しました.
一応,安定性も加味してあります.
これらのスクリプト・スケッチを書き込むだけで,Arduinoのアナログ入力電圧を
FlashAir IoT Hubに簡単にアップロードすることができます.
温度センサーや,明るさセンサー,音量センサーなど,お好きなセンサーを繋いでも良いですし,
スケッチを改造して,各種I2Cなどのセンサー値を送るようにしても便利です
cdsセンサー(明るさセンサ)を接続した例
簡単さ,理解しやすさを主眼においてスクリプトを構成しました.
一応,安定性も加味してあります.
これらのスクリプト・スケッチを書き込むだけで,Arduinoのアナログ入力電圧を
FlashAir IoT Hubに簡単にアップロードすることができます.
温度センサーや,明るさセンサー,音量センサーなど,お好きなセンサーを繋いでも良いですし,
スケッチを改造して,各種I2Cなどのセンサー値を送るようにしても便利です
cdsセンサー(明るさセンサ)を接続した例
![](https://image02.seesaawiki.jp/f/v/flashair-dev/050f5377c23c2282-s.jpg)
ArduinoにFlashAirを差し込んだシールドを装着し,以下のスケッチを書き込んでください.
このスケッチは,AnalogReadで読み込んだピンの電圧をFlashAirに書き込んでいます.
他の値を書き込みたい場合は,writeFlashAirに渡す値を変更するのが一番簡単です.
このスケッチでは,Seeed Studio製のSDカードシールドを前提としています.
以下の画像をクリックすることでスイッチサイエンス社の購入ページに飛ぶことができます.
![](https://image01.seesaawiki.jp/f/v/flashair-dev/2d0a86da7fa8ae52-s.jpg)
引用元: スイッチサイエンス https://www.switch-science.com/catalog/1292/
他のSDカードシールドを用いている場合はそれに合わせてSD.begin(4)の値を変更してください.
IoTHub.ino
このファイルはお好みに合わせて変更してください.とりあえず試すにはまずコピペしてください
このスケッチは,AnalogReadで読み込んだピンの電圧をFlashAirに書き込んでいます.
他の値を書き込みたい場合は,writeFlashAirに渡す値を変更するのが一番簡単です.
このスケッチでは,Seeed Studio製のSDカードシールドを前提としています.
以下の画像をクリックすることでスイッチサイエンス社の購入ページに飛ぶことができます.
![](https://image01.seesaawiki.jp/f/v/flashair-dev/2d0a86da7fa8ae52-s.jpg)
引用元: スイッチサイエンス https://www.switch-science.com/catalog/1292/
他のSDカードシールドを用いている場合はそれに合わせてSD.begin(4)の値を変更してください.
IoTHub.ino
このファイルはお好みに合わせて変更してください.とりあえず試すにはまずコピペしてください
#include <SPI.h> #include <SD.h> File f; void setup() { Serial.begin(9600); //SDカードの初期化 if (!SD.begin(4)) { Serial.println("SD Err!"); return; } } void loop() { //ここでは,アナログ入力を電圧に変換して書き込み float v1 = (analogRead(0)*(5.0/1023.0)); float v2 = (analogRead(1)*(5.0/1023.0)); float v3 = (analogRead(2)*(5.0/1023.0)); float v4 = (analogRead(3)*(5.0/1023.0)); float v5 = (analogRead(4)*(5.0/1023.0)); writeFlashAir(v1,v2,v3,v4,v5); Serial.println("Write file..."); //10秒待ちます.この待ち時間はLuaの時間との兼ね合いです. //Luaの待ち時間の2倍以上を目安としてください delay(10000); } //FlashAirに値を送信します void writeFlashAir(float value1,float value2,float value3,float value4,float value5) { //テキストファイルは毎回削除します. //でないとLuaが読み込みきれなくてメモリエラーで落ちます SD.remove("input.txt"); //ファイルを作成します f = SD.open("input.txt", FILE_WRITE); if(!f){ Serial.println("file open failed!"); return; } //データを書き込みます.5行まで,数値のみ.少数可能 f.println(value1); f.println(value2); f.println(value3); f.println(value4); f.println(value5); //なるべく早く閉じます f.close(); }
1. まず,FlashAir IoT Hubのアカウントを作成してください.
2. 次に,Tool:FIH_Setupなどを用いて,FlashAirを設定してください.
設定の際,次のようにしてください.(書込時実行の欄を必ず空欄にしてください)
![](https://image02.seesaawiki.jp/f/v/flashair-dev/d82474d71a350d4c.png)
3. 次に,以下のスクリプトを「bootscript.lua」として,FlashAirに保存してください
4. 最後に,FlashAirにIoT Hubのアクセストークン(credentials.json)を書き込んでください.
5. 終わったら,SDカードシールドにFlashAirを差し込み,Arduino側の準備をしてください
FlashAir IoT Hub公式のスクリプトは内蔵してあるため不要です.
bootscript.lua
このファイルは編集する必要はありません.コピペしてください
2. 次に,Tool:FIH_Setupなどを用いて,FlashAirを設定してください.
設定の際,次のようにしてください.(書込時実行の欄を必ず空欄にしてください)
![](https://image02.seesaawiki.jp/f/v/flashair-dev/d82474d71a350d4c.png)
3. 次に,以下のスクリプトを「bootscript.lua」として,FlashAirに保存してください
4. 最後に,FlashAirにIoT Hubのアクセストークン(credentials.json)を書き込んでください.
5. 終わったら,SDカードシールドにFlashAirを差し込み,Arduino側の準備をしてください
FlashAir IoT Hub公式のスクリプトは内蔵してあるため不要です.
bootscript.lua
このファイルは編集する必要はありません.コピペしてください
sleep(10000) --Wi-Fi接続がうまくいくおまじない --読み込むファイル名をここに入力 filename = "/input.txt" --メモリ不足にならない最低限のiothub.lua local CONFIG_FILE = '/credentials.json' local config = {} local function readConfig(file_name) local file = io.open(file_name) local text = file:read("*a") file:close() local config = cjson.decode(text) return config end local function addMeasurement(values) local body = cjson.encode({values=values}) b, c, h = fa.request { url=config.api_base .. '/v1/flashairs/' .. config.id .. '/measurements/simple', method='POST', headers={ ['Authorization']='Basic ' .. config.credential, ['Content-Length']=tostring(string.len(body)), ['Content-Type']='application/json', }, body=body, } print(c) print(b) end config = readConfig(CONFIG_FILE) --ここからメイン処理 while true do --1回目の読み出し local f = io.open(filename,"r") if(f == nil)then dat1 = "" else dat1 = f:read("*a") f:close() end --安定するまで少し待つ sleep(1000) --2回目の読み出し local f = io.open(filename,"r") if(f == nil)then dat2 = "-" else dat2 = f:read("*a") f:close() end --一致すれば安定,一致しなければ不安定な結果だった if(dat1 == dat2)then --配列の初期化 local value = {} for i=1,5 do value[i] = 0 end --1行ずつ分解して読み出し local i=1 for w in string.gmatch(dat2, "%g+") do --無効な値は0に if(tonumber(w) ~= nil)then value[i] = tonumber(w) end i=i+1 end --IoT Hubに送信 addMeasurement({value[1],value[2],value[3],value[4],value[5]}) end --メモリのお掃除 collectgarbage() --3秒待つ sleep(3*1000) end
コメントをかく