Testen der seriellen Schnittstellen (UART)

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
Daniel7
User
Beiträge: 8
Registriert: Mittwoch 24. Juni 2015, 19:53

Hallo,
der folgende Programmcode ist aus dem Internet und soll die Funktionstüchtigkeit der seriellen Schnittstelle testen. Dabei wird der GPIO-Pin 14 (TXD0) mit dem GPIO-Pin 15 (RXD0) "kurzgeschlossen". Vorab habe ich zudem die serielle Schnittstelle freigeschalten.

Code: Alles auswählen

import serial

port = serial.Serial("/dev/ttyAMA0", baudrate=115200, timeout=3.0)

while True:
    port.write("\r\nSay something:")
    rcv = port.read(10)
    port.write("\r\nYou sent:" + repr(rcv))
QUELLE: http://elinux.org/Serial_port_programming

Denoch wird folgende Fehlermeldung angezeigt

Code: Alles auswählen

Traceback (most recent call last):
  File "/home/pi/Desktop/7.py", line 6, in <module>
    port.write("\r\nSay something:")
  File "/usr/lib/python3/dist-packages/serial/serialposix.py", line 471, in write
    n = os.write(self.fd, d)
TypeError: 'str' does not support the buffer interface
MfG
Daniel
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@Daniel7: Du kannst nur Bytes über eine Schnittstelle übertragen, nicht Strings. Du mußt also Deinen String encodieren. Z.B. so:

Code: Alles auswählen

port.write("\r\nYou sent: {0:!r}".format(rcv).encode('utf-8'))
Daniel7
User
Beiträge: 8
Registriert: Mittwoch 24. Juni 2015, 19:53

@Sirius3: Vielen Dank für die schnelle Antwort!
Habe jetzt das Programm geändert, dennoch wird eine Fehlermeldung (diesmal eine andere) ausgegeben.

Code: Alles auswählen

import serial
 
port = serial.Serial("/dev/ttyAMA0", baudrate=115200, timeout=3.0)
 
while True:
    port.write("\r\nSay something:" .format(rcv).encode('utf-8'))
    rcv = port.read(10)
    port.write("\r\nYou sent: {0:!r}".format(rcv).encode('utf-8'))
Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "/home/pi/Desktop/7.py", line 6, in <module>
    port.write("\r\nSay something:".format(rcv).encode('utf-8'))
NameError: name 'rcv' is not defined
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@Daniel7: Programmieren lernt man nicht durch raten, Du mußt auch verstehen was Du schreibst.
Antworten