Raspberrys über UART verbinden

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
erdmulch
User
Beiträge: 230
Registriert: Samstag 17. Juli 2010, 19:50

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?
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
erdmulch
User
Beiträge: 230
Registriert: Samstag 17. Juli 2010, 19:50

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
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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?
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1012
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Mit raspi-config kannst du Bluetooth deaktivieren. Dann versuch mal den Port /dev/ttyS0 zu verwenden.
Neustart nicht vergessen.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten