Howto

Armadillo-IoT G3で「Bluetooth ほこりセンサー」からデータを収集

このHowtoでは、Armadillo-IoT G3 を用いた Bluetooth ほこりセンサー REX-BTPM25,Bluetooth エアクオリティ モニター REX-BTPM25Vのデータ収集手順とデータ構造について紹介します。

REX-BTPM25

Bluetooth ほこりセンサー REX-BTPM25とは、ラトックシステム株式会社より販売されているセンサーデバイスです。
以下のようなセンサーを搭載しており、計測命令を受けて一斉に各情報を計測します。

  • PM2.5/PM10ダストセンサー
  • 温湿度センサー
  • 照度センサー
  • 気圧センサー

詳細な仕様につきましては、ほこりセンサー付属のマニュアルを確認してください。

GATTツールを利用した動作確認手順

はじめにGATTツールを用いてほこりセンサーにBluetoothで接続し、動作を確認する手順を記載します。
ほこりセンサーへ接続するためには、ほこりセンサーのBDアドレスを取得する必要があります。
ほこりセンサーの電源がONになっていることを確認し、Armadillo-IoT G3のコンソールからコマンドを入力します。
入力後に表示される行のうち、末尾に「PM25」と名のついたBDアドレスを確認します。
確認後、Ctrl+Cでコマンドを終了します。

[armadillo ~]# hcitool lescan
LE Scan ...
00:0C:BF:16:36:EA (unknown)
D6:25:F5:C8:D4:60 PM25 # <- この BDアドレスを確認します。

確認したBDアドレスを用いて、GATTツールでほこりセンサーへ接続します。 「Connection successful」と表示されれば接続完了です。

[armadillo ~]# gatttool -t random -b D6:25:F5:C8:D4:60 -I
[D6:25:F5:C8:D4:60][LE]> connect
Attempting to connect to D6:25:F5:C8:D4:60
Connection successful

Armadillo-IoT G3からほこりセンサーの動作を確認するため、次のコマンドを入力します。

[D6:25:F5:C8:D4:60][LE]> char-write-req 0x0023 0100000000000000000000000000000000000000

このコマンド入力後、ほこりセンサーが「正面の4つのLEDを点滅し、動作音とともに空気を吸い込む」という測定動作を開始したら動作確認は完了です。 次のコマンドを入力して接続を終了します。

[D6:25:F5:C8:D4:60][LE]> disconnect
[D6:25:F5:C8:D4:60][LE]> exit
[armadillo ~]#

Armadillo-IoT G3でデータを収集する設定手順

ほこりセンサーから計測データを収集するために、次の内容を設定します。

  • 現在時刻設定
  • 連続計測開始設定
  • 計測結果通知設定

このHowtoでは例として、設定用に用意したshellスクリプト「rex-btpm25_sample.sh」を使用します。
下記にスクリプトを記載します。
http://download.atmark-techno.com/misc/howto_armadillo_rex-btpm25/rex-btpm25_sample.sh

スクリプトの実行に必要なパッケージをインストールします。

[armadillo ~]# apt-get update
[armadillo ~]# apt-get install bc

このスクリプトは「現在時刻の1分後から連続測定をスタート。1分毎に測定を行い、結果を標準出力に表示する設定を行う」という内容になっています。
スクリプト実行後、以下のように出力されます。

[armadillo ~]# ./rex-btpm25_sample.sh D6:25:F5:C8:D4:60
Characteristic value was written successfully
Characteristic value was written successfully
Characteristic value was written successfully
Notification handle = 0x0011 value: 3a 11 19 08 11 06 00 00 00 e8 03 1d 1e 72 01 ff ff ff ff 00 
Notification handle = 0x0011 value: 3b 11 19 08 11 08 00 00 00 e8 03 1d 1e 75 01 ff ff ff ff 00 
Notification handle = 0x0011 value: 00 12 19 08 11 03 00 00 00 e8 03 1c 1f 6c 01 ff ff ff ff 00
...

出力された行の「value」が、ほこりセンサーのデータになります。
上記のようにデータ収集を行った後、収集したデータを「まとめてクラウドにアップする」「見やすい形に整えてログファイルに保存する」等の運用が可能です。

詳細なGATTサービスの仕様については、ラトックシステム株式会社に問い合わせてください。

データ構造

上記で収集した計測データの構造を説明します。
今回取得したデータ構造は次の表のようになっています。
各値はリトルエンディアンで構成されています。

例:3b 11 19 08 11 08 00 00 00 e8 03 1d 1e 75 01 ff ff ff ff 00

データ値 内容 解析後の値 詳細
3b 11 19 08 11 計測日時 2017年8月25日17時59分 [分][時][日][月][年]の順で表示
08 00 PM2.5濃度 8 μg/m3 -32,768 ~ 32,767 μg/m3
00 00 PM10濃度 0 μg/m3 -32,768 ~ 32,767 μg/m3
e8 03 気圧 1000 hpa -32,768 ~ 32,767 hpa
1d 温度 29 ℃ -128 ~ 127 ℃
1e 湿度 30 % -128 ~ 127 %
75 01 照度 373 lx -32,768 ~ 32,767 lx
ff ff ff ff CO2,TVOC AQ センサ非搭載 AQ センサ非搭載ならばff ff ff ff
00 計測モード 連続計測モード 00:連続計測モード

REX-BTPM25V

