コマンドラインでBluetoothパケット/書き込み要求をBLEデバイスに送信するにはどうすればよいですか?

コマンドラインでBluetoothパケット/書き込み要求をBLEデバイスに送信するにはどうすればよいですか?

BLEライトがありますが、プログラムで制御したいです。私の携帯電話(照明を制御するアプリがあります)と照明の間のBluetoothパケットをスニッフィングして、次のことを見つけました。

  • デバイスMACアドレス:XX:XX:XX:XX:XX:XX
  • 照明の状態を制御するためのハンドル:0x0009
  • 照明値をオン:c7e3f68520e8d5ae5acd17760a01459d

この問題を調べている間、私は(廃止)ユーティリティを見つけましたgatttool。その文書によると、次のようにBLEデバイスに書き込むことができます。

sudo gatttool --char-write-req -b XX:XX:XX:XX:XX:XX -a 0x0009 -n c7e3f68520e8d5ae5acd17760a01459d

これはある程度動作します。携帯電話を使用して照明に接続し、上記のコマンドを実行すると、次の応答が表示されます。

connect error: Connection refused (111)

これは、携帯電話でデバイスに接続したために予想される現象です。電話を切ると、次の応答が表示されます。

connect error: Device or resource busy (16)

残念ながら、これは私が見たいものではありません。この問題は、gatttoolサポートの中断によって発生する可能性があることをオンラインで読みました。

概して私が探しているものは次のとおりです。

  • gatttoolこの状況で動作する方法に関するいくつかの情報/アイデア。
  • 他のアプローチ(つまり、none gatttool)を確認しましたが、bluetoothctlデバイスに接続できないようです。

どんなアドバイスも本当にありがとうございます。

ベストアンサー1

connect error: Device or resource busy (16)

インターフェイスが使用中であることを意味します。ノートパソコンがデバイスに接続されていますか?それともデバイスを使用する他のツールはありますか?たとえば、スキャンbluetoothctlと使用を同時に行うことはできません。gatttool2つの異なるインターフェイスがない場合。

次のコマンドを使用してBluetoothが機能していることを確認してください。ここで、hci0は使用しているhciインタフェースです。

$ hciconfig hci0 down && hciconfig hci0 up
$ service bluetooth restart

インタフェースを確認するには、-a はオプションですが、追加情報を提供します。

$ hciconfig -a

値を読み取ると、16進数をASCIIに自動的に変換します。

$ gatttool -b [MAC] --char-read -a [characteristic] | awk -F':' '{print $2}' | tr -d ' ' | xxd -r -p; printf '\n'

私の経験によると、gatttoolは非常に便利です。他のツールを試してくださいbettercapubertooth one

おすすめ記事