Hallo zusammen,
ich lasse einen Arduino mit einem Raspberry Pi 3B über eine serielle
Schnittstelle über USB miteinander kommunizieren.
Jetzt würde ich gerne ein XBee über die GPIOs mit dem RPi verbinden,
damit über diese Schnittstelle Daten an einen weiteren Arduino
übertragen werden können.
Kann ich beide Schnittstellen (USB und UART) gleichzeitig nutzen, oder
schließt eine die andere aus?
Liebe Grüße und Danke im voraus!
Timo S. schrieb:> Kann ich beide Schnittstellen (USB und UART) gleichzeitig nutzen,
Natürlich.
> oder schließt eine die andere aus?
Nein.
Täte sie es, könntest Du die UART auch nicht benutzen, wenn
Netzwerkaktivität stattfindet, oder ein USB-Stick angeschlossen ist.
Du kannst auch mehrere USB-Seriell-Adapter an Deinem Raspberry Pi
betreiben.
bingo schrieb:> Die echten seriellen Schnittstellen liegen auf /dev/ttySx und die> virtuellen seriellen Schnittstellen auf /dev/ttyUSBx
Bei meinem raspi zeroW heisst die echte /dev/ttyAMA0, warum auch immer.
(Raspian jessie)
Die virtuellen USB können auch /dev/ttyACMx heissen, je nachdem, wie
sich der Converter bei USB anmeldet.
bingo schrieb:> Die echten seriellen Schnittstellen liegen auf /dev/ttySx und die> virtuellen seriellen Schnittstellen auf /dev/ttyUSBx
Ui, das ist aber eine gewagte Aussage. Unter Linux können die auch auf
ttyAMAx liegen, oder ttyACMx. Gihbt bestimmt noch andere Varianten.
S. R. schrieb:> Du hast die falsche Datei geöffnet.> Schau nach, wie sie bei dir tatsächlich heißt. Ein "dmesg | grep tty"> sollte dich auf den richtigen Weg führen.
> [ 0.289215] 3f215040.uart: ttyS0 at MMIO 0x3f215040 (irq = 59,> base_baud = 31250000) is a 16550> [ 0.841760] 3f201000.uart: ttyAMA0 at MMIO 0x3f201000 (irq = 87,> base_baud = 0) is a PL011 rev2
Es gibt also offensichtlich zwei serielle Schnittstellen, /dev/ttyS0 und
/dev/ttyAMA0.
> Beim RPi wird doch ttyAMA0 durch Bluetooth belegt... Wenn ich diesen> Port öffnen will, kommt:SerialException: Port is already open
Gut, dann ist deine gewünschte Schnittstelle wohl /dev/ttyS0.
> da wird ausgegeben:> crw-rw---- 1 root dialout 204, 64 Jan 15 10:17 /dev/ttyAMA0> crw-rw---- 1 root tty 4, 64 Jan 15 10:17 /dev/ttyS0
Das ist eine Bestätigung dessen, was der Kernel dir oben schrieb.
> Daraufhin habe ich nochmal versucht einen Port über ttyS0 zu öffnen.> folgende Fehlermeldung:> SerialException: could not open port /dev/ttyS0: [Errno 13] Permission> denied: "/dev/ttyS0"
Deine erste Fehlermeldung war demnach irreführend.
"Kann ich nicht öffnen" ist ein anderes Problem als "gibt es nicht".
> Nach einigen Recherchen fand ich raus das der User (pi) der gruppe> dialout zugehören muss.
Du hast vermutlich kurz Google angeworfen, oder? ;-)
Hättest du die von dir gerade gepostete Ausgabe angeschaut, hättest du
gesehen, dass der Benutzer in der Gruppe "tty" sein muss, um ttyS0
anzusprechen, und in der Gruppe "dialout" sein muss, um ttyAMA0
anzusprechen.
> Pi ist jedoch schon in der Gruppe dialout.
Dann füge ihn mal der Gruppe "tty" hinzu und starte neu.
Das sollte mit "sudo adduser pi tty; sudo reboot" funktionieren.
S. R. schrieb:> Es gibt also offensichtlich zwei serielle Schnittstellen, /dev/ttyS0 und> /dev/ttyAMA0.
Ja, ttyAMA0 geht auf Bluetooth und ttyS0 auf den GPIO-Header.
Das ist seit RPi3 so.
Bei älterem RPis war ttyAMA0 auf dem GPIO-Header.
S. R. schrieb:> Dann füge ihn mal der Gruppe "tty" hinzu und starte neu.> Das sollte mit "sudo adduser pi tty; sudo reboot" funktionieren.
No!
Entscheidend für den Zugriff auf die Serielle ist die Gruppe dialout.
Es ist auch kein Reboot erforderlich.
Es reicht völlig, sich einmal aus und wieder einzuloggen.
Die Serielle auf dem GPIO-Header ist per default belegt.
Beim Start durch die Kernel-Messages und im Betrieb durch einen
getty-Prozess.
Wenn man die selbst nutzen will:
Beitrag "Re: Raspberry Pi: USB und GPIO: Serielle Schnittstellen gleichzeitig nutzen"
und ggf ttyAMA0 gegen ttyS0 erstetzen..
Harry L. schrieb:> S. R. schrieb:>> Dann füge ihn mal der Gruppe "tty" hinzu und starte neu.>> Das sollte mit "sudo adduser pi tty; sudo reboot" funktionieren.>> No!> Entscheidend für den Zugriff auf die Serielle ist die Gruppe dialout.
Die oben gepostete Ausgabe von "ls" sagt das Gegenteil.
Harry L. schrieb:> Es reicht völlig, sich einmal aus und wieder einzuloggen.
Stimmt, aber ein Reboot funktioniert ebenfalls und ist für einen
unbedarften Anfänger einfacher.
Harry L. schrieb:> Beim Start durch die Kernel-Messages und im Betrieb durch einen> getty-Prozess.
Nutzen aktuelle Raspberry-Images nicht systemd? Da gibt es (zumindest
auf meinem Debian) kein /etc/inittab mehr. Aber ja, mit dem getty hast
du natürlich recht. Warten wir mal ab, was Jobst sagt, denn um dessen
System geht's ja.
Ich habs jetzt hinbekommen!
Habe die Schnittstelle nach der Anleitung von der Netzmafia
freigeschalten.
http://www.netzmafia.de/skripten/hardware/RasPi/RasPi_Serial.html
Da wird auch explizit erklärt, wie man es mit einem Pi3 hinbekommt.
(etc/inittab gibt es nicht mehr)
Vielen Dank für eure Geduld und eure Hilfe, alleine hätte ich das nie
hinbekommen.
Liebe Grüße,
Timo