Wie verbinde ich ein serielles Raw-Terminal mit einer Bluetooth-Verbindung?

10

Ich versuche, eine Verbindung zu einer Totalstation herzustellen, die keine Bluetooth-Treiber bietet. Da ich dies aus rein diagnostischen Gründen mache, möchte ich die Rohausgabe der hergestellten seriellen Verbindung sehen.

Was muss ich tun, um alle Ausgaben einer Bluetooth-Verbindung an ein Terminal weiterzuleiten?

Brian Ballsun-Stanton
quelle
Machst du Bluetooth-> Seriell, Seriell-> Bluetooth oder bidirektional?
Stellen Sie Monica wieder her - ζ--
Totalstation Bluetooth <-> Ubuntu Bluetooth. Da die Totalstation über die serielle Standardkonfiguration über USB verfügt, wird vermutlich eine serielle Verbindung über Bluetooth hergestellt. Natürlich könnte ich mich völlig irren. Zu diesem Zeitpunkt ist die Antwort, dass ich falsch liege und das Bluetooth XYZ verwendet, völlig zulässig.
Brian Ballsun-Stanton
In Bezug auf den Zwei-Wege-Beweis habe ich es geschafft, eine leere serielle Verbindung über "Bildschirm" herzustellen, die einen Fehlerton auf dem Gerät verursacht, wenn ich eine Taste auf der Tastatur drücke. Ich vermute also, dass ich auf halbem Weg bin, ich weiß nur nicht welche Hälfte.
Brian Ballsun-Stanton
Können Sie ein schnelles Diagramm erstellen? Ich kann nicht verstehen, ob es seriell über oder Bluetooth über seriell ist und wer die Daten an wen weitergibt. Tun Sie es einfach in GIMP oder etwas und laden Sie es hier
wieder einzusetzen Monica - ζ--
Funktioniert sehr gut, aber ich habe einige Probleme mit RFCOMM. Wenn ich mich mit SCREEN verbinde, werden einige AT-Sequenzen dreimal automatisch "ATE1 E0" <RETURN> eingegeben. Aus diesem Grund wird auf der Raspi-Seite die Meldung "Anmeldung fehlgeschlagen" angezeigt. Danach kann ich mich erfolgreich anmelden und die Terminalsitzung ohne weitere Störungen verwenden.
Cody

Antworten:

5

Als Ergänzung zu Brians Antwort. Der Bildschirm funktionierte bei mir nicht und wurde sofort angezeigt[screen is terminating]

Also habe ich dieses Miniterm-Python- Skript gefunden. Die Verwendung ist ähnlich:

sudo miniterm.py /dev/rfcomm0
Aleksander Belov
quelle
12

1) Verwenden Sie hcitool scandiese Option , um die Mac-Adresse des Geräts zu ermitteln.

Das Gerät sollte mit einem bekannten Pin in den Slave-Modus versetzt werden. Wenn Sie keinen bekannten Stift verwenden, erfindet Ubuntu einen und Sie haben im Allgemeinen keine Zeit, ihn in die klobigen Menüs Ihres Messwerkzeugs einzugeben.

2) Ich bin nicht ganz sicher, ob dies notwendig ist, aber koppeln Sie das Gerät im Bluetooth-GUI-Menü.

3) in /etc/bluetooth/rfcomm.conf

rfcomm0 {
        bind no;
        device 00:07:80:44:4F:37;
        channel 1;
        comment "Serial Port";
        }

Das "Nein binden" ist wichtig, andernfalls wird versucht, automatisch zu binden, was alle möglichen Probleme für den tatsächlichen Zugriff auf das Gerät mit sich bringt (da es ziemlich wählerisch ist, wann es zugeordnet ist).

4) sudo rfcomm connect 0

Wenn Sie Fehler haben, starten Sie den Bluetooth-Dienst neu.

5) screen /dev/rfcomm0

Wenden Sie sich an Ihren Händler, um Informationen zu den auf diese Weise übertragenen seriellen Befehlen zu erhalten.

Brian Ballsun-Stanton
quelle
3
Ich bekomme "Missing dev parameter", wenn ich versuche "rfcomm connect 0"
auszuführen
Haben Sie Ihre conf-Datei korrekt bearbeitet?
Brian Ballsun-Stanton
5
Versuchen Sie sudo rfcomm connect rfcomm0 00: 07: 80: 44: 4F: 37
elopio
@ Elopia Oneliner sehr einfach. Es hat bei mir
funktioniert
10

Hier ist meine Möglichkeit, eine Verbindung zu einem HC-05-Bluetooth-Gerät herzustellen, das an mein Arduino angeschlossen ist. Es muss keine Datei wie in Brians Antwort geschrieben werden, aber die Idee ist ähnlich. Ich habe es mit einem Baud 9600 Rate Setup auf dem HC-05 Gerät getestet.

