Bluetooth経由でシリアルコマンドを送受信しようとしています。 pyBluezライブラリをインストールしました。問題は、rfcomm.confが存在しますが、rfcomm0が/ dev /ディレクトリにないことです。再起動しましたが、何も変わりませんでした。
次のコマンドを実行すると、「許可拒否」エラーが発生します。
sudo echo "This is a test" > /dev/rfcomm0
USB Bluetoothモジュールが接続された後にrfcommが/ devに自動的に追加されないのはなぜですか? Bluetoothモジュールは互換性があり、コマンドラインを介してデバイスを検索して見つけることができます。 Bluezとbluez-utilsはすでにインストールされています。
答え1
Bluetoothサービスが有効になっていても、/dev/rfcomm0
デバイスは自動的に表示されません。
/dev/rfcomm*
特定のデバイス名を特定のBluetoothデバイス+チャンネルの組み合わせにバインドできるように、少なくともBluetoothサブシステムはBluetoothデバイスのアドレスとそのチャンネルを知る必要があります。
rfcomm bind 0 <bdaddr> [channel]
を使用してバインドできます/dev/rfcomm0
。チャンネル番号を指定しない場合、デフォルトではチャンネル 1 が使用されます。使用しているバージョンがrfcomm
まだ/etc/bluetooth/rfcomm.conf
ファイルをサポートし、ファイルに書き込むアドレスとチャネル情報がある場合は、コマンド/dev/rfcomm0
からアドレスとチャネル情報を省略できますが、バインドするにはコマンドを使用する必要があります。
BlueZツールの新しいバージョンはもはやこの/etc/bluetooth/rfcomm.conf
ファイルを記録しないようです。rfcomm bind
バインディングを設定するには、常にコマンドの完全な形式を使用する必要があります。/etc/rc.local
再起動後も接続は維持されないため、起動時に自動的に実行されるように、一部のカスタム起動スクリプトにこれらのコマンドを追加する必要があります。
BlueZ内の最後の主要な再構築により、ファイルなどの一部のRFCOMM関連機能が失われているようです/etc/bluetooth/rfcomm.conf
。ただし、少なくともrfcomm
コマンドはまだ使用可能であり、操作を実行します。
答え2
なぜこれは自動的には行われないのですか?まず、Bluetoothサービスはデーモンを起動する必要があります。初期化リストにない場合は、端末に行き、それらを含めるように初期化リストを再構成するまで手動で開始する必要があります。
これは、コンピュータがすべての設定を自動化する前に設定をテストできるためです。その理由は、Unixオペレーティングシステムがどのように機能するか、ユーザーとグループに通信権限を割り当てる方法などの概念に基づいています。