Ich versuche, eine virtuelle serielle Schnittstelle über einen USB-Bluetooth-Adapter unter Linux einzurichten und über ein Android-Gerät eine Nachricht an sie zu senden. Ich bin auf Kernel 3.6. Ich kann das Gerät mithilfe von Gnome-Bluetooth erfolgreich koppeln und auch Dateien an das Gerät senden.
Um die serielle Schnittstelle einzurichten, füge ich meinem Adapter zuerst einen Kanal mit einem SP-Profil hinzu:
sdptool add --channel=22 SP
Dann rufe ich „listen“ mit rfcomm auf:
rfcomm listen /dev/rfcomm0 22
die blockiert auf
Waiting for connection on channel 22
Anscheinend erstellt rfcomm /dev/rfcomm0 bei einer erfolgreichen Verbindung. Sobald das passiert, möchte ich so etwas wie cutecom verwenden, um Nachrichten an das verbundene Gerät hin und her zu senden.
Auf meinem Android-Gerät öffne ich ein Bluetooth-SPP-Terminal (es gibt mehrere da draußen, ich habe ein paar verschiedene ausprobiert) und versuche, eine Verbindung herzustellen. Sie alle scheitern.
Da ich erfolgreich koppeln und Dateien ohne Probleme senden kann, weiß ich, dass die Bluetooth-Kopplung und -Kommunikation funktioniert.
Ich bin mir nicht sicher, was ich sonst noch versuchen kann. Ich habe „sdptool browse“ auf meinem lokalen Gerät und dem Android-Gerät verwendet, um sicherzustellen, dass es keine RFCOMM-Kanalkonflikte gibt.
Akzeptierte Antwort:
Ich scheine das jetzt zum Laufen gebracht zu haben. Bluetooth scheint ein bisschen pingelig. Ich fasse meine Schritte vollständig zusammen, falls jemand anderes es nützlich findet (obwohl es so ziemlich das ist, was ich anfangs versucht habe). Dies ist für Android JB (4.2.2) auf einem Nexus 4 und Arch Linux 3.6.7-1, mit bluez 4.101 auf Gnome 3.6 (mit gnome-bluetooth).
(dieser Schritt kann nichts Nützliches bewirken) Schalten Sie Bluetooth auf Android aus und trennen Sie Ihren USB-/Bluetooth-Adapter von Ihrem Linux-Rechner (oder wenn Sie einen eingebauten haben, setzen Sie ihn mit hcitool devname reset zurück)
Verbinden/schalten Sie Ihren Bluetooth-Adapter unter Linux ein. Stellen Sie sicher, dass Ihr Adapter sichtbar ist (kann in Gnome-Bluetooth eingestellt werden – Sie sollten ein Bluetooth-Symbol in der Taskleiste sehen).
Schalten Sie Bluetooth auf Ihrem Android-Gerät ein. Verwenden Sie Android zum Koppeln mit dem Adapter (ich konnte von Linux aus nicht umgekehrt koppeln). Es erscheint ein Dialog, in dem Sie nach einem Schlüssel gefragt werden. Geben Sie eine beliebige PIN ein. Gnome sollte eine Benachrichtigung anzeigen, in der Sie nach einem Schlüssel gefragt werden. Geben Sie dieselbe PIN ein, die Sie zuvor eingegeben haben. Ihr Android-Gerät und der Schlüssel sollten jetzt gekoppelt sein.
Öffnen Sie unter Linux ein Terminal und prüfen Sie, welche Bluetooth-Dienste verfügbar sind, indem Sie
eingebensdptool browse local
Wenn Sie bereits einen Dienst für serielle Anschlüsse haben, notieren Sie sich, um welchen Kanal es sich handelt. Wenn nicht, können Sie den Dienst hinzufügen:
sdptool add --channel=22 SP
Hören Sie nun auf diesem Kanal mit rfcomm:
sudo rfcomm listen /dev/rfcomm0 22
rfcomm blockiert und wartet auf eine Verbindung mit einer Nachricht wie
Waiting for connection on channel 22
Zurück auf Android habe ich die BlueTerm-Anwendung (http://pymasde.es/blueterm/, auch kostenlos im Google Play Store erhältlich) verwendet, obwohl jede ähnliche Anwendung funktionieren sollte. Öffnen Sie BlueTerm, gehen Sie zu Optionen> Gerät verbinden:Wählen Sie den gekoppelten Adapter aus.
Siehe auch:Freebsd – Wie starte ich FreeBSD im Konsolenmodus?Hoffentlich konnte die Anwendung eine Verbindung herstellen. Sie sehen eine zusätzliche Bestätigung in dem Terminal, in dem Sie das Abhören blockiert haben, mit einer Nachricht wie:
Waiting for connection on channel 22
Connection from 22:22:22:22:22:22 to /dev/rfcomm0
Press CTRL-C for hangup
Alles, was Sie in die BlueTerm-App eingeben, sollte zu /dev/rfcomm0 gehen. Sie können sehen, wie Dinge angezeigt werden, während Sie tippen, indem Sie ein neues Terminal öffnen und so etwas tun:
cat /dev/rfcomm0