web-dev-qa-db-ja.com

Bluezで非推奨になったrfcommバイナリの代替

Bluez 5.44以降、bluez-utils(hcitoolなど)に含まれているrfcommバイナリは非推奨と見なされ、AURが提供するbluez-utils-compatパッケージにのみ含まれるようになりました。

Rfcommカーネルモジュールを使用してBluetoothデバイスをシリアルポートにバインドするための同様のコマンドラインアプリケーションはありますか、または今後はPyBluezまたは同様のライブラリを使用する必要がありますか?

後者が当てはまる場合、どのPython 3ライブラリをお勧めしますか?

そして誰かが知っているなら、なぜ多くのbluez-utilsが突然廃止されたと考えられるのか教えてください。それについては何も見つかりませんでした。

ArchWiki は、新しい D-Bus Profile 1 API を使用してrfcomm機能を実装することを推奨しています。

10
eike

最近、Bluezの現在のD-Bus APIを使用して失われた機能を実装することを目的とした bluez-tools プロジェクトを見つけました。

Bluez-toolsは、コミュニティリポジトリからArchLinuxで利用できます。私はこれをテストしていません、そしてgithubページはそれがまだベータ版であると述べています。しかし、ドキュメントによると、bt-serialは古いbluez rfcommを置き換えることができ、bt-adapter + bt-agent + bt-deviceはhcitoolの機能を備えているはずです。

編集:課題リストと最後のコミットを見ると、bluez-toolsはもはやアクティブに維持されていないようです

2
eike

別の可能な解決策を見つけました。私は誰かのgitハブリポジトリを掘り下げてこれを見つけました。これは、ソケットモジュールに組み込まれたpython3を使用します。

前提条件:

  1. アドレス&ltadapter address&gtに有効なアダプターがあります。
  2. &ltdevice address&gtにターゲットBluetoothデバイスがあります。
  3. デバイスは固定されています。

つまり、rfcommと同じポイントを使用できます。


$python3
>>> import socket
>>> sock = socket.socket(socket.AF_BLUETOOTH, socket.SOCK_STREAM, socket.BTPROTO_RFCOMM)
>>> adapter = '00:11:22:33:44:55' #<adapter address>
>>> device = '55:44:33:22:11:00' #<device address>
>>> sock.bind((adapter, 1))
>>> sock.connect((device, 1))
## If not pinned it will ask you. You can use/adapt the bluez simple-agent for headless pinning
>>> sock.send(b'hello\n')
>>> sock.recv(100)
>>> sock.close()
1
Gault Drakkor

この問題について注意したい:

  1. その このgithubプロジェクト には、rfcomm機能の一部が含まれています。 (bluezテストファイルに基づく)。
  2. bluezプロジェクト自体にはまだrfcomm.cファイルが含まれており、簡単にコンパイルできます。

    gcc -lbluetooth rfcomm.c -orfcomm -DVERSION = xyz

... 1つのファイルだけで、bluezプロジェクト全体をコンパイルする必要はありません。ここで、xyzはダウンロードしたバージョンです bluez tar.xz ソースコード(5.46は現在)。ダウンロードする前に、まず自分自身を確認する必要がありますbluetoothd -vそして一致するソースをダウンロードします。 bluez-libsは、コンパイルが成功するための唯一の依存関係です。

Armv7(raspberry 2)にはrfcommが必要でしたが、rfcomm用のaurパッケージはありません。これは唯一の方法でしたが、うまく機能します。

それでも、rfcommが非推奨になっている理由や、良い代替案がない理由、そしてシリアルポートとは逆にBluetoothと通信する方法がわからない。あなたはpythonエキスパートとDBUSエキスパートの両方です...(上記のプロジェクトの所有者のように)ですから...この方法で提供されるのはfifoだけで、/ dev /の実際のキャラクターデバイスではありません。 ..他のすべてのプログラム(arduinoなど)が表示および操作できます。

0
Asain Kujovic