Erster Schritt: Koppeln Sie das Gerät und geben Sie die PIN ein

Ich habe versucht, das Pairing über die GUI einzurichten, aber es hat nicht funktioniert. Hier ist die Befehlszeilenmethode, die für mich funktioniert hat. Lassen Sie uns zuerst das Gerät über die Befehlszeile koppeln. Lauf :

sudo bluetoothctl

Stellen Sie sicher, dass das Bluetooth-Gerät gestartet ist:

# power on

Wir starten jetzt den Agenten, der sich "an den Pin erinnert" für rfcomm:

# agent on

Jetzt aktivieren wir den Scan-Modus, um unser Gerät zu finden und es zu koppeln:

# scan on

Nach einigen Sekunden sollte der MAC Ihres Geräts angezeigt werden. Wir werden es als nachher bezeichnen. Dann müssen Sie das Gerät nur noch wie folgt koppeln:

# pair <MAC>

Sie werden aufgefordert, eine PIN einzugeben. Diese befindet sich standardmäßig 1234auf meinem HC-05-Gerät. Sie können feststellen, dass es möglich ist, dass Ihr Gerät eine Verbindung herstellt und die Verbindung mit einer Meldung wie der folgenden trennt:

[CHG] Device 20:16:10:24:29:77 UUIDs: 00001101-0000-1000-8000-00805f9b34fb
[CHG] Device 20:16:10:24:29:77 ServicesResolved: yes
[CHG] Device 20:16:10:24:29:77 Paired: yes
Pairing successful
[CHG] Device 20:16:10:24:29:77 ServicesResolved: no
[CHG] Device 20:16:10:24:29:77 Connected: no

aber es ist kein Problem. Sie müssen keine Verbindung herstellen, können also jetzt bluetoothctldurch Eingabe beenden Ctrl + D.

Stellen Sie eine verwendbare Datei bereit /dev/rfcomm0

Stellen Sie zunächst sicher, dass Sie zuvor keinen Befehl rfcomm ausgeführt haben. Selbst wenn Sie mit Ctrl+Cdem Programm schließen, wird es im Hintergrund ausgeführt.

sudo killall rfcomm

Jetzt kannst du rennen

sudo rfcomm connect /dev/rfcomm0 20:16:10:24:29:77 1 &

Beachten Sie, dass beim Versuch, auf die Eingabe von rfcom zu schreiben, nichts passiert ist. Sie müssen ein anderes Programm verwenden.

Dritter und letzter Schritt: Schreiben Sie in die /dev/rfcomm0

Es gibt verschiedene Möglichkeiten, in die Datei zu schreiben. Beachten Sie jedoch, dass alle Vorgehensweisen root beinhalten. Ich beschreibe hier mehrere Programme, die dies können (so dass Sie je nach Bedarf oder Installation auf Ihrem System auswählen können). Wenn Sie vergessen, das Programm als root auszuführen, liegt möglicherweise ein Fehler vor:

stty: /dev/rfcomm0: Device or resource busy

Erste Option: Verbinden mit screen

Bildschirm ist ein sehr leistungsfähiges Werkzeug. Sie können es installieren (es ist immer noch nützlich), indem Sie Folgendes verwenden:

sudo apt-get install screen

und dann laufen

sudo screen /dev/rfcomm0

Wenn Sie vergessen, es als root auszuführen, erhalten Sie eine Fehlermeldung wie bei Aleksander:

[screen is terminating]

Geben Sie zum Beenden "(STRG + A) +: Beenden" ein.

Zweite Option: Verbinden mit minicom

Es installieren

sudo apt-get install minicom

und dann laufen

sudo minicom -D /dev/rfcomm0

Wenn Sie vergessen, es als root auszuführen, wird ein Fehler wie angezeigt

minicom: cannot open /dev/rfcomm0: Device or resource busy

Geben Sie zum Beenden "Strg + A X" ein.

Dritte Option: Python Script Miniterm

Laden Sie dieses Skript herunter und führen Sie Folgendes aus:

chmod +x miniterm.py
sudo ./miniterm.py /dev/rfcomm0

Schreiben Sie direkt in die Datei

Führen Sie zunächst den folgenden Befehl aus (9600 ist die Baudrate):

sudo stty -F /dev/rfcomm0 cs8 9600 ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts 

Jetzt können Sie in diese Datei wie in eine klassische Datei schreiben:

sudo su -c "echo 'message' > /dev/rfcomm0"

und theoretisch daraus lesen mit

sudo tail -f /dev/rfcomm0

Aber ich weiß nicht, dass Lesen nicht funktioniert, wenn einer von euch eine Idee hat ...

tobiasBora
quelle
/def/rfcomm0sollte sein/dev/rfcomm0
stewSquared