如何让pyserial环回工作?

2 投票
1 回答
5875 浏览
提问于 2025-04-18 11:15

我正在尝试测试一个串口连接,想在连接实际会发送数据的外部设备之前先搞清楚情况。我想用pySerial的“loop://”设备,但我收不到正确的数据。我开始写了一个非常简单的程序,只是想确认我是否理解它是如何工作的。显然,我并没有理解。:)

这是我的数据“源”:

def serialDataPump():
    ser = serial.serial_for_url('loop://', timeout=1)
    testCtr = 0;
    while not bbq.closing and testCtr<10:
        ser.write(bytes("Test\n", encoding='ascii'))
        time.sleep(1)
        testCtr += 1

这是我的数据“接收器”:

def serialDataTestRcv():
    ser = serial.serial_for_url('loop://', timeout=1)
    while not bbq.closing:
        line = ser.readline()
        sys.stdout.write('received' + str(line))

这是我的测试函数 - 我使用了两个线程:

def testSerMain():
    thread1 = Thread(target = serialDataPump)
    thread2 = Thread(target = serialDataTestRcv)
    thread1.start()
    thread2.start()
    thread1.join()
    bbq.closing = True
    time.sleep(2)
    exit()

最后,这是输出结果 - 我至少收到了行结束符(EOL),因为readline()解锁了,并且循环了11次后结束,这表明泵和接收都在正常循环并正确结束。然而,正如你所看到的,它只接收到空数据加上行结束符:

>>> 
receivedb''receivedb''receivedb''receivedb''receivedb''receivedb''receivedb''receivedb''receivedb''receivedb''receivedb''
>>> 

Win 7,x64,py3.3

顺便提一下,我知道com0com这个工具 - 只是我在现在的机器上无法运行它。

1 个回答

3

我发现了问题——你必须使用同一个实例,也就是你创建的 ser = serial.serial_for_url('loop://', timeout=1),来进行接收和发送。

撰写回答