Bluez Tools

Raspberry Pi3 でBLE通信を久しぶりにやってみて、通信相手が悪いのかスキャンでエラーがでたり、これまで使っていたツールでは不都合があったりとしたため、違う方法でいろいろと試したメモです。

まず自動的にデバイスと接続してしまうものがあったので、このときは
bluetoothctl を使ってdisconnectする必要がありました。
また、hcitool -i hci0 lescan でスキャンができないときもこれを使いました。

pi@raspberrypi:~/work $ bluetoothctl
Agent registered
[bluetooth]# scan on
Discovery started
….
[NEW] Device 56:89:94:76:15:6A HC-08
….
[bluetooth]# scan off

通信相手はiPhoneアプリのLightBlueです。

次にBLE関連のツールをもう少し知る意味から、ソースコードからビルドしようと以下試しました。

sudo apt install apt-src build-essential
sudo vi /etc/apt/sources.list  (コメント削除)
sudo apt-src update
apt-src install bluez
apt-src build bluez

このやり方のいいところは、依存関係が今の環境を考慮してくれているところです。
ビルドしてみるとこれまで知らなかったツールが結構あり、btgatt-client は gatttool よりも使いやすいと思いました。
ここでは上記スキャンで検出した LightBlue の VirtualDevice HC-08に接続してみました。

./btgatt-client -t random -d 56:89:94:76:15:6A
…..
service – start: 0x0029, end: 0x0038, type: primary, uuid: 0000fff0-0000-1000-8000-00805f9b34fb
charac – start: 0x002a, value: 0x002b, props: 0x8a, ext_props: 0x0001, uuid: 0000fff1-0000-1000-8000-00805f9b34fb
descr – handle: 0x002c, uuid: 00002900-0000-1000-8000-00805f9b34fb
charac – start: 0x002d, value: 0x002e, props: 0x02, ext_props: 0x0000, uuid: 0000fff2-0000-1000-8000-00805f9b34fb
charac – start: 0x002f, value: 0x0030, props: 0x88, ext_props: 0x0001, uuid: 0000fff3-0000-1000-8000-00805f9b34fb
descr – handle: 0x0031, uuid: 00002900-0000-1000-8000-00805f9b34fb
charac – start: 0x0032, value: 0x0033, props: 0x10, ext_props: 0x0000, uuid: 0000fff4-0000-1000-8000-00805f9b34fb
descr – handle: 0x0034, uuid: 00002902-0000-1000-8000-00805f9b34fb
charac – start: 0x0035, value: 0x0036, props: 0x96, ext_props: 0x0001, uuid: 0000fff5-0000-1000-8000-00805f9b34fb
descr – handle: 0x0037, uuid: 00002900-0000-1000-8000-00805f9b34fb
descr – handle: 0x0038, uuid: 00002902-0000-1000-8000-00805f9b34fb
….l
[GATT client]# read-value 0x002b
[GATT client]#
Read value: 0 bytes
[GATT client]# write-value 0x002b 81 82 83 84
[GATT client]# read-value 0x002b
[GATT client]#
Read value (4 bytes): 51 52 53 54

接続するとサービスなどが表示されます。スマホに表示される項目がどれに該当するか調べてWrite/Readしてみました。

実はこれを試す前に、gatlib(https://github.com/labapart/gattlib)を使っていたのですが、うまくいきませんでした。実装が大きいためライブラリバージョンの依存関係が影響を受けそうです。
(RasberryPiもいろんな用途で使っているので、知らないうちにいろいろといじっているせいもありますが)

今回新しいツールを試せたのは有意義でした。

参考:
ttps://denor.jp/raspberry-pi%E3%81%AB%E3%81%A6apt-src%E3%81%A7%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%82%92%E3%83%93%E3%83%AB%E3%83%89%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF