Senden von ASCII-Befehl mit PySerial
Ich bin versucht, senden Sie die folgende ASCII-Kommando:
close1
mit PySerial, unten ist mein Versuch:
import serial
#Using pyserial Library to establish connection
#Global Variables
ser = 0
#Initialize Serial Port
def serial_connection():
COMPORT = 3
global ser
ser = serial.Serial()
ser.baudrate = 38400
ser.port = COMPORT - 1 #counter for port name starts at 0
#check to see if port is open or closed
if (ser.isOpen() == False):
print ('The Port %d is Open '%COMPORT + ser.portstr)
#timeout in seconds
ser.timeout = 10
ser.open()
else:
print ('The Port %d is closed' %COMPORT)
#call the serial_connection() function
serial_connection()
ser.write('open1\r\n')
aber als Ergebnis erhalte ich die folgende Fehlermeldung:
Traceback (most recent call last):
, line 31, in <module>
ser.write('open1\r\n')
, line 283, in write
data = to_bytes(data)
File "C:\Python34\lib\site-packages\serial\serialutil.py", line 76, in to_bytes
b.append(item) # this one handles int and str for our emulation and ints for Python 3.x
TypeError: an integer is required
Nicht sicher, wie ich in der Lage wäre zu beheben. close1 ist nur ein Beispiel für eine ASCII-Befehl, den ich senden möchten, gibt es auch status1, um zu sehen, ob meine Schleusen öffnen oder schließen, etc.
Vielen Dank im Voraus
InformationsquelleAutor Jon220 | 2015-07-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieses Problem entsteht, weil die Python-3 speichert die strings intern als unicode, sondern Python 2.x nicht. PySerial ist, erwartet man eine
bytes
oderbytearray
als parameter anwrite
. In Python 2.x den Typ string wäre gut für diese, aber in Python 3.x die Unicode-string-Typ ist und daher nicht kompatibel mit dem, was pySerialwrite
muss.Um pySerial mit Python 3, die Sie benötigen, um ein bytearray. So würde der code Aussehen muss wie folgt Aussehen statt:
Ich schlage vor, Sie dieses und bitten, eine neue Frage, wenn Sie nicht weiterkommen.
InformationsquelleAutor shuttle87