LinuxのBluetoothシリアルポートに接続してデータを送信するにはどうすればよいですか?

LinuxのUSB-Bluetoothアダプターを介して仮想シリアルポートをセットアップし、Androidデバイスを介してメッセージを送信しようとしています。カーネル3.6で。 「gnome-bluetoothを使用してデバイスと正常にペアリングでき、ファイルをデバイスに送信することもできます。

シリアルポートを設定するには、最初にSPプロファイルのチャネルをアダプタに追加します。

sdptool add --channel=22 SP 

次に、rfcommで「listen」を呼び出します。

rfcomm listen /dev/rfcomm0 22 

ブロックします

Waiting for connection on channel 22 

接続が成功すると、rfcommは/ dev / rfcomm0を作成するようです。それが発生したら、cutecomのようなものを使用してメッセージを送受信したいと思います。接続されたデバイスに接続します。

AndroidデバイスでBluetooth SPP端末を開き(いくつかありますが、いくつか異なるものを試しました)、接続を試みます。それらはすべて失敗します。

問題なくペアリングしてファイルを送信できることを考えると、Bluetoothのペアリングと通信が機能することはわかっています。

他に何を試すことができるかわかりません。使用しましたローカルデバイスとAndroidデバイスで「sdptoolbrowse」を実行して、RFCOMMチャネルの競合が発生しないようにします。

コメント

回答

これで動作するようになりました。 Bluetoothは少し気難しいようです。他の誰かがそれが役に立つと思った場合に備えて、私は自分のステップを完全に要約しています(最初に試したものとほぼ同じですが)。これは、Nexus4およびArchLinux3.6.7-1上のAndroidJB(4.2.2)用です。 Gnome3.6のbluez4.101(gnome-bluetooth付き)。

(この手順では何の役にも立たない場合があります) AndroidのBluetoothをオフにして、USB / BluetoothアダプターをLinuxマシン(または組み込みのマシンがある場合は、hcitool devname resetを使用してリセットします)

LinuxでBluetoothアダプターを接続/オンにします。アダプターが表示されていることを確認します(gnome-bluetoothで設定できます- -Bluetoothシステムトレイアイコンが表示されます。

AndroidデバイスでBluetoothをオンにします。Androidを使用してアダプターとペアリングします(Linuxからは逆にペアリングできませんでした)。ダイアログが表示されます。キーを要求するようになります。必要なPINを入力します。Gnomeはキーを要求する通知をポップアップ表示します。前に入力したのと同じPINを入力します。この時点でAndroidデバイスとキーをペアリングする必要があります。

Linuxで、ターミナルを開き、次のように入力して、利用可能なBluetoothサービスを確認します

sdptool browse local 

すでにシリアルポートサービスを利用している場合は、それがどのチャネルであるかをメモします。そうでない場合は、サービスを追加できます:

sdptool add --channel=22 SP 

次に、rfcommを使用してこのチャンネルをリッスンします:

sudo rfcomm listen /dev/rfcomm0 22 

rfcommはブロックし、次のようなメッセージで接続をリッスンします

Waiting for connection on channel 22 

Androidに戻り、BlueTermアプリケーションを使用しました( http://pymasde.es/blueterm/ 、Google Playストアでも無料で入手できます)。ただし、同様のアプリケーションは機能するはずです。BlueTermを開き、に移動します。オプション> [デバイスの接続]:ペアリングされたアダプターを選択します。

アプリケーションが接続できたと思います。次のようなメッセージで、リスニングをブロックした端末に追加の確認が表示されます。

Waiting for connection on channel 22 Connection from 22:22:22:22:22:22 to /dev/rfcomm0 Press CTRL-C for hangup 

BlueTermアプリに入力するものはすべて、/ dev / rfcomm0に移動する必要があります。新しいターミナルを開いて次のように入力すると、入力時に内容が表示されます。

cat /dev/rfcomm0 

コメント

回答

次の手順でうまくいきました:

まず、デバイスをペアリングする必要があります。ペアリングは比較的簡単です。クライアント(話し始める)とサーバー(応答する)に電話します

前にサーバーをセットアップする必要があります:サーバー側(ルートとして):

sdptool add --channel=3 SP mknod -m 666 /dev/rfcomm0 c 216 0 rfcomm watch /dev/rfcomm0 3 /sbin/agetty rfcomm0 115200 linux 

クライアント側(ルートとして):

sdptool add --channel=3 SP rfcomm connect /dev/rfcomm0 [SERVER_ADDR] 3 

クライアントでシリアル端末を開きます:

screen /dev/rfcomm0 115200 

コメント:

クライアントで最後のコマンドrfcommconnect …を呼び出すと、デバイス/dev/rfcomm0が作成され、サーバー/dev/recomm0に関連付けられます。これは、両方の間のシリアルリンクを表します

最後のサーバーコマンド:rfcomm watch ….着信接続を「リッスン」します。接続が失われると、コマンドは新しい「リッスン」状態を再開します。

コメント

  • ismaiaが提供する回答でほぼそこに到達します。ただし、新しいbluezスタックには特別な--compatオプションが必要であることに注意する必要があります。そうしないと、SPの追加が失敗する可能性があります。 こちらをご覧ください。したがって、--compatが存在するようにsystemd / initdスタートアップ起動スクリプトを調整/修正します。

回答

Prisのコマンドを少し変更してこれを解決しました。それでもrfcomm接続のセットアップに問題がある場合は、これらを試してみてください。

sudo service bluetooth restart 

これにより、接続を設定しようとするたびに、白紙の状態から始めることができます。

rfcomm add --channel=<a_channel_#> SP 

このチャネル番号は次のようになります。現在割り当てられているチャネルとは異なります。

(オプション)チャネルを確認するには:

sdptool browse local | grep Channel 

この次のコマンドがなぜであるかわかりません必要でしたが、うまくいきました。

rfcomm release 0 

次に、着信接続をリッスンします:

rfcomm watch 0 <a_channel_#> 

注:/etc/bluetooth/rfcomm.confのbt MACアドレスですが、お使いの携帯電話のbt MACです。また、このファイルのチャネルは、a_channel _#で選択したチャネルと同じである必要があります。

これをすべて行ったら、携帯電話のdabtターミナルエミュレータですべてを確認します。

回答

さまざまなBluetoothツールを試しましたが、大変でした。 Bluetoothモジュールに接続してデータを交換するためのコマンドの正しいシーケンスを見つけるため。 rfcommとminicomを使用してみてください:

これは私の/etc/bluetooth/rfcomm.confです

rfcomm0 { # Automatically bind the device at startup bind no; # Bluetooth address of the device device 11:22:33:44:55:66; # RFCOMM channel for the connection channel 3; # Description of the connection comment "This is Device 1"s serial port."; } 

Bluetoothデバイスをスキャンします:

hcitool scan Scanning ... 20:15:12:08:62:95 HC-06 

rfcommを使用してバインド

sudo rfcomm bind 0 20:15:12:08:62:95 1 

注:バインド0はデバイス番号0(rfcomm0 )および1はチャネルです。

次に、sudoでminicomを使用し、ボーレートとポートを指定する構成を保存します。詳細については、こちらをご覧ください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です