初めてのBLE (9) Raspberry Piでペリフェラル①bluetoothctlとhciconfig
2020年3月29日現在、ラズパイのRaspbian Buster with desktop(2020-02-13)でBLEは、BlueZ 5.50が動いています。デーモンは bluetoothd で、設定や制御にはbluetoothctl、hciconfig などのユーティリティが利用できます。
(参考資料)Wireless・のおと Bluetoothのはなし(4)
Pythonのライブラリが使えればよいと思い探すと、bluepy やPybluezが見つかりましたが、ペリフェラルが記述ができないようです。調べていくと、BlueZはAPIが公開されていて、なんとPythonのサンプル・プログラムが用意されています。
https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/test?h=5.47
利用方法は、次のWebページが役に立ちます。
ここでは、最初にhciconfigとbluetoothctlを利用してみます。
(2020/04/16)ペリフェラル用にpyblenoがあるのを見つけました。「初めてのRaspberry Pi BLEプログラミング 」で取り上げています。
●hciconfig
基本的な情報を表示します。hci0という名前のインターフェースで、アドレスは変になっていますが、AA:AA:AA:AA:AA:AAです。
(2020/04/16)BlueZ 5.50(5.50-1.2)でアドレスは正常になりました。
ヘルプです。
upはBLEモジュールの電源をONに、downは電源を切ります。
BLEのアドバタイジングを開始するのは、hciconfig leadv、停止はhciconfig noleadvです。
●bluetoothctl
このユーティリティを起動すると、対話モードに入ります。helpを表示しました。
showで情報を表示します。
上記のPowered:noはBLEの電源が入っていません。ディスプレイの右上にあるBLEのアイコンからTurn On Bluetoothで、電源を入れます。リアルタイムでbluetoothctlに電源が入ったことが通知されます。
scan onで探します。D8:2B:70:EB:BE:19はmicro:bitです。
●挙動を見る
sudo hciconfig hci0 leadv |
で、BLEのアドバタイジングを始めます。RSL10のツールでscanしていると、電波の強度RSSIが刻々と変化します。
30分ほど見ていましたが、止まりませんでした。
次に、RSL10のツールでconnectします。 約30秒でDisconnectされました。この時点で、RSSIは変化しなくなったので、ラズパイのアドバタイジングは停止した模様です。
この様子を見るために、bluetoothctlを起動しておきます。Connected:yesがつながったときです。30秒ほどして、Connected:noに変わります。そのあいだに、デフォルトのGeneric Access(1800)やGeneric Attribute(1801)のサービスが発生しています。
次に、RSL10のツールでconnectした後、Discover Servicesをクリックします。そしてそのまま待ちます。約30秒でDisconnectされました。bluetoothctlの表示の続きです。
RSL10ツールの画面です。デフォルト(空?)のサービスの内容が取得されています。