このエントリーをはてなブックマークに追加

Armadillo-IoT(G3L)(WLAN+BTコンボモジュール搭載品):でBLE無線のセンサー(IoT Smart Module)の温度、湿度、気圧、照度等のデータをクラウド(Heroku)経由で見る

Armadillo-IoT(G3L)(WLAN+BTコンボモジュール搭載品)

を使って、 アルプス電気株式会社様のセンサネットワークモジュール(IoT Smart Module)(10個)

の温度、湿度、気圧、照度等を読み取って、クラウド(Heroku)経由で見てみました。

(ブラウザのURLの部分は、後述の手順でHerokuから割り当てられたURLになりますので、伏字(***.herokuapp.com)にしてます。  画面の表内のIDの列は、下記手順の方法ではセンサーのMACアドレスが表示されますが、上図ではダミーに置き換えています。) 参考) 「Armadillo-IoT(G3): WLAN+BTコンボモジュールでBLE無線のセンサー(IoT Smart Module)の温度、湿度、気圧、照度等のデータをクラウド(Heroku)経由で見る」との手順の違いは、センサネットワークモジュール(IoT Smart Module)が5個→10個に変わった部分のみです。 当方で確認した手順、サンプルプログラムを下記に説明します。 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ 注意) ・ここでは、当方が確認した簡易的な手順を示しているに過ぎません。(エラー処理等は考慮されていません。)  本格的には、IoT Smart Moduleとの対話的な通信により、設定、エラー処理、フェイルセーフなどを行う必要があります。 備考) ・本説明内にて、IoT Smart ModuleのMACアドレスは、今回確認したIoT Smart ModuleのMACアドレスではなく、  ダミーのMACアドレス(01:23:45:67:89:AB等)に置き換えて記述しています。 ・今回の手順では時刻設定を省略しているため、タイムスタンプが初期状態(15.10.01)となっております。 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ 今回の動作確認は下図のような構成です。

手順の概要は下記のようになります。 ●1.機材、資料 ●2.IoTスマートモジュールからのデータ受信方法の検討 ●3.IoTスマートモジュールの設定 ●4.IoTスマートモジュールからのセンサーデータの確認 ●5.IoTスマートモジュールからのセンサーデータを取得するサンプルプログラム ●6.クラウド(Heroku)側のアプリの準備 ●7.IoTスマートモジュールのデータをクラウド(Heroku)で見る 以下、 センサネットワークモジュール(IoT Smart Module)を「IoTスマートモジュール」 と呼称します。

●1.機材、資料

機材は下記のものを使用しました。 ・Armadillo-IoT(G3L)(WLAN+BTコンボモジュール搭載品)

IoTスマートモジュール(10個)

今回の動作確認において、下記の資料を参考にしました。 ・IoT Smart Moduleコマンドガイド

2.IoTスマートモジュールからのデータ受信方法の検討

IoTスマートモジュールは、センサーデータの送信方法に ・Notificationで通知 ・Beaconのアドバタイジングパケットで通知 が選択できます。 ここでは、Notificationで通知でセンサーデータを取得しました。

3.IoTスマートモジュールの設定

Armadillo-IoT(G3L)の標準のルートファイルシステムアーカイブでは、 Armadillo-IoT ゲートウェイ G3L製品マニュアル 20.4. WL1837MODモジュールを使って2.4GHz帯で通信する使用例 のようにbluezのコマンドを使ってBluetooth通信が行えます。 以下、bluezのコマンドを使って、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に代入することを想定しています。)
// 直前の状態にかかわらず、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_ism.sh を添付します。 補足)上記の // Case3:モーション(動き)100ms/環境10秒間隔(Hybridモード)を設定します。 にて、接続パラメータ更新に数秒かかる箇所で10秒のウェイトをしています。 Armadillo-IoT(G3L)に置いて、実行権限をつけます。
root@armadillo:~# ls /root
set_bluez_ism.sh
root@armadillo:~# chmod +x set_bluez_ism.sh
set_bluez_ism.shは、下記のように使用します。
set_bluez_ism.sh <id>
引数
 id:IoTスマートモジュールのMACアドレス
IoTスマートモジュールの電源をONにして、上記のコマンドを実行します。 下記例は、IoTスマートモジュールのMACアドレスが、"01:23:45:67:89:AB"の場合です。
root@armadillo:~# ./set_bluez_ism.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 ****
上記のようなログになれば設定が成功しています。

4.IoTスマートモジュールからのセンサーデータの確認

