python - test - pySerial write() no tomarĂ¡ mi cadena
serial write python 3 (3)
Usando Python 3.3 y pySerial para comunicaciones seriales.
Estoy tratando de escribir un comando en mi COM PORT pero el método de escritura no toma mi cadena. (La mayoría del código es de aquí. Ejemplos completos de uso del paquete pySerial.
¿Que esta pasando?
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()
El error está en ser.write ("% 01 # RDD0010000107 ** / r") donde se obtiene. Traceback es como estos datos = to_bytes (data) b.append (item) TypeError: se requiere un entero.
Has encontrado la causa raíz. Alternativamente haz esto:
ser.write(bytes(b''your_commands''))
Resulta que la cadena tenía que ser convertida en un bytearray y para hacer esto edité el código para
ser.write("%01#RDD0010000107**/r".encode())
Esto solucionó el problema.
Tuve el mismo mensaje de error "TypeError: se requiere un número entero" al intentar escribir. Gracias, el .encode () lo resolvió por mí. Estoy ejecutando Python 3.4 en un Dell D530 con Windows XP Pro de 32 bits.
Estoy omitiendo la configuración de puerto com aquí:
>>>import serial
>>>ser = serial.Serial(5)
>>>ser.close()
>>>ser.open()
>>>ser.write("1".encode())
1
>>>