前提
Windows 11 Pro 上の VirtualBox に立てた Ubuntu 18.04 VM に、 USB ドングルを繋げて確認した。
使用した USB ドングルとビーコンは 今回使ったハード類 を参照。
- ホスト OS: Windows 11 Pro 21H2
- VirtualBox: バージョン 6.1.28 r147628 (Qt5.6.2)
- ゲスト OS: Ubuntu 18.04
Bluetooth の環境構築
Bluetooth 通信スタックのインストール
bluez
: Bluetooth 通信スタックbluez-hcidump
: Bluetooth 通信のパケットをダンプするためのパッケージ。今回は iBeacon の通信内容を確認するために使う。
USB ドングルの認識確認
hciconfig
で、 USB ドングルの情報が確認できる。
以下のような形でもろもろの情報が取得できる。
LMP Version
が 4.0
以上になっていれば BLE(iBeacon) できるはず…。
$ hciconfig -a
hci0: Type: Primary Bus: USB
BD Address: 00:1A:7D:DA:71:15 ACL MTU: 310:10 SCO MTU: 64:8
UP RUNNING
RX bytes:4238 acl:0 sco:0 events:147 errors:0
TX bytes:2189 acl:0 sco:0 commands:44 errors:0
Features: 0xff 0xff 0x8f 0xfe 0xdb 0xff 0x5b 0x87
Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
Link policy: RSWITCH HOLD SNIFF PARK
Link mode: SLAVE ACCEPT
Name: 'ubuntu'
Class: 0x000000
Service Classes: Unspecified
Device Class: Miscellaneous,
HCI Version: 4.0 (0x6) Revision: 0x22bb
LMP Version: 4.0 (0x6) Subversion: 0x22bb
Manufacturer: Cambridge Silicon Radio (10)
iBeacon を受信できるかの確認
BLE アドバータイズ検索
hcitool lescan
で、 BLE のアドバータイズを検索できる。
以下コマンドで、ビーコンの MAC が表示されることを確認。
ビーコンとの通信
簡単に iBeacon の内容を確認するコマンドは無いようだ。
hcidump
と hcitool lescan
の合わせ技で UUID
と Major
, Minor
を取得している方法が見つかる。
$ sudo hcidump -R & sudo hcitool lescan
...(snip)
AC:23:3F:26:2C:DE (unknown)
> 04 3E 2B 02 01 00 00 DE 2C 26 3F 23 AC 1F 02 01 06 03 03 F1
FF 17 16 E2 C5 6D B5 DF FB 48 D2 B0 60 D0 F5 A7 10 96 E0 00
0C 00 22 00 64 C7
...(snip)
<C-c>
$ fg
<C-c>
ダンプされたバイナリの中に、今回使ったビーコンで設定した UUID
, Major
, Minor
が含まれていることを確認できた。
バイナリの読み方は Raspberry piでiBeacon受信 | TomoSoft を参照のこと。
iBeacon 受信プログラムを nodejs で作る
あまりに読みずらいので、 nodejs のビーコンライブラリを使って受信と情報表示を行う。
Raspberry PiでiBeaconを受信する(Node.js + bleacon) - Qiita に記述されている beacon_discover.js
をそのまま利用する。
必要パッケージのインストール
nodejs
: ビーコン受信プログラムのランタイムnpm
: nodejs のパッケージ管理システムlibbluetooth-dev
: nodejs のビーコンライブラリのビルドに必要なパッケージvim
: プログラム作成のため
bleacon
: nodejs のビーコンライブラリ
iBeacon 受信プログラム作成
Raspberry PiでiBeaconを受信する(Node.js + bleacon) - Qiita に記述されている beacon_discover.js
の通りにファイルを作成する。
名前だけ、 npm デフォルトの index.js
にした。
var Bleacon = require("bleacon");
Bleacon.startScanning();
Bleacon.on("discover", function(bleacon) {
console.dir(bleacon);
});
iBeacon 受信プログラム実行
$ sudo nodejs ./index.js
{ uuid: 'e2c56db5dffb48d2b060d0f5a71096e0',
major: 12,
minor: 34,
measuredPower: 0,
rssi: -62,
accuracy: 0,
proximity: 'immediate' }
{ uuid: 'e2c56db5dffb48d2b060d0f5a71096e0',
...(snip)
hcidump
より大分わかりやすく情報が表示されている。
後は uuid
, major
, minor
, rssi
あたりを見たり見なかったりしながら所望の処理を実装していけばいい感じですかね。
以上。
今回使ったハード類
Bluetooth ドングルは、家に転がっていた 2 つで試して、どちらでも OK だった。
ビーコン発信側は、サンワダイレクトのビーコンを使った。
0 件のコメント:
コメントを投稿