初めての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ページが役に立ちます。

  BlueZのAPI/サンプルコードのメモ

 ここでは、最初に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ツールの画面です。デフォルト(空?)のサービスの内容が取得されています。

前へ

初めてのBLE (8) micro:bitでペリフェラル⑤UART温度をArduinoセントラルで受け取る

次へ

初めてのBLE (10) Raspberry Piでペリフェラル②CPUの温度を送る