Bluetooth経由でシリアルコマンドを送受信しようとしています。 pyBluezライブラリをインストールしました。問題は、rfcomm.confが存在している間、/ dev /ディレクトリにrfcomm0がないことです。再起動しましたが、変更はありません。
次のコマンドを実行すると、アクセス許可が拒否されたというエラーが表示されます。
Sudo echo "This is a test" > /dev/rfcomm0
USB Bluetoothモジュールが接続された後、rfcommが/ devに自動的に追加されないのはなぜですか? Bluetoothモジュールは互換性があり、コマンドラインからデバイスをスキャンして見つけることができます。 Bluezとbluez-utilsはすでにインストールされています。
Bluetoothサービスが開始された場合でも、/dev/rfcomm0
デバイスが自動的に表示されるだけではありません。
少なくとも、BluetoothサブシステムはBluetoothデバイスのアドレスとその上のチャネルを知っている必要があります。これにより、特定の/dev/rfcomm*
デバイス名を特定の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内部の最後の主要な再構築には、/etc/bluetooth/rfcomm.conf
ファイルなどのRFCOMM関連の機能の一部が必要だったようです。ただし、少なくともrfcomm
コマンドは引き続き使用可能であり、ジョブを実行できます。
なぜこれが自動的に行われないのですか?まず、Bluetoothサービスはデーモンを起動する必要があり、それがinitリストにない場合は、ターミナルに移動して、initリストを再構成してデーモンを含めるまで手動で起動する必要があります。
これは、コンピューター上ですべてを自動化することを確約する前に、構成をテストできるようにするためです。この背後にある理由は、OSがどのように機能するか、ユーザーとグループに通信の権利がどのように割り当てられるかなどのUnixの概念に基づいています。