python - Python: legge i dati della porta seriale riga per riga in un elenco quando disponibile




1 Answers

readline continuerà a leggere i dati fino a leggere un terminatore (nuova riga). per favore prova: read

AGGIORNAMENTO:

utilizzare picocom -b 115200 /dev/ttyUSB0 o putty (modello seriale) per rilevare la porta e la velocità di trasmissione è corretta. Ho due porte diverse nelle tue due domande. Se la porta di errore è aperta, read() continuerà ad aspettare fino a leggere un byte. come questo:

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.

se si digita questo codice in console, la console non verrà emessa in questo modo:

>>> import serial
>>> ser = serial.Serial()
>>> ser.port = 'COM1'
>>> ser.open()
>>> ser.read()
_

abbiamo bisogno di aggiungere il timeout per leggere per risolverlo.
puoi provare questo:

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.

Sto puntando a scrivere un codice che sarà ascoltato e letto indefinitamente da una porta seriale che produrrà questa uscita ogni pochi secondi

uscita porta seriale:

aaaa::abcd:0:0:0
//printf("%d\n",data[0]);
2387
//printf("%d\n",data[1]);
14
-9
244
-44
108

Voglio che i dati vengano aggiunti in una lista come questa, output ipotizzato da python

[abcd::abcd:0:0:0, 2387, 14, -9, 244, -44, 108]

Ho provato questo codice tra molti altri, ma niente ha funzionato, continuo a non ricevere alcun output EDIT- il codice qui sotto mi dà questo risultato

'''[['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()



Related

python serial-port