「Bluez を使用したSensorTagへのアクセス 」でBluez を使用してSensorTagへアクセスしましたが、今回はRaspberry Pi 3に実装されているBluetoothを使用して、Bluetooth Low Energy(BLE)プロトコルで、Bluezのコマンドを使用して SensorTagへアクセスします。hcidump ユーティリティを使用して、SensorTagとのプロトコルをデータダンプします。
BluezとSensorTagのBLE接続確認
前回の「Bluez を使用したSensorTagへのアクセス 」では、Bluezのソースコードを取得してコンパイル・インストールを行いましたが、Raspberry Pi 3ではすでにBluezは標準のイメージ含まれており、実行できるように設定されていました。SensorTagと次のコマンドで接続します。
次のコマンドで、インストールされているバージョンを確認します。バージョンは、5.23-2+rpi2でした。
$ apt-cache show bluetooth Package: bluetooth Source: bluez Version: 5.23-2+rpi2 Architecture: all Maintainer: Debian Bluetooth MaintainersInstalled-Size: 69 Depends: bluez Suggests: bluez-cups, bluez-obexd Homepage: http://www.bluez.org Priority: optional Section: admin Filename: pool/main/b/bluez/bluetooth_5.23-2+rpi2_all.deb Size: 36526 SHA256: 98addfa78c275010edd8140f6931fcaaaf16338de3647979036e9cdf08349c7a SHA1: 119a0fe987902df09cc6f272cbc851077217a10a MD5sum: af7f5638734939e1a107a71f8c32f8a9 Description: Bluetooth support This package provides all of the different plugins supported by the Bluez bluetooth stack. Description-md5: c9c3278c19393dc7c6582892d29bf660
まず、BLEの電源を入れます。hciconfigコマンドで「UP RUNNING」になっていることを確認します。
$ sudo hciconfig hci0 up
$ sudo hciconfig hci0: Type: BR/EDR Bus: UART BD Address: B8:27:EB:2E:E0:10 ACL MTU: 1021:8 SCO MTU: 64:1 UP RUNNING RX bytes:717 acl:0 sco:0 events:42 errors:0 TX bytes:1532 acl:0 sco:0 commands:42 errors:0
SensorTagをRaspbianに登録するにはBD(Bluetooth Device)アドレスが必要なので、SensorTagの側面のスイッチを押してアドバタイズ状態にし、hcitoolコマンドを実行します。
$ sudo hcitool lescan LE Scan … 70:56:81:EC:D8:8C (unknown) B4:99:4C:64:CD:DF (unknown) B4:99:4C:64:CD:DF SensorTag ^Z [1]+ Stopped sudo hcitool lescan
hcitoolコマンドでSensorTagに接続します。
$ sudo hcitool lecc B4:99:4C:64:CD:DF Connection handle 64
atttoolコマンドを使用して、対話的にSensorTag のセンサーの情報を読み込みます。次の例では、SensorTagと接続します。
$ sudo gatttool -b B4:99:4C:64:CD:DF --interactive [B4:99:4C:64:CD:DF][LE]> connect Attempting to connect to B4:99:4C:64:CD:DF Connection successful
hcidumpコマンドは、標準のイメージではインストールされていないので、次のコマンドでインストールします。
$ sudo apt-get install bluez-hcidump
Bluezのhcidump ユーティリティは tcpdump と似ています。 これはターミナル上の Bluetooth パケットの内容の表示および Bluetooth パケットのHCI データをファイルにダンプするために使えます。hcidump -Rを起動したまま、SensorTagに対してgatttoolコマンドを実行すると、Bluetooth パケットが得られます。
$ sudo hcidump -R & [1] 25307 $ HCI sniffer – Bluetooth packet analyzer ver 5.21 device: hci0 snap_len: 1500 filter: 0xffffffff
$ sudo hcitool lescan < 01 0B 20 07 01 10 00 10 00 00 00 > 04 0E 04 01 0B 20 00 < 01 0C 20 02 01 01 > 04 0E 04 01 0C 20 00 LE Scan ... > 04 3E 0F 02 01 00 00 DF CD 64 4C 99 B4 03 02 01 05 D0 B4:99:4C:64:CD:DF (unknown) > 04 3E 20 02 01 04 00 DF CD 64 4C 99 B4 14 0A 09 53 65 6E 73 6F 72 54 61 67 05 12 50 00 20 03 02 0A 00 BF B4:99:4C:64:CD:DF SensorTag ^Z
$ sudo gatttool -b B4:99:4C:64:CD:DF --interactive [B4:99:4C:64:CD:DF][LE]> connect Attempting to connect to B4:99:4C:64:CD:DF [B4:99:4C:64:CD:DF][LE]> < 01 0D 20 19 60 00 30 00 00 00 DF CD 64 4C 99 B4 00 28 00 38 00 00 00 2A 00 00 00 00 00 > 04 0F 04 00 01 0D 20 > 04 3E 13 01 00 40 00 00 00 DF CD 64 4C 99 B4 36 00 00 00 2A 00 00 < 01 16 20 02 40 00 > 04 0F 04 00 01 16 20 > 04 3E 0C 04 00 40 00 01 00 00 00 00 00 00 00 Connection successful [B4:99:4C:64:CD:DF][LE]> char-read-hnd 0x25 [B4:99:4C:64:CD:DF][LE]> < 02 40 00 07 00 03 00 04 00 0A 25 00 > 02 40 20 09 00 05 00 04 00 0B 00 00 00 00 Characteristic value/descriptor: 00 00 00 00 [B4:99:4C:64:CD:DF][LE]> > 04 13 05 01 40 00 01 00 char-write-cmd 0x29 01 [B4:99:4C:64:CD:DF][LE]> < 02 40 00 08 00 04 00 04 00 52 29 00 01 > 04 13 05 01 40 00 01 00 char-read-hnd 0x25 [B4:99:4C:64:CD:DF][LE]> < 02 40 00 07 00 03 00 04 00 0A 25 00 > 02 40 20 09 00 05 00 04 00 0B AE FE 78 0E Characteristic value/descriptor: ae fe 78 0e [B4:99:4C:64:CD:DF][LE]> > 04 13 05 01 40 00 01 00 exit (gatttool:1027): GLib-WARNING **: Invalid file descriptor. < 01 06 04 03 40 00 13 > 04 0F 04 00 01 06 04 > 04 05 04 00 40 00 16
hcidumpからのデータは、見やすいようにまとめています。