尝试一次读取两个串行端口

时间:2016-08-09 23:27:14

标签: python

我试图一次从两个串口读取。每个连接的设备都会吐出一行数据。我将每个端口的数据作为列表读取,然后连接列表并将其打印为一行。

如果我单独读取每个端口,则数据更新正常。但是第二个我尝试从两者读取,它滞后并且数据在打印输出中停止变化。时间戳更新正常,但数据本身就开始滞后。

以下是我的代码,我应该做某种线程吗?我正在阅读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)

2 个答案:

答案 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问题的最后一个答案。