Seite 1 von 1
Python Serial
Verfasst: Montag 20. Juli 2015, 16:15
von Weltbesiedler
Hallo,
in diversen Anleitungen:
http://www.instructables.com/id/Interfa ... /?ALLSTEPS
kann man der Funktion "serial.write()" anscheinend einen String übergeben. Bei meiner installierten pySerial Version (2.7) erscheint dann der Error: "An integer is required"
Re: Python Serial
Verfasst: Montag 20. Juli 2015, 16:47
von BlackJack
@Weltbesiedler: Dann hast Du vermutlich keinen (Byte)string übergeben. Zeig doch mal den Code und den kompletten Traceback, damit man nicht raten muss.
Re: Python Serial
Verfasst: Montag 20. Juli 2015, 17:15
von Weltbesiedler
Code: Alles auswählen
import serial
ser = serial.Serial(port='COM4', baudrate=9600, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, timeout=2)
try:
ser.isOpen()
except:
exit()
try:
ser.write(str(chr(13)))
except Exception as e:
print(e)
Re: Python Serial
Verfasst: Montag 20. Juli 2015, 17:23
von BlackJack
@Weltbesiedler: Die Zeilen 4 bis 7 sind überflüssig denn erstens ist die serielle Verbindung an der Stelle garantiert offen, denn sonst hätte es in Zeile 3 schon eine Ausnahme gegeben und dann ist dieses nackte ``except`` nicht gut, und was für eine Ausnahme sollte denn da überhaupt auftreten? Und selbst wenn eine Auftritt bricht das Programm damit ja ab, also ist die ”Fehlerbehandlung” mit dem `exit()` unnötig.
Auch die zweite ”Fehlerbehandlung” ist nicht angemessen, denn das einzige was die tut ist wichtige Information wegwerfen.
Es sieht so aus als wenn Du Python 3 verwendest. Da sind Zeichenketten echte Unicode-Zeichenketten, über die serielle Verbindung kann man aber nur Bytes versenden und empfangen. Du musst also den entsprechenden Bytewert als `bytes`-Objekt statt als `str`-Objekt dort schreiben. Der `str()`-Aufruf wäre an der Stelle übrigens überflüssig, denn `chr()` liefert ja schon ein Objekt vom Typ `str`. Statt einer Zahl und zwei Funktionsaufrufen würde man da eher einen literalen Wert verwenden: b'\x0d'
Re: Python Serial
Verfasst: Montag 20. Juli 2015, 17:33
von Weltbesiedler
würde man da eher einen literalen Wert verwenden: b'\x0d'
Wie kommt man auf den Wert?
Re: Python Serial
Verfasst: Montag 20. Juli 2015, 18:13
von Dav1d
Code: Alles auswählen
In [1]: hex(13)
Out[1]: '0xd'
In [2]: chr(13)
Out[2]: '\r'
In [3]: ord(chr(13))
Out[3]: 13
In [4]: hex(ord(chr(13)))
Out[4]: '0xd'
In [5]: '\x0d'
Out[5]: '\r'