FlashAir IoT HubにArduinoからアップロードする極めて簡単なスクリプトです.
簡単さ,理解しやすさを主眼においてスクリプトを構成しました.
一応,安定性も加味してあります.
これらのスクリプト・スケッチを書き込むだけで,Arduinoのアナログ入力電圧を
FlashAir IoT Hubに簡単にアップロードすることができます.
温度センサーや,明るさセンサー,音量センサーなど,お好きなセンサーを繋いでも良いですし,
スケッチを改造して,各種I2Cなどのセンサー値を送るようにしても便利です
cdsセンサー(明るさセンサ)を接続した例
簡単さ,理解しやすさを主眼においてスクリプトを構成しました.
一応,安定性も加味してあります.
これらのスクリプト・スケッチを書き込むだけで,Arduinoのアナログ入力電圧を
FlashAir IoT Hubに簡単にアップロードすることができます.
温度センサーや,明るさセンサー,音量センサーなど,お好きなセンサーを繋いでも良いですし,
スケッチを改造して,各種I2Cなどのセンサー値を送るようにしても便利です
cdsセンサー(明るさセンサ)を接続した例
ArduinoにFlashAirを差し込んだシールドを装着し,以下のスケッチを書き込んでください.
このスケッチは,AnalogReadで読み込んだピンの電圧をFlashAirに書き込んでいます.
他の値を書き込みたい場合は,writeFlashAirに渡す値を変更するのが一番簡単です.
このスケッチでは,Seeed Studio製のSDカードシールドを前提としています.
以下の画像をクリックすることでスイッチサイエンス社の購入ページに飛ぶことができます.

引用元: スイッチサイエンス https://www.switch-science.com/catalog/1292/
他のSDカードシールドを用いている場合はそれに合わせてSD.begin(4)の値を変更してください.
IoTHub.ino
このファイルはお好みに合わせて変更してください.とりあえず試すにはまずコピペしてください
このスケッチは,AnalogReadで読み込んだピンの電圧をFlashAirに書き込んでいます.
他の値を書き込みたい場合は,writeFlashAirに渡す値を変更するのが一番簡単です.
このスケッチでは,Seeed Studio製のSDカードシールドを前提としています.
以下の画像をクリックすることでスイッチサイエンス社の購入ページに飛ぶことができます.

引用元: スイッチサイエンス 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を設定してください.
設定の際,次のようにしてください.(書込時実行の欄を必ず空欄にしてください)

3. 次に,以下のスクリプトを「bootscript.lua」として,FlashAirに保存してください
4. 最後に,FlashAirにIoT Hubのアクセストークン(credentials.json)を書き込んでください.
5. 終わったら,SDカードシールドにFlashAirを差し込み,Arduino側の準備をしてください
FlashAir IoT Hub公式のスクリプトは内蔵してあるため不要です.
bootscript.lua
このファイルは編集する必要はありません.コピペしてください
2. 次に,Tool:FIH_Setupなどを用いて,FlashAirを設定してください.
設定の際,次のようにしてください.(書込時実行の欄を必ず空欄にしてください)

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

コメントをかく