Bluetooth エアクオリティ モニター REX-BTPM25Vとは、2017年9月下旬より発売されたREX-BTPM25の次世代機です。
搭載センサーはREX-BTPM25と変わりません。

詳細な仕様につきましては、付属のマニュアルを確認してください。

Armadillo-IoT G3でデータを収集する設定手順

REX-BTPM25でArmadillo-IoT G3からデータを収集した例と同様の操作をREX-BTPM25Vでも行います。

REX-BTPM25の確認動作と同様に、ほこりセンサーの電源がONになっていることを確認してArmadillo-IoT G3のコンソールからコマンドを入力します。
入力後に表示される行のうち、末尾に「PM25V」と名のついたBDアドレスを確認します。
確認後、Ctrl+Cでコマンドを終了します。

[armadillo ~]# hcitool lescan
LE Scan ...
00:0C:BF:16:36:EA (unknown)
ED:F6:ED:80:F1:C5 PM25V # <- この BDアドレスを確認します。

「REX-BTPM25V」は「REX-BTPM25」から一部仕様が変化しており、「REX-BTPM25」で使用したシェルスクリプトがそのまま使えません。
そのため、REX-BTPM25V専用に用意したshellスクリプト「rex-btpm25v_sample.sh」を使用します。
スクリプトの動作内容は「rex-btpm25_sample.sh」と同様です。
下記にスクリプトを記載します。
http://download.atmark-techno.com/misc/howto_armadillo_rex-btpm25/rex-btpm25v_sample.sh

スクリプト実行後、以下のように出力されます。

[armadillo ~]# ./rex-btpm25v_sample.sh D6:25:F5:C8:D4:60
Characteristic value was written successfully
Characteristic value was written successfully
Characteristic value was written successfully
Notification handle = 0x0011 value: e0 88 66 23 1c 74 00 00 94 72 08 56 96 27 f1 01 0f b8 0f 10
Notification handle = 0x0011 value: 00 89 66 23 1b 58 00 00 94 7a 08 56 97 27 f0 01 0f b8 0f 10
Notification handle = 0x0011 value: 20 89 66 23 13 7c 00 00 94 82 08 56 97 27 ee 01 11 10 10 10
...

出力された行の「value」が、ほこりセンサーのデータになります。

詳細なGATTサービスの仕様については、ラトックシステム株式会社に問い合わせてください。

データ構造

上記で収集した計測データの構造を説明します。
「REX-BTPM25V」の計測データは「REX-BTPM25」と異なっており、専用の分解方法を使用します。
以下に例を用いたREX-BTPM25Vの分解方法を記載します。

例:value: e0 88 66 23 1c 74 00 00 94 72 08 56 96 27 f1 01 0f b8 0f 10

1.4byteずつにグループ分けする
例:「e0 88 66 23」「1c 74 00 00」「94 72 08 56」「96 27 f1 01」「0f b8 0f 10」

2.各グループ内の16進数値を「a b c d」から「d c b a」に入れ替え、空白を削除する
例:「236688e0」「0000741c」「56087294」「01f12796」「100fb80f」

3.変換ツール等でそれぞれを2進数に変換する。変換後の値がそれぞれ32bitずつあることを確認する。
例:「00100011011001101000100011100000」「00000000000000000111010000011100」「01010110000010000111001010010100」「00000001111100010010011110010110」「00010000000011111011100000001111」

4.左端を31ビット目,右端を0ビット目として、各グループ毎に決められた分解パターンに沿って2進数値を切り分ける。
  その後10進数変換して値を得る。
  一部の値は数値計算を行う。
各グループの分解表を以下に記載します。

グループ1

ビット値範囲 文字数 2進数データ値 内容 変換後の値
31~25ビット目 7文字 0010001 計測年 17年(2017年)
24~21ビット目 4文字 1011 計測月 11月
20~16ビット目 5文字 00110 計測日 6日
15~11ビット目 5文字 10001 計測時 17時
10~5ビット目 6文字 000111 計測分 7分
4~0ビット目 5文字 00000 ダミー 0

グループ2

ビット値範囲 文字数 2進数データ値 内容 変換後の値
31~24ビット目 8文字 00000000 RFU 0
23~20ビット目 4文字 0000 UVI 0
19~10ビット目 10文字 0000011100 PM10濃度 28[μg/㎥]
9~0ビット目 10文字 0000010111 PM2.5濃度 23[μg/㎥]

グループ3

ビット値範囲 文字数 2進数データ値 内容 変換後の値
31~21ビット目 11文字 01010011011 気圧計温度 667/10-40 = 26.7[℃]
20~11ビット目 10文字 0100101010 湿度 298/10 = 29.8[%/RH]
10~0ビット目 11文字 01000010111 温度 535/10-40 = 13.5[℃]

グループ4

ビット値範囲 文字数 2進数データ値 内容 変換後の値
31~16ビット目 16文字 0000000111110001 照度 497[lx]
15ビット目 1文字 0 VOCセンサー状態:起動 0
14ビット目 1文字 0 VOCセンサー状態:初期 0
13~0ビット目 14文字 10011110010110 気圧 10134/10 = 1013.4[hPa]

グループ5

ビット値範囲 文字数 2進数データ値 内容 変換後の値
31~24ビット目 8文字 00010000 計測データモード 16(拡張連続計測データ)
23~11ビット目 13文字 0000111110111 eCO2 503[ppm]
10~0ビット目 11文字 00000001111 TVOC 15[ppb]