Seite 1 von 1

Raspberrys über UART verbinden

Verfasst: Dienstag 12. Juni 2018, 19:40
von erdmulch
Hello zusammen,

ich habe 2 Raspberrys einen Raspberry 3 und einen Raspberry Pi Zero W
der Raspberry 3 soll als Sender dienen (UART) der Raspberry Pi Zero W als Empfänger (UART)
Allerdings kommt beim Raspberry Pi Zero W nichts an.

Hier das Sender Script:

Code: Alles auswählen

#!/usr/bin/python3
import serial
ser = serial.Serial("/dev/ttyAMA0")
ser.baudrate = 9600
print("Sende UART Daten...")
ser.write(b"Hallo Welt!\n")
print("Alles OK")
ser.close()
und hier das Empfänger Script:

Code: Alles auswählen

#!/usr/bin/python3
import serial
ser = serial.Serial("/dev/ttyAMA0", timeout = 60)
ser.baudrate = 9600
daten = ser.readline()
print(daten.decode('utf8'))
ser.close()

Kann mir jemand sagen was ich falsch mache?

Re: Raspberrys über UART verbinden

Verfasst: Dienstag 12. Juni 2018, 21:05
von __deets__
Warum übergibst du einmal die baudrate, und einmal setzt du sie nachträglich? Bist du sicher das hat den gewünschten Effekt?

Und dann kennt hier natürlich auch keiner deine Verkabelung.

Re: Raspberrys über UART verbinden

Verfasst: Dienstag 12. Juni 2018, 21:44
von __blackjack__
Und die Einstellungen für `/dev/ttyAMA0` sind auch nicht uninteressant, also über welche Hardware geht das eigentlich. Beim Raspi Zero könnte das beispielsweise auch über den USB-Anschluss gehen soweit ich weiss.

Re: Raspberrys über UART verbinden

Verfasst: Mittwoch 13. Juni 2018, 17:39
von erdmulch
Hallo nochmals,

das ganze liegt nicht am Raspberry Pi Zero W welcher als Empfänger dient, sondern am Raspberry Pi 3
Der Zero wartet brav auf daten, wenn die eingestellte Timeout Zeit vorbei ist, dann wird das Programm beendet.

wenn ich den Raspberry PI Zero W vom Stromnetz trenne und am Raspberry PI 3 das Sende Script ausführe, erscheint keinerlei Fehlermeldungen.
statdessen habe ich nochmals eine Zeile hinzugefügt:

Code: Alles auswählen

#!/usr/bin/python3
import serial
ser = serial.Serial("/dev/ttyAMA0")
ser.baudrate = 9600
print("Sende UART Daten...")
ser.write(b"Hallo Welt!\n")
print(ser.write)
print("Alles OK")
ser.close()
Sende UART Daten...

als Ausgabe erscheint mir folgendes:

<bound method Serial.write of Serial<id=0x76a2e550, open=True>(port='/dev/ttyAMA0', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)>
Alles OK


Ich kann also nichts erkennen, es scheint so, als würde es ihn nicht interessieren, ob eine Kommunikation zustande kommt oder nicht

Re: Raspberrys über UART verbinden

Verfasst: Mittwoch 13. Juni 2018, 18:30
von __blackjack__
Wenn das `write()` nicht blockiert, dann sendet der die Daten auch irgendwohin oder sie werden vom Treiber gepuffert. Das `close()` läuft auch durch, oder blockiert das?

Und wieso '/dev/ttyAMA0'? Ist das richtig? Soweit ich weiss ist das beim Raspi *3* mit eingebautem BlueTooth die serielle Schnittstelle über BlueTooth. Willst Du vielleicht nicht eher '/dev/ttyS0' verwenden?

Re: Raspberrys über UART verbinden

Verfasst: Mittwoch 13. Juni 2018, 22:43
von __deets__
Er will bestimmt nicht ttyS0 verwenden weil das keine stabile serielle Verbindung erlaubt, da die clockbase vom Variablen CPU Takt abgeleitet ist.

Aber der Hinweis auf Bluetooth ist richtug, das muss mit dem entsprechenden overlay deaktiviert werden. Ich GLAUBE aber, ttyAMA0 ist auch nur da, wenn man das macht.

Re: Raspberrys über UART verbinden

Verfasst: Dienstag 19. Juni 2018, 18:10
von DeaD_EyE
Mit raspi-config kannst du Bluetooth deaktivieren. Dann versuch mal den Port /dev/ttyS0 zu verwenden.
Neustart nicht vergessen.