gatttoolを使って、IoTスマートモジュールのセンサーデータを取得してみます。 (センサーデータ通知用のハンドルのNotificationを有効にして、listenします。)
root@armadillo:~# 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
.
.
(のように、上記手順3の設定により、モーション(動き)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 の計算式に入れて計算する必要があります。

5.IoTスマートモジュールからのセンサーデータを取得するサンプルプログラム

手順4のgatttoolを使って、IoTスマートモジュールのセンサーデータを取得するコマンド (センサーデータ通知用のハンドルのNotificationを有効にして、listenするコマンド)
gatttool -i hci0 -b 01:23:45:67:89:AB --char-write-req -a 0x0013 -n 0100 --listen
の出力から、センサーデータを抽出し計算するサンプルプログラムを作成しました。 src_bluez_ism_20161102.tar.gz まず、Armadillo-IoT(G3L)上で、サンプルプログラムをビルドするための準備を行います。 Armadillo-IoT ゲートウェイ G3L製品マニュアル 12.5. C言語による開発環境 より、Armadillo-IoT(G3L)をインターネットに接続できるネットワークに接続して、パッケージ情報の更新して、 build-essentialをインストールします。 (下記は、日付を2016.9.7、16:04に設定した場合)
root@armadillo:~# date 073116042017.00
root@armadillo:~# apt-get update
root@armadillo:~# apt-get upgrade
root@armadillo:~# apt-get install build-essential
<サンプルプログラムの用法> 添付のサンプルプログラムをArmadillo-IoT(G3L)上で解凍して、src_bluez_ism_20161102ディレクトリ内でmakeすると、 bluez_ismという実行ファイルができます。 (下記は、"src_bluez_ism_20161102.tar.gz"を/rootディレクトリに置いた場合です。  また、以降の手順において、実行ファイル"bluez_ism"を/rootディレクトリにコピーして使用することにしています。)
root@armadillo:~# ls src_bluez_ism_20161102.tar.gz
src_bluez_ism_20160914.tar.gz
root@armadillo:~# tar zxvf src_bluez_ism_20161102.tar.gz
root@armadillo:~# cd src_bluez_ism_20161102
root@armadillo:~/src_bluez_ism_20161102# make
root@armadillo:~/src_bluez_ism_20161102# cp bluez_ism /root/
root@armadillo:~/src_bluez_ism_20161102# cd
root@armadillo:~# ls bluez_ism
bluez_ism
bluez_ismは、下記のように使用します。
bluez_ism <id>
引数
 id:BLEのMACアドレス(ファイル名の識別子に使用)
手順4でIoTスマートモジュールを設定後、上記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
IoTスマートモジュールの設定と、センサーデータの取得の一連の流れのログは下記のようになります。 (IoTスマートモジュールのMACアドレス"01:23:45:67:89:AB"の場合)
root@armadillo:~# ./set_bluez_ism.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:~# 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)
のように出力されます。 備考) 複数のIoTスマートモジュールに接続する場合は、下記のように set_bluez_ism.shで、各IoTスマートモジュールの設定後、末尾に"&"を付けて、バックグラウンドで実行します。 (下記は、MACアドレスが"00:00:00:00:00:00"、"11:11:11:11:11:11"、"22:22:22:22:22:22"の  3つのIoTスマートモジュールからセンサーデータを取得する場合)
set_bluez_ism.sh 00:00:00:00:00:00
set_bluez_ism.sh 11:11:11:11:11:11
set_bluez_ism.sh 22:22:22:22:22:22
 
