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を生成します。このようなことが発生したら、キュートコムのようなものを利用して接続された機器とメッセージをやり取りしたいと思います。
私のAndroidデバイスでBluetooth SPP端末(複数の端末があり、いくつかの他の端末を試しました)を開き、接続を試みます。彼らはすべて失敗しました。
正常にペアリングし、問題なくファイルを送信できることを考慮すると、Bluetoothペアリングと通信が機能していることがわかります。
私が何をもっと試すことができるかわかりません。 RFCOMMチャンネルの競合がないことを確認するために、ローカルデバイスとAndroidデバイスの両方で「sdptoolブラウザ」を使用しました。
答え1
今は仕事をしているようです。 Bluetoothは少しトリッキーなようです。他の人が役に立つと思う場合に備えて、全体のステップを見てみましょう(私が最初に試したのとほぼ同じですが)。これは、Nexus 4のAndroid JB(4.2.2)とArch Linux 3.6.7-1、Gnome 3.6のbluez 4.101(gnome-bluetoothを含む)で動作します。
(この段階は役に立たないかもしれません) AndroidでBluetoothをオフにし、LinuxコンピュータからUSB / Bluetoothアダプタを取り外します(または内蔵アダプタがある場合はhcitool devnameをリセットにリセットします)。
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
答え2
次のステップは私にとって効果的でした。
まず、デバイスをペアリングする必要があります。ペアリングは比較的簡単です。クライアント(会話開始)とサーバー(応答)に電話します。
まずサーバーを設定する必要があります。サーバー側(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
。これは、2つの間のシリアルリンクを表します。
最後のサーバーコマンドは次rfcomm watch
のとおりです。 ...着信接続を「受信」します。このコマンドは、接続が切断されると新しい「受信」ステータスを再開します。
答え3
私はPrisのコマンドを少し修正してこの問題を解決しました。 rfcomm 接続の確立にまだ問題がある場合は、この方法を試してください。
sudo service bluetooth restart
これにより、接続を確立しようとするたびに最初から再開できます。
sdptool 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ターミナルエミュレータを使用してすべてを確認しました。
答え4
さまざまな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を使用し、ボーレートとポートを指定する設定を保存します。より多くの情報を見ることができますここ。