使用したビーコン
Feasycom社製FSC-BP03
Amazonで安価で購入出来るBLE Beaconです。
商品説明にBLE5.0対応という文言がありますが、LongRangeに対応しているわけでは無いようです。
Appleが策定したiBeaconや、Googleが策定したEddystoneなどのデータフォーマットに対応しています。
Armadillo-IoT G3Lの準備
BLEのBeaconデータは、アドバタイジングパケットと呼ばれる、デバイスから不特定多数に対して定期的に発信されるパケットとして送信されます。
Armadillo-IoTシリーズでアドバタイジングパケットを受信する手順としては以前にも下記記事でご紹介しています。
Armadillo-IoT(G3):WLAN+BT コンボモジュールでBLE通信の照度センサーのデータを読む
今回も同様にhci-dumpとhcitool lescanを使ってアドバタイジングパケットを受信しますが、
このビーコンから発信されるアドバタイジングパケットのみを受信するために、以下を行います。
root@armadillo:~# hcitool lewladd XX:XX:XX:XX:XX:XX(ビーコンのMACアドレス)
この手順によって特定のBLEデバイスをホワイトリストに追加することが出来ます。
Beaconの設定を変更してもMACアドレスは変更されないので予め登録しておくと使いやすいです。
ホワイトリストの設定を使ってデータを受信するには以下の手順でコマンドを実行します。
root@armadillo:~# hcidump --raw & *アドバタイジングパケットのRAWデータを表示します hcitool lescan --whitelist *周囲にあるBLEデバイスから出力されたパケットのうち、ホワイトリストに追加されたデバイスからのもののみをスキャンします
ビーコンの設定・データ取得
iBeacon
まずiBeaconデータの受信を確認します。
FSC-BP03は専用のスマートフォンアプリから設定を変更することが出来ます。
受信したデータを解析しやすいようにシンプルな設定にしておきます。
FSC-BP03ではUUID、Major、Minorを設定可能です。
UUID:0 Major:2 Minor:4
こちらの設定を行った後にデータ受信操作を行うと以下のようなパケットが受信されます。
XX:XX:XX:XX:XX:XX (unknown) > 04 3E 2A 02 01 00 00 XX XX XX XX XX XX 1E 02 01 06 1A FF 4C 00 02 15 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 04 B5 AF
先頭の13バイトはiBeaconデータではなくBLEの共通のパケットです。
04:プリアンブル 3E 23 02 01:アクセスアドレス 00 00:ヘッダ XX XX XX XX XX XX:MACアドレス
以降のパケットは下記のサイトを参考に読み解くと、以下のようになります。
Tech Web:iBeaconとは
Qiita:Raspberry PiでiBeaconを検知する
1E :データ長 31 02 01 06:Info A? 詳細不明 1A :データ長 26 FF:Info Header 4C 00:Apple company identifier 02:タイプ 15:データ長 21 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 :UUID 00 02 :Major 00 04 :Minor B5 :RSSI 0xB5=-75dBm AF:CRC
これにより、iBeaconデータを受信し、UUID・Major・Minorによる識別と、RSSI値の取得が出来る事が確認出来ました。
Eddystone
EddystoneにはUID、URL、TLMなどの複数のデータフォーマットがあります。
FSC-BP03ではUIDとURLを使用可能です。
この記事ではURLに設定してデータの受信を行います。
以下のURLを送信するように設定します。
https://abcdefgh.com
こちらの設定を行った後にデータ受信操作を行うと以下のようなパケットが受信されます。
XX:XX:XX:XX:XX:XX (unknown) > 04 3E 23 02 01 00 00 XX XX XX XX XX XX 17 02 01 06 03 03 AA FE 0F 16 AA FE 10 B1 03 61 62 63 64 65 66 67 68 07 AE
先頭の13バイトはiBeaconと同様のものです。
04:プリアンブル 3E 23 02 01:アクセスアドレス 00 00:ヘッダ XX XX XX XX XX XX:MACアドレス
ここから先がEddystone固有のデータフォーマットとなります。
下記を参考に読み解いていきます。
Eddystone-URL
17:以降のデータ長 02 01 06 03 03 AA FE 0F 16 AA FE:Eddystoneの共通パケット(下記参考の事) 10 :フレームタイプ(URLの場合は0x10) B1 :送信電力 この場合は0xB1=-79dBM 03 :URLの先頭部分 0x03=https:// 61:US-ASCIIによってエンコードされた文字列 0x61=a 62 63 64 65 66 67 68 :上記と同様に、bcdefgh 07:URLの末尾部分 0x07=.com AE:CRCコード
また、この時以下のようなパケットも受信していることも確認出来ました。
> 04 3E 26 02 01 00 00 A6 15 01 30 0D DC 1A 02 01 06 03 03 AA FE 11 16 AA FE 20 00 0B 65 80 00 00 08 99 DF 00 02 28 64 00 AF
フレームタイプが0x20となっているのでEddystone-TLMデータだと思われますが、
下記を参考に読み解くと、バッテリー電圧が2917mV/bit、気温が128℃となりますので正常なデータでは無いようです。
Unencrypted TLM Frame Specification