gatttool -i hci0 -b 00:00:00:00:00:00 --char-write-req -a 0x0013 -n 0100 --listen | /root/bluez_ism 00:00:00:00:00:00 &
gatttool -i hci0 -b 11:11:11:11:11:11 --char-write-req -a 0x0013 -n 0100 --listen | /root/bluez_ism 11:11:11:11:11:11 &
gatttool -i hci0 -b 22:22:22:22:22:22 --char-write-req -a 0x0013 -n 0100 --listen | /root/bluez_ism 22:22:22:22:22:22 &
<サンプルプログラムの補足> 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_ism_ble_20170801.tar.gz を解凍して、myapp_ism_ble_20170801ディレクトリの中身を ~/temp/myapp ディレクトリの下にコピーしてください。 <サンプルソースの説明> 今回のサンプル特有の部分のみ説明します。
app.js
・HerokuのURL(***.herokuapp.com)にアクセスした際、index.ejsを表示します。 ・HerokuのURL(***.herokuapp.com/series)にポストされたデータ(※)をパースして、index.ejsに渡す変数に代入しています。 ※)Armadillo-IoTから下記のようなデータを受信することを想定しています。  num0 // センサーの番号(ここでは、IoTスマートモジュールが10個なので、0-9までの番号)  name0 // センサーの名前(ここでは、"IoT Smart Module"という名前)  id0 // IoTスマートモジュールのMACアドレス  date0 // IoTスマートモジュールから取得した日付  press0 // IoTスマートモジュールから取得した気圧  hum0 // IoTスマートモジュールから取得した湿度  temp0 // IoTスマートモジュールから取得した温度  uv0 // IoTスマートモジュールから取得した紫外線量  amb0 // IoTスマートモジュールから取得した照度  time0 // IoTスマートモジュールから取得したタイムスタンプ  mag0 // IoTスマートモジュールから取得した地磁気  acc0 // IoTスマートモジュールから取得した加速度
app.post('/series', function(req, res) {
 console.log('post:/series');
 
 var obj_num = Number(req.body.num0);
 
 if(obj_num >=0 && obj_num < 10) {
  text_all = JSON.stringify(
   [
    {
     num0: req.body.num0,
     name0: req.body.name0,
     id0: req.body.id0,
     date0: req.body.date0,
     press0: req.body.press0,
     hum0: req.body.hum0,
     temp0: req.body.temp0,
     uv0: req.body.uv0,
     amb0: req.body.amb0,
     time0: req.body.time0,
     mag0: req.body.mag0,
     acc0: req.body.acc0,
    }
   ]
  );
 io.sockets.emit('returnData', text_all);
 }
 
 res.send("Received\n");
});
view/index.ejs
・Armadillo-IoTから受け取ったIoTスマートモジュールのセンサーデータを表示します。 ・Armadillo-IoTからデータを受信するごとに、表、グラフが更新されます。 ・表:最後に受信したデータを表示します。 ・グラフ:0番目のIoTスマートモジュールの照度の値(黄色の箇所)の遷移を表示します。 補足) InternetExplorerで閲覧する場合は、このソースコードでは正常に表、グラフの更新ができません。 chart.push(series); をコメントアウトすると、グラフの更新はできませんが、表の更新は行われます。 6.3.サンプルの実行 下記のコマンドで、クラウド(Heroku)にアップロードします。
[atde ~/temp/myapp]$ git add --all
[atde ~/temp/myapp]$ git commit -m "ism-ble"
[atde ~/temp/myapp]$ git push heroku master:master
6.4.アプリの動作確認 Webブラウザで https://***.herokuapp.com (***.herokuapp.comの部分は、手順6.1で確認したHerokuのURL) にアクセスすると、冒頭のWebブラウザの写真のうち、表の部分がデフォルト値"-"で埋められて表示されます。

●7.IoTスマートモジュールのデータをクラウド(Heroku)経由で見る

Armadillo-IoTからIoTスマートモジュールのデータをクラウドに送信するためのスクリプト start_bluez_ism.sh send_ism.sh start_all_ism_x10.sh を添付します。 これらのスクリプトを手順3の設定スクリプト"set_bluez_ism.sh"、手順5のサンプルプログラム"bluez_ism"と同じディレクトリに置いて、 実行権限をつけてください。 (下記は、/rootディレクトリに置いた場合)
root@armadillo:~# chmod +x start_bluez_ism.sh
root@armadillo:~# chmod +x send_ism.sh
root@armadillo:~# chmod +x start_all_ism_x10.sh
root@armadillo:~# ls /root
bluez_ism send_ism.sh set_bluez_ism.sh start_all_ism_x10.sh start_bluez_ism.sh
<サンプルスクリプトの用法> start_all_ism_x10.shが、10個のIoTスマートモジュールのセンサーデータを取得し、Heroku上のアプリに送信するスクリプトです。 (start_bluez_ism.sh、send_ism.shは、start_all_ism_x10.sh内で使用されているスクリプトです。下記補足参照。) まず、start_all_ism_x10.sh内で、IoTスマートモジュールのMACアドレスとHerokuのURLを設定します。
ISM0=**:**:**:**:**:**
ISM1=**:**:**:**:**:**
ISM2=**:**:**:**:**:**
ISM3=**:**:**:**:**:**
ISM4=**:**:**:**:**:**
ISM5=**:**:**:**:**:**
ISM6=**:**:**:**:**:**
ISM7=**:**:**:**:**:**
ISM8=**:**:**:**:**:**
ISM9=**:**:**:**:**:**
 
