Ответ 1
Оказывается, что строка должна быть превращена в bytearray, и для этого я изменил код на
ser.write("%01#RDD0010000107**\r".encode())
Это позволило решить проблему
Использование Python 3.3 и pySerial для последовательной связи.
Я пытаюсь написать команду для моего COM-порта, но метод write не будет принимать мою строку. (Большая часть кода отсюда Полные примеры использования пакета pySerial
Что происходит?
import time
import serial
ser = serial.Serial(
port='\\\\.\\COM4',
baudrate=115200,
parity=serial.PARITY_ODD,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS
)
if ser.isOpen():
ser.close()
ser.open()
ser.isOpen()
ser.write("%01#RDD0010000107**\r")
out = ''
# let wait one second before reading output (let give device time to answer)
time.sleep(1)
while ser.inWaiting() > 0:
out += ser.read(40)
if out != '':
print(">>" + out)
ser.close()
Ошибка в ser.write( "% 01 # RDD0010000107 **\r" ), где он получает Traceback выглядит так data = to_bytes (данные) b.append(пункт) TypeError: требуется целое число.
Оказывается, что строка должна быть превращена в bytearray, и для этого я изменил код на
ser.write("%01#RDD0010000107**\r".encode())
Это позволило решить проблему
Вы нашли основную причину. В качестве альтернативы выполните следующие действия:
ser.write(bytes(b'your_commands'))
При попытке записи у меня было такое же сообщение "TypeError: целое число". Спасибо,.encode() решил это для меня. Я запускаю python 3.4 на Dell D530 с 32-разрядной версией Windows XP Pro.
Я запрещаю настройки COM-порта здесь:
>>>import serial
>>>ser = serial.Serial(5)
>>>ser.close()
>>>ser.open()
>>>ser.write("1".encode())
1
>>>