前回記事では、LinuxマシンにGATTサーバを立て、サーバから送信されるデータをスマホのGATTクライアントに受信させた。
今回は、別のLinuxマシンでPythonコードによるGATTクライアントを動作させ、2台のLinuxマシン間でBLE通信を行う実験を行ったのでメモを残す。
GATTサーバの準備
下記記事の方法に沿い、LinuxマシンでGATTサーバを動かしておく。
bluetoothctlでGATTサーバとペアリングする
GATTサーバとは別のLinuxマシンで”sudo bluetoothctl”を実行し、まずは周辺のBLEデバイスをスキャンする。
scan on
見つかったBLEデバイスがズラズラと表示され…
Discovery started
[CHG] Controller E8:48:B8:C8:20:00 Discovering: yes
[NEW] Device 5A:5C:6F:FC:E9:88 5A-5C-6F-FC-E9-88
:
[NEW] Device E8:D0:FC:F2:72:DA myHRsensor
別のLinnuxマシンで動いているGATTサーバ”myHRsensor”が見つかるので、ペアリングを実行する。
pair E8:D0:FC:F2:72:DA
そして、以下1.2.の順番で実行するとペアリングが成功しGATTサーバとの接続が確立される。
- GATTサーバ側のbluetoothctlにペアリング確認メッセージが表示されるので先にyesを入力し
- 続いて手元(GATTクライアント側)の確認メッセージにもyesを入力
これでGATTクライアントを動かす準備は完了。
BlueZのテストコードでGATTクライアントを動かす
BlueZのテストコードはGATTサーバ側を動かした時の記事に記した通り、BlueZのGitHub test/ディレクトリ下にある。
Pythonコードexample-gatt-clientを実行しGATTクライアント開始
bluetoothctlの操作でGATTサーバとの接続が確立されていれば、以下のコマンド実行でGATTサーバから送られて来る心拍センサの信号を受信出来るようになる。
sudo python example-gatt-client
コンソール出力は以下のような感じ。受信した心拍数の値が”HR”に、時々”Energy Expended”にバッテリー残量の値が時々刻々と表示される。
Getting objects...
Heart Rate Service found: /org/bluez/hci0/dev_E8_D0_FC_F2_72_DA/service0049
HR Measurement notifications enabled
Body sensor location value: Chest
New HR Measurement
HR: 119
Sensor Contact status: contact detected
New HR Measurement
HR: 111
Sensor Contact status: contact detected
Energy Expended: 50
New HR Measurement
HR: 129
Sensor Contact status: contact detected
New HR Measurement
HR: 99
Sensor Contact status: contact detected
:
まとめ
2台のLinuxマシン間でGATTサーバ/クライアントをそれぞれ動かし、BLE通信でデータをやりとりする実験を行った。例によってBlueZ同梱のサンプルPythonコードの中身には触れずコードをそのまま動かすのにとどめたが、いずれPythonコードを自作してのBLE通信に挑戦してみたい。
コメント