我试图一次从两个串口读取。每个连接的设备都会吐出一行数据。我将每个端口的数据作为列表读取,然后连接列表并将其打印为一行。
如果我单独读取每个端口,则数据更新正常。但是第二个我尝试从两者读取,它滞后并且数据在打印输出中停止变化。时间戳更新正常,但数据本身就开始滞后。
以下是我的代码,我应该做某种线程吗?我正在阅读Arduino和Teensy。
import serial
import time
serA = serial.Serial('/dev/arduino', 230400)
serT = serial.Serial('/dev/teensy', 9600)
while 1 :
timestamp = "%f" % time.time()
print(timestamp)
arduino = serA.readline().rstrip('\n')
data_listA = arduino.split('$')
teensy = serT.readline().rstrip('\n')
data_listT = teensy.split('$')
data_list = data_listA + data_listT
print(data_list)
答案 0 :(得分:1)
在尝试阅读之前,只需检查您的串口是否有要读取的字节...
while 1 :
timestamp = "%f" % time.time()
print(timestamp)
if serA.inWaiting(): # only read if there is something waiting to be read
arduino = serA.readline().rstrip('\n')
data_listA = arduino.split('$')
print("GOT ARDUINO:",data_listA)
if serB.inWaiting():
teensy = serT.readline().rstrip('\n')
data_listT = teensy.split('$')
print("GOT TEENSY:",data_listT)
答案 1 :(得分:0)
遗憾的是,使用inwaiting()
并不适用于我。我最终不得不使用线程。可能遇到我的问题的人的基本示例如下所示。
import serial
import Queue
import threading
queue = Queue.Queue(1000)
serA = serial.Serial('/dev/arduino', 230400)
serT = serial.Serial('/dev/teensy', 9600)
def serial_read(s):
while 1:
line = s.readline()
queue.put(line)
threadA = threading.Thread(target=serial_read, args=(serA,),).start()
threadT = threading.Thread(target=serial_read, args=(serT,),).start()
while 1:
line = queue.get(True, 1)
print line
我的代码基于this问题的最后一个答案。