read - proyectos con python y arduino
Python: lee datos del puerto serie línea por línea en una lista cuando esté disponible (1)
Me propongo escribir un código que estará indefinidamente escuchando y leyendo desde un puerto en serie que tendrá esta salida producida cada pocos segundos
salida de puerto serie:
aaaa::abcd:0:0:0
//printf("%d/n",data[0]);
2387
//printf("%d/n",data[1]);
14
-9
244
-44
108
Quiero que los datos se anexen en una lista como esta, supuestamente python
[abcd::abcd:0:0:0, 2387, 14, -9, 244, -44, 108]
Probé este código entre muchos otros, pero nada funcionó, sigo sin obtener ninguna salida EDITAR - el siguiente código me da esta salida
''''''[[''abcd::'', ''abcd::'', ''abcd::'', ''abcd::'', ''abcd::'']] #or
[[''abcd::abcd:0:0:c9/n'', ''2406/n'', ''14/n'', ''-7/n'']] # and so on, different output for each iteration''''''
#[[''aaaa::c30c:0:0:c9/n'', ''2462/n'', ''11/n'', ''-9/n'', ''242/n'', ''-45/n'', ''106/n'']] apparently it worked only once.
ser = serial.Serial(''/dev/ttyUSB1'',115200, timeout=10)
print ser.name
while True:
data = []
data.append(ser.readlines())
print data
# further processing
# send the data somewhere else etc
print data
ser.close()
readline
seguirá leyendo datos hasta leer un terminador (nueva línea). por favor intente: read
.
ACTUALIZADO:
use picocom -b 115200 /dev/ttyUSB0
o masilla (modelo en serie) para detectar el puerto y la velocidad en baudios es correcta. Tengo dos puertos diferentes en sus dos preguntas. Si abre el puerto de error, read()
seguirá esperando hasta leer un byte. Me gusta esto:
import serial
# windows 7
ser = serial.Serial()
ser.port = ''COM1''
ser.open()
ser.read() # COM1 has no data, read keep waiting until read one byte.
si escribe este código en la consola, la consola no tendrá un resultado como este:
>>> import serial >>> ser = serial.Serial() >>> ser.port = ''COM1'' >>> ser.open() >>> ser.read() _
necesitamos agregar tiempo de espera para leer para solucionarlo.
puedes probar esto:
import serial
import time
z1baudrate = 115200
z1port = ''/dev/ttyUSB0'' # set the correct port before run it
z1serial = serial.Serial(port=z1port, baudrate=z1baudrate)
z1serial.timeout = 2 # set read timeout
# print z1serial # debug serial.
print z1serial.is_open # True for opened
if z1serial.is_open:
while True:
size = z1serial.inWaiting()
if size:
data = z1serial.read(size)
print data
else:
print ''no data''
time.sleep(1)
else:
print ''z1serial not open''
# z1serial.close() # close z1serial if z1serial is open.