東芝から発売されているFlashAirを用いた開発を行う人々向けのまとめwikiです。※本wikiは東芝及びフィックスターズ、キオクシアとは何の関係もありません。お問合わせは管理者へお願いします。

すでに閉鎖されたサービスです

参考資料としてそのままにしています。

概要

FlashAir IoT HubにArduinoからアップロードする極めて簡単なスクリプトです.
簡単さ,理解しやすさを主眼においてスクリプトを構成しました.
一応,安定性も加味してあります.

これらのスクリプト・スケッチを書き込むだけで,Arduinoのアナログ入力電圧を
FlashAir IoT Hubに簡単にアップロードすることができます.

温度センサーや,明るさセンサー,音量センサーなど,お好きなセンサーを繋いでも良いですし,
スケッチを改造して,各種I2Cなどのセンサー値を送るようにしても便利です

cdsセンサー(明るさセンサ)を接続した例

ライセンス

WTFPL
(一切の許諾なしで利用・改変・複製可能)

更新履歴

  • 2017/05/15 公開
  • 2017/05/16 まれに0が送信される不具合を修正
      設定ツールを使用した際の不具合の回避について記載

簡単!FlashAir IoT Hubアップロードこれ一つパック

設定ツールと,説明書,スクリプトを一つにしたパックを作成しました.
手っ取り早く試したい方はこちらをどうぞ
ダウンロード

Arduinoスケッチ

ArduinoにFlashAirを差し込んだシールドを装着し,以下のスケッチを書き込んでください.
このスケッチは,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
このファイルは編集する必要はありません.コピペしてください
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

トラブルシューティング

うまくFlashAir IoT Hubに反映されない時にチェックすること
  • Wi-FiのSSIDやPASSは合っていますか?
  • Wi-Fi接続は行われていますか?(ルータのモニタ機能等でチェックください)
  • credentials.jsonは入っていますか?

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu

スマートフォンの方は画面下部よりPC版に切り替えることをおすすめします

アクセス解析中

忍者アナライズ

GoogleAnalytics

編集にはIDが必要です