SEND_URL="https://***.herokuapp.com/series"
の箇所について、 "**:**:**:**:**:**"は、IoTスマートモジュールのMACアドレスに変更してください。 "***.herokuapp.com"の部分は、手順6.1のHerokuのURLに変更してください。 start_all_ism_x10.shは、引数なしで実行します。
root@armadillo:~# ./start_all_ism_x10.sh
実行すると、 10個のIoTスマートモジュールの設定後、 10個のIoTスマートモジュールと通信を開始し、 5秒毎に、センサーデータのログファイルの内容をHerokuに送信します。 start_all_ism_x10.shが実行されている状態で、 Webブラウザで、https://***.herokuapp.comにアクセスすると、 冒頭のWebブラウザの写真のように10個のIoTスマートモジュールのデータを見ることができます。 備考) ・サンプルスクリプトでは、10個のIoTスマートモジュールの設定の各所でウェイトを入れているため、  start_all_ism_x10.shの実行から、Heroku上にセンサーデータが反映が開始されるまでは、5分程度かかります。 ・Armadillo-IoT(G3L)は、10個のIoTスマートモジュールから随時センサーデータを受信し、ログファイルに出力していますが、  サンプルスクリプトでは、5秒に1つのIoTスマートモジュールのセンサーデータのみ、Heroku上のアプリに送信しています。  10個のIoTスマートモジュールのセンサーデータを順番に切り替えているので、同じIoTスマートモジュールについて、  Heroku上のセンサーデータの表示が更新されるのは、10個×5秒=50秒ごとになります。 <サンプルスクリプトの補足> start_bluez_ism.shは、手順5のIoTスマートモジュールとの通信と センサーデータを抽出するサンプルプログラム"bluez_ism"を実行するスクリプトです。 下記のように使用します。
start_bluez_ism.sh <id>
引数
 id:IoTスマートモジュールのMACアドレス
start_bluez_ism.shを実行すると、IoTスマートモジュールのセンサーデータを取得して、ログ表示と  log_ism_env_[id].txt:気圧、湿度、温度、紫外線量、照度、日付のログファイル  log_ism_motion_[id]..txt:タイムスタンプ、地磁気、加速度のログファイル が生成されます。 (ログの詳細は手順5を参照ください。) 複数のIoTスマートモジュールに接続する場合は、下記のように set_bluez_ism.shで、各IoTスマートモジュールの設定後、 start_bluez_ism.shの末尾に"&"を付けて、バックグラウンドで実行します。 (ここでは、10個のIoTスマートモジュールに接続しました。)
set_bluez_ism.sh [IoTスマートモジュールのMACアドレス]
set_bluez_ism.sh [IoTスマートモジュールのMACアドレス]
...
set_bluez_ism.sh [IoTスマートモジュールのMACアドレス]
 
start_bluez_ism.sh [IoTスマートモジュールのMACアドレス] &
start_bluez_ism.sh [IoTスマートモジュールのMACアドレス] &
...
start_bluez_ism.sh [IoTスマートモジュールのMACアドレス] &
send_ism.shは、IoTスマートモジュールのセンサーデータのログファイル  log_ism_env_[id].txt:気圧、湿度、温度、紫外線量、照度、日付のログファイルの内容
例)pres=1011.37&hum=60.06&tmp=25.24&uvi=0.05&lux=74.45&date=15.10.1
 log_ism_motion_[id]..txt:タイムスタンプ、地磁気、加速度のログファイルの内容の末尾
例)time=0:5:40(0[ms])&mag=(9819.60, 131.85, 46.65)&acc=(0.04, 0.01, 14.97)
の書式を、手順6のHeroku側のアプリの書式に合わせて、
例)num0=3&name0=IoT Smart Module&id0=28:A1:83:E1:59:3A&date0=15.10.1&press0=1011.34&hum0=60.14&temp0=25.22&uv0=0.00&amb0=75.84&
  time0=0:5:30(0[ms])&mag0=(9818.85, 131.40, 46.20)&acc0=(0.03, 0.01, 14.99)
のように変換して、Herokuに送信するスクリプトです。 下記のように使用します。
send_ism.sh <num> <id> <url>
引数
 num:IoTスマートモジュールの番号
 id:IoTスマートモジュールのMACアドレス
 url:手順6のHerokuのURL
ここでは、10個のIoTスマートモジュールからセンサーデータを取得するため、 IoTスマートモジュールのMACアドレスに"num"で番号(0-9)を付けて区別するようにしています。 start_all_ism_x10.shは、  IoTモジュールのMACアドレスの設定  HerokuのURLの指定  set_bluez_ism.sh:IoTスマートモジュールの設定  start_bluez_ism.sh:IoTスマートモジュールからのセンサーデータをログファイルへ出力  send_ism.sh:ログファイルの内容をセンサーデータをHerokuに送信 を行います。

製品: 

  • Armadillo-IoT G3L