コンテンツにスキップ

Top

gatttool の使い方

BluetoothにはクラシックBluetooth(BR/EDR)とBLEの二種類がある。
BLEはGATTというプロトコルで通信を行う。
そのGATTでやり取りしているデータを見ることができるシンプルなツールがgatttoolである。
よって、ある程度GATTについて知っていないとキャラクタリスティックとか急に言われてもしらんがな、となるけど、ここではGATTの説明はしないのでぐぐれ。

gatttoolでBLEデバイスのデータを読む

以下の方法で接続できるんだが、実際にやるとエラーが出て困った。

BLEデバイスのBDアドレスが、AA:BB:CC:DD:EE:FF として、

1
2
3
4
5
sudo gatttool -t random -b AA:BB:CC:DD:EE:FF -I
[AA:BB:CC:DD:EE:FF][LE]> connect
Attempting to connect to AA:BB:CC:DD:EE:FF
Connection successful
[AA:BB:CC:DD:EE:FF][LE]> 

となるはずが、なぜか、 Error: connect error: Connection refused (111) エラーが出てしまう。

1
2
3
4
5
sudo gatttool -t random -b AA:BB:CC:DD:EE:FF -I
[AA:BB:CC:DD:EE:FF][LE]> connect
Attempting to connect to AA:BB:CC:DD:EE:FF
Error: connect error: Connection refused (111)
[AA:BB:CC:DD:EE:FF][LE]> 

いろいろググってもBlueZが古いだのなんだので困った。

んで、とりあえずの解決法としてbluetoothctlを使うことに。
理由はわからないが、このエラーが出るときはゴミみたいなのが残っているようなので、

1
2
3
4
5
$ bluetoothctl 
[bluetooth]# remove AA:BB:CC:DD:EE:FF
[DEL] Device AA:BB:CC:DD:EE:FF
Device has been removed
[bluetooth]# exit

と、removeしてやると、なぜか問題なくgatttoolのconnectが成功する。

成功後は、primary, characteristics などを使ってUUIDやハンドル一覧を出し、char-read-uuidなどを使ってデータを読み込む。
書き込みもできるみたいだけどやったことないんでどうなるか不明。

以上!