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デバイス)で「sdptool browse」を使用して、RFCOMMチャネルの競合がないことを確認しました。
私はこれを今うまく機能させているようです。 Bluetoothは少し気難しいようです。他の誰かが便利だとわかった場合に備えて、手順を完全に要約します(ただし、最初に試したものはほとんどですが)。これはAndroid JB(4.2.2)のNexus 4とArch Linux 3.6.7-1、Gnome 3.6(w/gnome-bluetooth)のbluez 4.101向けです。
(この手順では何も役に立たない場合があります)BluetoothをオンにしますAndroidオフにして、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
以下の手順は私にとってうまくいきました:
まず、デバイスをペアリングする必要があります。ペアリングは比較的簡単です。クライアント(話し始める)とサーバー(返信する)を呼び出します
前にサーバーをセットアップする必要があります:サーバー側(rootとして):
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
コメント:
クライアントで最後のコマンドrfcomm connect ...を呼び出すと、デバイス/dev/rfcomm0
が作成され、サーバーに関連付けられます/dev/recomm0
。これは両方の間のシリアルリンクを表します
最後のサーバーコマンド:rfcomm watch
....着信接続を「リッスン」します。接続が失われた場合、コマンドは新しい「リッスン」状態を再開します。
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_#で選択したチャネルと同じである必要があります。
これをすべて実行したら、携帯電話のbtターミナルエミュレータを使用してすべてをチェックしました。
私はさまざまな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
注意:bind 0はデバイス番号0(rfcomm0)を指し、1はチャネルです。
次に、minicomとSudoを使用して、ボーレートとポートを指定する構成を保存します。あなたはより多くの情報を見つけることができます ここ 。