Подтвердить что ты не робот

PySerial write() не будет принимать мою строку

Использование 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: требуется целое число.

4b9b3361

Ответ 1

Оказывается, что строка должна быть превращена в bytearray, и для этого я изменил код на

ser.write("%01#RDD0010000107**\r".encode())

Это позволило решить проблему

Ответ 2

Вы нашли основную причину. В качестве альтернативы выполните следующие действия:

ser.write(bytes(b'your_commands'))

Ответ 3

При попытке записи у меня было такое же сообщение "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

>>>