/ / pySerial write () não aceita minha string - python, pyserial

pySerial write () não aceita minha string - python, pyserial

Usando o Python 3.3 e pySerial para comunicação serial.

Eu estou tentando escrever um comando para minha porta COM, mas o método de gravação não vai levar minha seqüência de caracteres. (A maior parte do código é daqui Exemplos completos de uso do pacote pySerial

O que está acontecendo?

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"s wait one second before reading output (let"s give device time to answer)
time.sleep(1)
while ser.inWaiting() > 0:
out += ser.read(40)

if out != "":
print(">>" + out)


ser.close()

Erro está em ser.write ("% 01 # RDD0010000107 ** r") onde fica Traceback é assim dados = to_bytes (dados) b.append (item) TypeError: um inteiro é requerido.

Respostas:

27 para resposta № 1

Acontece que a string precisava ser transformada em um bytearray e para isso eu editei o código para

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

Isso resolveu o problema


6 para resposta № 2

Você encontrou a causa raiz. Alternadamente, faça assim:

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

1 para resposta № 3

Eu tive a mesma mensagem de erro "TypeError: an integer is required" ao tentar gravar. Obrigado, o .encode () resolveu para mim. Estou executando o python 3.4 em um Dell D530 executando o Windows XP Pro de 32 bits.

Estou omitindo as configurações da porta aqui:

>>>import serial

>>>ser = serial.Serial(5)

>>>ser.close()

>>>ser.open()

>>>ser.write("1".encode())

1

>>>