Python Serial Read



从USB调制解调器读取串行数据有问题,找不到有相同问题的人。

使用下面的代码,我可以成功地写入串行端口,但是当我读取时,终端只是坐在那里接受输入,但对它不做任何事情。我可以输入任何我喜欢的东西,然后输入回车,但是它们什么都不做。这就像我创建了一个无限输入循环,但我不知道这是怎么发生的。最后我不得不按ctrl -c退出程序。

我尝试过其他方法,例如读取指定数量的字节或读入变量并遍历它,但关键的是,调用inWaiting()或in_waiting返回0,因此尽管写入命令被调制解调器成功接受,但显然没有什么可读的。

谁知道这个无限循环是从哪里来的,为什么我看不到我的调制解调器的响应?
import time
import serial
ser = serial.Serial("/dev/ttyUSB2", 115200)
time.sleep(1)
ser.write(b'rn' + b'at' + b'rn')
time.sleep(1)
print(ser.readline())

解决:我认为暂停造成了差异(感谢劳尔)。我开始看到b'rn'或在另一种情况下b'atrn'被返回,并发现我的响应被分成多行,似乎包括一个echo。

使用下面的代码,我可以看到完整的响应。

代码:

import time
import serial
ser = serial.Serial(port="/dev/ttyUSB2", baudrate=115200, timeout=5)
time.sleep(0.5)
ser.write(b'atrn')
time.sleep(0.5)
print(ser.readline())
print(ser.readline())
print(ser.readline())

输出:

b'atrn'
b'rn'
b'OKrn'

首先,ser.readline()命令是无限循环。它等待,直到在输入缓冲区中有一个n字符。您可以通过在serial.Serial对象的初始化中指定超时(timeout in seconds)

来避免循环。
ser = serial.Serial('/dev/ttyUSB2',115200,timeout=2)

现在到调制解调器没有接收到任何东西的部分。这可能有不同的原因,无法由您提供的信息正确回答。首先,你的usb转串行适配器可能有问题。那么你可能是把什么东西接错了,或者你的调制解调器可能有电气问题或软件问题。

最新更新