Python - 从串行端口数据逐行读取到列表中(如果可用)



我的目标是编写一个代码,该代码将无限期地侦听和读取串行端口,该串行端口每隔几秒钟就会产生此输出

串口输出:

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

我希望将数据附加到这样的列表中,python 应该输出

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

我在许多其他代码中尝试了此代码,但没有任何效果,我一直没有得到任何输出编辑 - 下面的代码给了我这个输出

'''[['abcd::', 'abcd::', 'abcd::', 'abcd::', 'abcd::']] #or
[['abcd::abcd:0:0:c9n', '2406n', '14n', '-7n']] # and so on, different output for each iteration''' 
#[['aaaa::c30c:0:0:c9n', '2462n', '11n', '-9n', '242n', '-45n', '106n']] 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将继续读取数据,直到读取终止符(换行符)。 请尝试: read .

更新:

使用picocom -b 115200 /dev/ttyUSB0或腻子(串行型号)检测端口和波特率是否正确。我的两个问题中有两个不同的端口。如果打开错误端口,read()将继续等待,直到读取一个字节。喜欢这个:

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.

如果在控制台中键入此代码,控制台将不会像这样输出:

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

我们需要为读取添加超时来修复它。
你可以试试这个:

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.

相关内容

最新更新