遭遇した現象と対応
UbuntuやRaspberry PiなどLinuxで動くPCから、下記のようなコマンドでBLE機器に対してhcitoolで検索してgatttoolで接続しようとしたところ、何故か失敗する現象に遭遇しました。(hcitoolやgatttoolの使い方は以前書いた記事(ubuntuからESP32にbluetooth接続して信号を送受信する方法)が参考になると思います。)
$ sudo hcitool lescan LE Scan ... C1:BB:FB:1B:B5:33 (unknown) $ sudo gatttool -b C1:BB:FB:1B:B5:33 -I [C1:BB:FB:1B:B5:33][LE]> connect Attempting to connect to C1:BB:FB:1B:B5:33 Error: connect error: Connection refused (111) [C1:BB:FB:1B:B5:33][LE]>
Androidの動作確認アプリからは接続できていたので、PCのLinuxからでも接続できると信じて検索をしたところ、いくつかのサイトでgatttoolに -t random オプションを付けたら良いと紹介されているのを見つけました。
Stack Overflow: Cannot connect to BLE device on Raspberry Pi
Raspberry Pi Forum: RaspberryPi 3 B cannot connect GATT BLE devices
試してみたら接続できました。
$ sudo gatttool -t random -b C1:BB:FB:1B:B5:33 -I [C1:BB:FB:1B:B5:33][LE]> connect Attempting to connect to C1:BB:FB:1B:B5:33 Connection successful [C1:BB:FB:1B:B5:33][LE]>
randomとは?
Raspberry Pi Forumで紹介されていたMicrochip社のページ(Bluetooth® Low-Energy Device Address)によると、 BLEのアドレスにはpublic1種類とrandom3種類の合計4種類があるらしいです。gatttoolの標準のアドレス設定はpublicとなっているため、random形式でアドレスを扱う機器に接続できなかったようです。
まとめ
BLEのアドレスにはpublic1種類とrandom3種類の扱い方があるらしく、gatttoolの標準設定ではpublicなものしか見てくれないため、random形式の機器に接続するには-t randomオプションを付ける必要がありました。動作確認環境
Ubuntu$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04.3 LTS Release: 18.04 Codename: bionic
bluez (gatttoolはbluezに含まれます)
$ dpkg --status bluez | grep '^Version:' Version: 5.48-0ubuntu3.2
0 件のコメント :
コメントを投稿