Python 串行读取

Python Serial Read

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

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

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

有人知道这个无限循环的来源以及为什么我没有看到调制解调器的响应吗?

import time
import serial

ser = serial.Serial("/dev/ttyUSB2", 115200)

time.sleep(1)
ser.write(b'\r\n' + b'at' + b'\r\n')

time.sleep(1)
print(ser.readline())

已解决: 我认为超时有所不同(感谢 RaulG)。我开始看到 b'\r\n' 或另一种情况下的 b'at\r\n' 被返回,发现我的响应被分成多行并且似乎包含回声。

通过以下代码,我能够看到完整的响应。

代码:

import time
import serial

ser = serial.Serial(port="/dev/ttyUSB2", baudrate=115200, timeout=5)

time.sleep(0.5)
ser.write(b'at\r\n')

time.sleep(0.5)
print(ser.readline())
print(ser.readline())
print(ser.readline())

输出:

b'at\r\n'
b'\r\n'
b'OK\r\n'

首先ser.readline()命令是死循环。它一直等到输入缓冲区中有一个 \n 字符。您可以通过在 serial.Serial 对象的初始化中指定超时来避免循环(超时以秒为单位)

ser = serial.Serial('/dev/ttyUSB2',115200,timeout=2)

现在谈谈您没有从调制解调器收到任何信息的部分。这可能有不同的原因,您提供的信息无法正确回答。 首先,您的 USB 转串口适配器可能有问题。那么您可能接线不正确,或者您的调制解调器可能有电气问题或软件问题。