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 № 1Acontece 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
>>>