2016.11.2更新
サンプルプログラム:bluez_ismの地磁気、加速度の計算方法に誤りがありましたので、
計算方法を修正したbluez_ism_20161102.tar.gzに更新しました。
Armadillo-IoT+BLE無線USBドングル
と アルプス電気株式会社様のセンサネットワークモジュール(IoT Smart Module)(2個)
を使って、 Armadillo-IoTからBLEで、「2つの」センサネットワークモジュール(IoT Smart Module)の 温度、湿度、気圧、照度等のデータを読み取って、クラウド(Heroku)経由で見てみました。
(ブラウザのURLの部分は、後述の手順でHerokuから割り当てられたURLになりますので、伏字(***.herokuapp.com)にしてます。)
参考)本内容に関連するBLE通信のセンサー(IoT Smart Module)を使った動作手順に下記のブログもあります。
・Armadillo-IoT+RN4020アドオンモジュール:BLE通信のセンサー(IoT Smart Module)の温度、湿度、気圧、照度等を取得
・Armadillo-IoT+RN4020アドオンモジュール:BLE通信のセンサー(IoT Smart Module)の温度、湿度、気圧、照度等を取得して、Herokuに送信してWebブラウザで確認
当方で確認した手順を下記に説明します。
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
注意)
ここでは、当方が確認した簡易的な手順を示しているに過ぎません。(エラー処理等は考慮されていません。)
本格的には、RN4020、IoT Smart Moduleとの対話的な通信により、設定、エラー処理、フェイルセーフなどを行う必要があります。
備考)
本説明内にて、IoT Smart ModuleのMACアドレスは、今回確認したIoT Smart ModuleのMACアドレスではなく、ダミーのMACアドレス(01:23:45:67:89:ABまたは FE:DC:BA:98:76:54)に置き換えて記述しています。
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
以下、 センサネットワークモジュール(IoT Smart Module)を「IoTスマートモジュール」 と呼称します。
今回の動作確認は下図のような構成です。
手順の概要は下記のようになります。
1.機材、資料
2.IoTスマートモジュールからのデータ受信方法の検討
3.Armadillo-IoTからBLE無線USBドングルで通信するための準備
4.IoTスマートモジュールの設定
5.IoTスマートモジュールのセンサーデータの取得
6.クラウド(Heroku)側のアプリの準備
7.IoTスマートモジュールのデータをクラウド(Heroku)で見る
1.機材、資料
機材は下記のもの使用しました。
・Armadillo-IoT+BLE無線USBドングル(今回使用したのはPrinceton製)
・IoTスマートモジュール
今回の動作確認において、下記の資料を参考にしました。
・IoT Smart Moduleコマンドガイド
2.IoTスマートモジュールからのデータ受信方法の検討
IoTスマートモジュールは、センサーデータの送信方法に
・Notificationで通知
・Beaconのアドバタイジングパケットで通知
が選択できます。
ここでは、Notificationで通知でセンサーデータを取得しました。
3.Armadillo-IoTからBLE無線USBドングルで通信するための準備
・Armadillo-IoTで最新のbluezを使ってみる
の一連の手順を
10.1 USBドングルを認識しているか確認します
まで実施して、bluez、gatttoolを追加したイメージをArmadillo-IoTに書き込んで、
BLE無線USBドングルを認識していることを確認します。
4.IoTスマートモジュールの設定
・Armadillo-IoTで最新のbluezを使ってみるの
10.2 USBドングルを有効にします
10.3 BLEデバイスを検索します
10.4 BLEデバイスにコマンドを送信して、ベルを鳴らしたりLED点灯させます
を参考に、gatttoolを使って、IoTスマートモジュールと通信を行います。
IoT Smart Moduleコマンドガイド
1.2 Bluetooth Smartサービス
Appendix1 Service Database
0x0013:センサーデータの通知のNotification設定用のハンドル
0x0016:コマンド応答、接続パラメータ更新通知のNotification設定用のハンドル
0x0018:コマンド制御用のハンドル
および
2.2 コマンドによる設定例
2.2.4 Case3:モーション(動き)100ms/環境1分間隔(Hybridモード)
を参考に、この手順で使用するコマンドを整理すると下記のようになります。
(IoTスマートモジュールのMACアドレスは既知で、変数:BLE_IDに代入することを想定しています。)
// USBドングルを有効にします hciconfig hci0 up // 直前の状態にかかわらず、IoTスマートモジュールを計測停止するコマンドを発行します。 gatttool -i hci0 -b $BLE_ID --char-write-req -a 0x0018 -n 200300 gatttool -i hci0 -b $BLE_ID --char-write-req -a 0x0018 -n 230301 // センサーデータ、コマンド応答、接続パラメータ更新通知のNotificationのハンドルを有効にします。 gatttool -i hci0 -b $BLE_ID --char-write-req -a 0x0013 -n 0100 gatttool -i hci0 -b $BLE_ID --char-write-req -a 0x0016 -n 0100 // Case3:モーション(動き)100ms/環境10秒間隔(Hybridモード)を設定します。 gatttool -i hci0 -b $BLE_ID --char-write-req -a 0x0018 -n 2F0303 gatttool -i hci0 -b $BLE_ID --char-write-req -a 0x0018 -n 040304 gatttool -i hci0 -b $BLE_ID --char-write-req -a 0x0018 -n 06046400 gatttool -i hci0 -b $BLE_ID --char-write-req -a 0x0018 -n 05040a00 // 計測とセンサーデータ送信を開始します。 gatttool -i hci0 -b $BLE_ID --char-write-req -a 0x0018 -n 200301 gatttool -i hci0 -b $BLE_ID --char-write-req -a 0x0018 -n 230300
上記のサンプルスクリプト
set_bluez_iotsmart.sh
を添付します。
補足)上記の
// Case3:モーション(動き)100ms/環境10秒間隔(Hybridモード)を設定します。
にて、接続パラメータ更新に数秒かかる箇所で10秒のウェイトをしています。
Armadillo-IoTに置いて、実行権限をつけます。
[armadillo ~]# ls /root set_bluez_iotsmart.sh [armadillo ~]# chmod +x set_bluez_iotsmart.sh
set_bluez_iotsmart.shは、下記のように使用します。
set_bluez_iotsmart.sh <id> 引数 id:IoTスマートモジュールのMACアドレス
IoTスマートモジュールの電源をONにして、上記のコマンドを実行します。
下記例は、IoTスマートモジュールのMACアドレスが、"01:23:45:67:89:AB"の場合です。
[root@armadillo-iotg (ttymxc1) ~]# ./set_bluez_iotsmart.sh 01:23:45:67:89:AB ************************************************ **** [01:23:45:67:89:AB] Prepare for IoT Smart Setting **** Characteristic value was written successfully Characteristic value was written successfully **** [01:23:45:67:89:AB] Set notification of IoT Smart **** Characteristic value was written successfully Characteristic value was written successfully **** [01:23:45:67:89:AB] Start IoT Smart Sample Measure Setting **** Characteristic value was written successfully Characteristic value was written successfully **** [01:23:45:67:89:AB] Wait 10 seconds: Setting IoT Smart Measure Mode **** Characteristic value was written successfully **** [01:23:45:67:89:AB] Wait 10 seconds: Setting IoT Smart fast Interval **** Characteristic value was written successfully **** [01:23:45:67:89:AB] Wait 10 seconds: Setting IoT Smart Slow Interval **** Characteristic value was written successfully Characteristic value was written successfully **** [01:23:45:67:89:AB] Finish IoT Smart Sample Measure Setting ****
上記のようなログになれば設定が成功しています。
5.IoTスマートモジュールのセンサーデータの取得
gatttoolを使って、IoTスマートモジュールのセンサーデータを取得します。
(センサーデータ通知用のハンドルのNotificationを有効にして、listenします。)
[root@armadillo-iotg (ttymxc1) ~]# gatttool -i hci0 -b 01:23:45:67:89:AB --char-write-req -a 0x0013 -n 0100 --listen Notification handle = 0x0012 value: f2 14 5e 00 18 00 41 01 84 00 1e 00 41 ef 58 02 2f 0c 00 69 Notification handle = 0x0012 value: f2 14 61 00 20 00 41 01 7b 00 2a 00 47 ef bc 02 2f 0c 00 6a Notification handle = 0x0012 value: f2 14 61 00 1b 00 44 01 7e 00 18 00 56 ef 20 03 2f 0c 00 6b . . Notification handle = 0x0012 value: f2 14 a4 00 07 00 b9 fa 90 00 15 00 2c ef f4 01 01 13 00 a6 Notification handle = 0x0012 value: f3 14 e7 e5 b7 0a 0b 0c 00 00 00 00 00 00 00 00 01 0a 0f a6 . . (のように、上記手順4の設定により、モーション(動き)100ms/環境10秒間隔で、センサーデータが表示される。) (Ctrl+Cで終了。)
IoT Smart Moduleコマンドガイドより、
5.通知データ構造
5.1 データパケット1
5.2 データパケット2
と照らし合わせると、値(value)が、
f2で始まっているのが、モーションセンサーのデータ(地磁気、加速度、タイムスタンプ)
f3で始まっているのが、環境系センサーのデータ(気圧、湿度、温度、紫外線量、照度、日付)
であることから、上記のログでは、
Notification handle = 0x0012 value: f2 14 a4 00 07 00 b9 fa 90 00 15 00 2c ef f4 01 01 13 00 a6
が、モーションセンサーのデータ(地磁気、加速度、タイムスタンプ)
Notification handle = 0x0012 value: f3 14 e7 e5 b7 0a 0b 0c 00 00 00 00 00 00 00 00 01 0a 0f a6
が、環境系センサーのデータ(気圧、湿度、温度、紫外線量、照度、日付)となります。
上記の例を
IoT Smart Moduleコマンドガイドより、
5.通知データ構造
5.1 データパケット1
5.2 データパケット2
と照らし合わせると、
Notification handle = 0x0012 value: f2 14 a4 00 07 00 b9 fa 90 00 15 00 2c ef f4 01 01 13 00 a6
f2:イベントコード 14:長さ a4 00:地磁気X(LSB、MSBの順) 07 00:地磁気Y(LSB、MSBの順) b9 fa:地磁気Z(LSB、MSBの順) 90 00:加速度X(LSB、MSBの順) 15 00:加速度Y(LSB、MSBの順) 2c ef:加速度Z(LSB、MSBの順) f4 01:タイムスタンプ(ms)(LSB、MSBの順) 01:タイムスタンプ(s) 13:タイムスタンプ(m) 00:タイムスタンプ(h) a6:インデックス
Notification handle = 0x0012 value: f3 14 e7 e5 b7 0a 0b 0c 00 00 00 00 00 00 00 00 01 0a 0f a6
f3:イベントコード 14:長さ e7 e5:気圧(LSB、MSBの順) b7 0a:湿度(LSB、MSBの順) 0b 0c:温度(LSB、MSBの順) 00 00:紫外線量(LSB、MSBの順) 00 00:照度(LSB、MSBの順) 00000000:予約 01:日付(日) 0A:日付(月) 0F:日付(年) 01:インデックス
となります。
最終的には、上記の値を
IoT Smart Moduleコマンドガイドより、
5.通知データ構造
5.1 データパケット1
5.2 データパケット2
の計算式に入れて計算する必要があります。
そこで、gatttoolを使って、IoTスマートモジュールのセンサーデータを取得するコマンド (センサーデータ通知用のハンドルのNotificationを有効にして、listenするコマンド)
gatttool -i hci0 -b 01:23:45:67:89:AB --char-write-req -a 0x0013 -n 0100 --listen
の出力から、センサーデータを抽出し計算するサンプルプログラムを作成しました。 bluez_ism_20161102.tar.gz
<サンプルプログラムの用法>
添付のサンプルプログラムをATDE上に解凍して、bluez_ism_20161102ディレクトリ内でmakeすると、bluez_ismという実行ファイルができます。
bluez_ism <id> 引数 id:BLEのMACアドレス(ファイル名の識別子に使用)
この実行ファイルをArmadillo-IoTに置いて、手順4を実行後、上記gatttoolコマンドとパイプで連結して実行します。 IoTスマートモジュールがMACアドレス"01:23:45:67:89:AB"のセンサーデータを取得する例です。
gatttool -i hci0 -b 01:23:45:67:89:AB --char-write-req -a 0x0013 -n 0100 --listen | /root/bluez_ism 01:23:45:67:89:AB
[root@armadillo-iotg (ttymxc1) ~]# ./set_bluez_iotsmart.sh 01:23:45:67:89:AB ************************************************ **** [01:23:45:67:89:AB] Prepare for IoT Smart Setting **** Characteristic value was written successfully Characteristic value was written successfully **** [01:23:45:67:89:AB] Set notification of IoT Smart **** Characteristic value was written successfully Characteristic value was written successfully **** [01:23:45:67:89:AB] Start IoT Smart Sample Measure Setting **** Characteristic value was written successfully Characteristic value was written successfully **** [01:23:45:67:89:AB] Wait 10 seconds: Setting IoT Smart Measure Mode **** Characteristic value was written successfully **** [01:23:45:67:89:AB] Wait 10 seconds: Setting IoT Smart fast Interval **** Characteristic value was written successfully **** [01:23:45:67:89:AB] Wait 10 seconds: Setting IoT Smart Slow Interval **** Characteristic value was written successfully Characteristic value was written successfully **** [01:23:45:67:89:AB] Finish IoT Smart Sample Measure Setting **** [root@armadillo-iotg (ttymxc1) ~]# gatttool -i hci0 -b 01:23:45:67:89:AB --char-write-req -a 0x0013 -n 0100 --listen | /root/bluez_ism 01:23:45:67:89:AB **************************************************** ---------[01:23:45:67:89:AB] sensor data(env) -------- Notification handle = 0x0012 value: f3 14 b4 e5 c8 0a 0e 0c 01 00 02 00 00 00 00 00 01 0a 0f 0c Pressure[hPa]: 1021.67 Humidity[%RH]: 29.12 Temparature[degC]: 19.80 UV[mW/cm^2]: 0.03 Ambient[Lx]: 50.09 Date: 15.10.1 ---------[01:23:45:67:89:AB] sensor data(motion) -------- Magnetic[uT]: (x, y, z) = (17.70, 12.15, 45.15) Acceleration[G]: (x, y, z) = (0.03, 0.01, 14.95) Time Stamp: 0:59:10 (300[ms]) **************************************************** ---------[01:23:45:67:89:AB] sensor data(env) -------- Notification handle = 0x0012 value: f3 14 b7 e5 c6 0a 10 0c 00 00 01 00 00 00 00 00 01 0a 0f 70 Pressure[hPa]: 1021.71 Humidity[%RH]: 29.09 Temparature[degC]: 19.84 UV[mW/cm^2]: 0.00 Ambient[Lx]: 25.28 Date: 15.10.1 ---------[01:23:45:67:89:AB] sensor data(motion) -------- Magnetic[uT]: (x, y, z) = (17.70, 12.15, 44.85) Acceleration[G]: (x, y, z) = (0.03, 0.00, 14.95) Time Stamp: 0:59:20 (300[ms]) . . . (10秒ごとにセンサーデータのログを表示。)
正常動作時は、10秒ごとに log_ism_env_01-23-45-67-89-AB.txtファイルに、 気圧[hPa](pres)、湿度[%RH](hum)、温度[degC](tmp)、紫外線量[mW/cm^2](uvi)、照度[Lx](lux)、日付が、
pres=1012.41&hum=25.47&tmp=23.80&uvi=0.00&lux=25.28&date=15.10.1
log_ism_motion_01-23-45-67-89-AB.txtファイルに 10秒分のタイムスタンプ、地磁気(X,Y,Z)[uT](mag)、加速度(X,Y,Z)[G](acc)が、
time=0:4:6(300[ms])&mag=(13.65, 9822.60, 46.05)&acc=(0.03, 0.01, 14.95) time=0:4:6(400[ms])&mag=(13.35, 9820.80, 46.35)&acc=(0.03, 0.01, 14.96) . . . time=0:4:16(100[ms])&mag=(13.80, 9820.80, 45.90)&acc=(0.03, 0.01, 14.96) time=0:4:16(200[ms])&mag=(13.95, 9820.65, 46.05)&acc=(0.03, 0.00, 14.96)
のように出力されます。
<サンプルプログラムの補足>
bluez_ism.c
/**** sample: RN4020/IoT Smart response: begin ****/ // gatttoolのセンサーデータのNortification判別用の文字列 static unsigned char res_notify[] = "Notification handle = 0x0012"; /* iot smart response: notify from custom1*/ /**** sample: RN4020/IoT Smart response: begin ****/ /**** sample: IoT Smart motion data: begin ****/ // モーションセンサーのデータ(タイムスタンプ、地磁気、加速度)用の構造体 /**** sample: IoT Smart motion data: end ****/ /**** sample: char(HEX) to int: begin ****/ // テキストの16進数を10進数に変える関数 /**** sample: char(HEX) to int: end ****/ /**** sample: variable: begin ****/ // ログファイル名 char env_file[100]; char motion_file[100]; /**** sample: variable: end ****/ /**** sample: variable for senseor data: begin ****/ // 変数定義:気圧、湿度、温度、紫外線量、照度、地磁気、加速度、日付、タイムスタンプ /**** sample: for senseor data: end ****/
/**** sample: Analize BLE Notification : begin ****/ // IoTスマートモジュールのセンサーデータの取得 /**** sample: analize sensor data(motion): begin ****/ // モーションセンサーのデータ(地磁気、加速度、タイムスタンプ)の取得。詳細は後述。 /**** sample: analize sensor data(motion): end ****/ /**** sample: sensor data(motion) to buffer: begin ****/ // モーションセンサーのデータ(地磁気、加速度、タイムスタンプ)を配列に格納。 // 100msごとに取得して、10秒ごとに100回分をファイルに書き込む。 /**** sample: sensor data(motion) to buffer: end ****/ /**** sample: analize sensor data(env): begin ****/ // 環境系センサーのデータ(気圧、湿度、温度、紫外線量、照度、日付)の取得。詳細は後述。 /**** sample: analize sensor data(env): end ****/ /**** output sensor data(env) to stdout: begin ****/ // 環境系センサーのデータ(気圧、湿度、温度、紫外線量、照度、日付)を標準出力。 /**** output sensor data(env) to stdout: end ****/ /**** sample: sensor data(env) to log file for post to heroku: begin ****/ // 環境系センサーのデータ(気圧、湿度、温度、紫外線量、照度、日付)をファイルに出力。 /**** sample: sensor data(env) to log file for post to heroku: end ****/ /**** sample: output latest sensor data(motion) to stdout: begin ****/ // モーションセンサーのデータ(地磁気、加速度、タイムスタンプ)を標準出力。 /**** sample: output latest sensor data(motion) to stdout: end ****/ /**** sample: sensor data(motion) to log file: begin ****/ // モーションセンサーのデータ(地磁気、加速度、タイムスタンプ)をファイルに出力。 /**** sample: sensor data(motion) to log file: end ****/ /**** sample: Analize BLE Notification : end ****/
補足)上記の
/**** sample: analize sensor data(motion): begin ****/
/**** sample: analize sensor data(motion): end ****/
/**** sample: analize sensor data(env): begin ****/
/**** sample: analize sensor data(env): end ****/
にて行われている、
モーションセンサーのデータ(地磁気、加速度、タイムスタンプ)
環境系センサーのデータ(気圧、湿度、温度、紫外線量、照度、日付)
は、
IoT Smart Moduleコマンドガイドより、
5.通知データ構造
5.1 データパケット1
5.2 データパケット2
に基づいて、Notificationのデータから抽出し、計算を行っています。
モーションセンサーのデータ(地磁気、加速度、タイムスタンプ)が、IoTスマートモジュールからのNorfificationのログ
例)
Notification handle = 0x0012 value: f2 14 a4 00 07 00 b9 fa 90 00 15 00 2c ef f4 01 01 13 00 a6
の何バイト目にあるかは下記のとおりです。(MSB、LSBの順に並び替え済みです。)
###################################################### Notification: 0-11 : 12 handle: 13-18 : 19 = : 20 : 21 0x0012: 22-27 : 28 value:: 29-34 : 35 EventCode: 36,37 Length: 39,40 MagneticX: 45,46,42,43 MagneticY: 51,52,48,49 MagneticZ: 57,58,54,55 AccelerationX: 63,64,60,61 AccelerationY: 69,70,66,67 AccelerationZ: 75,76,72,73 TimeStampMs: 81,82,78,79 TimeStampS: 84,85 TimeStampM: 87,88 TimeStmapH: 90,91 DataIndex: 93,94
環境系センサーのデータ(気圧、湿度、温度、紫外線量、照度、日付)が、IoTスマートモジュールからのNorfificationのログ
例)
Notification handle = 0x0012 value: f3 14 e7 e5 b7 0a 0b 0c 00 00 00 00 00 00 00 00 01 0a 0f a6
の何バイト目にあるかは下記のとおりです。(MSB、LSBの順に並び替え済みです。)
###################################################### Notification: 0-11 : 12 handle: 13-18 : 19 = : 20 : 21 0x0012: 22-27 : 28 value:: 29-34 : 35 EventCode: 36,37 Length: 39,40 Pressure: 45,46,42,43 Humidity: 51,52,48,49 Temparature: 57,58,54,55 UV: 63,64,60,61 AmbientLight: 69,70,66,67 Reserve: 75,76,72,73 Reserve: 81,82,78,79 DataStampDay: 84,85 DataStampMonth: 87,88 DataStampYear: 90,91 DataIndex: 93,94
上記の方法で各センサーデータを抽出した後、
IoT Smart Moduleコマンドガイドより、
5.通知データ構造
5.1 データパケット1
5.2 データパケット2
の計算方法で計算しています。
6.クラウド(Heroku)側のアプリの準備
6.1.準備
まず、Armadillo-IoT + Heroku(Node.js)でHello World のとおり、Armadillo側からのデータ送信と動作確認まで行ってください。
以下、この手順を実行したことをベースに説明します。
よって以下では、ATDE5の
~/temp/myapp
がクラウド(Heroku)側のアプリ用のディレクトリとします。
6.2.サンプル
クラウド(Heroku)側のアプリのサンプルソースを添付します。
myapp_iotsmart_20160221.tar.gz
を解凍して、myapp_iotsmart_20160221ディレクトリの中身を
~/temp/myapp
ディレクトリの下にコピーしてください。
<サンプルソースの説明>
今回のサンプル特有の部分のみ説明します。
app.js
・HerokuのURL(***.herokuapp.com)にアクセスした際、index.ejsを表示するようにします。
表示の際、index.ejsにid、気圧、湿度、温度、紫外線量、照度、日付、地磁気、加速度、タイムスタンプを与えています。
app.get('/', function(req, res){ res.render('index', {id: id, pres: pres, hum: hum, tmp: tmp, uvi: uvi, lux: lux, mag: mag, acc: acc, date: date, time: time, id2: id2, pres2: pres2, hum2: hum2, tmp2: tmp2, uvi2: uvi2, lux2: lux2, mag2: mag2, acc2: acc2, date2: date2, time2: time2}); });
備考)手順7で2つのIoTスマートモジュールからセンサーデータを取得するため、 末尾に'2'がついている変数は、2つの目のIoTスマートモジュール用の変数です。
・HerokuのURL(***.herokuapp.com/series)にポストされたデータ(※)をパースして、上記のindex.ejsに渡す変数に代入しています。
※)上記サンプルアプリ(bluez_ism)を実行時のログファイル
log_ism_env_[MACアドレス].txt
log_ism_motion_[MACアドレス].txt
とMACアドレスの内容をスクリプトで合成して、生成される
id=01:23:45:67:89:AB&pres=1012.41&hum=25.47&tmp=23.80&uvi=0.00&lux=25.28&date=15.10.1&time=0:4:16(200[ms])&mag=(13.95, 9820.65, 46.05)&acc=(0.03, 0.00, 14.96)
という形式のデータです。"&"で温度、湿度等の各データを区切っています。
app.post('/series', function(req, res) { console.log('post:/series'); id = req.body.id; // 識別子 pres = req.body.pres; // 気圧 hum = req.body.hum; // 湿度 tmp = req.body.tmp; // 温度 uvi = req.body.uvi; // 紫外線量 lux = req.body.lux; // 照度 date = req.body.date; // 日付 mag = req.body.mag; // 地磁気 acc = req.body.acc; // 加速度 time = req.body.time; // タイムスタンプ id2 = req.body.id2; // 識別子(2つ目のIoTスマートモジュール用) pres2 = req.body.pres2; // 気圧(2つ目のIoTスマートモジュール用) hum2 = req.body.hum2; // 湿度(2つ目のIoTスマートモジュール用) tmp2 = req.body.tmp2; // 温度(2つ目のIoTスマートモジュール用) uvi2 = req.body.uvi2; // 紫外線量(2つ目のIoTスマートモジュール用) lux2 = req.body.lux2; // 照度(2つ目のIoTスマートモジュール用) date2 = req.body.date2; // 日付(2つ目のIoTスマートモジュール用) mag2 = req.body.mag2; // 地磁気(2つ目のIoTスマートモジュール用) acc2 = req.body.acc2; // 加速度(2つ目のIoTスマートモジュール用) time2 = req.body.time2; // タイムスタンプ(2つ目のIoTスマートモジュール用) res.send("Received\n"); });
view/index.ejs
・上記app.get('/', function(req, res)により、受け取ったIoTスマートモジュールのセンサーデータを表示するhtmlです。
6.3.サンプルの実行
下記のコマンドで、クラウド(Heroku)にアップロードします。
[atde ~/temp/myapp]$ git add --all [atde ~/temp/myapp]$ git commit -m "iotsmart" [atde ~/temp/myapp]$ git push heroku master:master
6.4.アプリの動作確認
Webブラウザで https://***.herokuapp.com (***.herokuapp.comの部分は、手順6.1で確認したHerokuのURL) を実行すると、冒頭のWebブラウザの写真のように表示されます。 (ここまでの手順では、データを受信してないので、各値はオール0になります。)
7.IoTスマートモジュールのデータをクラウド(Heroku)で見る
Armadillo-IoTから「2つの」IoTスマートモジュールのセンサーデータをクラウドに送信するスクリプト
w_send_bluez_iotsmart.sh
を添付します。
補足)手順5の
gatttool -i hci0 -b 01:23:45:67:89:AB --char-write-req -a 0x0013 -n 0100 --listen | /root/bluez_ism 01:23:45:67:89:AB
のコマンドをMACアドレス別に
gatttool -i hci0 -b 01:23:45:67:89:AB --char-write-req -a 0x0013 -n 0100 --listen | /root/bluez_ism 01:23:45:67:89:AB & gatttool -i hci0 -b FE:DC:BA:98:76:54 --char-write-req -a 0x0013 -n 0100 --listen | /root/bluez_ism FE:DC:BA:98:76:54 &
のようにバックグラウンドで実行することによって、「2つの」IoTスマートモジュールのセンサーデータを取得しています。
このスクリプトをArmadillo-IoTの/rootディレクトリに置いて、実行権限をつけてください。 設定用のスクリプトset_bluez_iotsmart.sh、サンプルプログラムbluez_ismも Armadillo-IoTの/rootディレクトリに置いて実行します。
[armadillo ~]# chmod +x w_send_bluez_iotsmart.sh [armadillo ~]# ls /root bluez_ism serial_rn4020_ism_case3 set_bluez_iotsmart.sh w_send_bluez_iotsmart.sh w_send_bluez_iotsmart.shは、下記のように使用します。 w_send_bluez_iotsmart.sh <id> <id2> <HerokuのURL> 引数 id:IoTスマートモジュールのMACアドレス(1つ目) id2:IoTスマートモジュールのMACアドレス(2つ目) HerokuのURL:手順6.1で確認したHerokuのURL
例)
IoTスマートモジュールのMACアドレスが"01:23:45:67:89:AB"
IoTスマートモジュールのMACアドレスが"FE:DC:BA:98:76:54"
で、HerokuのURLが***.herokuapp.comの場合、下記のように実行します。
[armadillo ~]# ./w_send_bluez_iotsmart.sh 01:23:45:67:89:AB FE:DC:BA:98:76:54 https://***.herokuapp.com/series
上記のスクリプトを実行すると、Armadillo-IoTは2つのIoTスマートモジュールの ID(MACアドレス)、気圧、湿度、温度、紫外線量、照度、日付、地磁気、加速度、タイムスタンプのデータを
log_ism_env_[MACアドレス(1つ目)].txt
log_ism_motion_[MACアドレス(1つ目)].txt
log_ism_env_[MACアドレス(2つ目)].txt
log_ism_motion_[MACアドレス(2つ目)].txt
から読みだして、クラウド(Herokuのhttps://***.herokuapp.com/series)に送信します。
補足)モーションセンサー(地磁気、加速度、タイムスタンプは、log_ism_motion_[MACアドレス].txtの末尾(最新)のデータのみを送信しています。
Webブラウザで、https://***.herokuapp.comにアクセスすると、Armadillo-IoTが送信したIoTスマートモジュールのデータが冒頭のWebブラウザの写真のように見ることができます。
補足)
Webブラウザの表示の更新には再読み込みが必要です。
今回の設定の場合は、IoTスマートモジュールの環境系センサーの通信間隔(10秒)に合わせてデータが更新されるので、Webブラウザの表示の更新間隔は10-20秒程度になります。
クラウド(Heroku)側のアプリがデータを受信した場合は、"Received"という文字をArmadillo-IoTに送信するので、
クラウド(Heroku)側が受け取ったかどうかを、Armadillo-IoTの標準出力で確認することができます。