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チャネルの競合が発生しないようにします。
コメント
- 疑問に思っている人のために以下のすべての回答が機能しない理由':BlueZ > = 5では、互換モードが必要です。ここを参照してください: raspberrypi.stackexchange.com/questions/41776/ …
回答
これで動作するようになりました。 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
コメント
- 良い答えです。 Ubuntu 16 / Bluez 5と次の情報で動作しました: bbs.archlinux.org/viewtopic.php?id=201672 。
回答
次の手順でうまくいきました:
まず、デバイスをペアリングする必要があります。ペアリングは比較的簡単です。クライアント(話し始める)とサーバー(応答する)に電話します
前にサーバーをセットアップする必要があります:サーバー側(ルートとして):
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を使用し、ボーレートとポートを指定する構成を保存します。詳細については、こちらをご覧ください。