从 Pyserial 读取串行输出不能可靠地工作
Posted
技术标签:
【中文标题】从 Pyserial 读取串行输出不能可靠地工作【英文标题】:Reading serial output from Pyserial doesnt work reliably 【发布时间】:2016-09-27 01:30:55 【问题描述】:我在 MacOS 上使用代码攻击连接到设备,并且在 100 次中,此代码只会连接一到两次,并且在其余时间没有响应(因为没有超时)。
ser = serial.Serial(port="/dev/xyz",timeout = None, baudrate=115200, parity = serial.PARITY_NONE, bytesize = serial.EIGHTBITS, stopbits = serial.STOPBITS_ONE)
def exitSer(ser):
print("Closing")
ser.close()
atexit.register(exitSer, ser)
if ser.is_open:
time.sleep(2)
while(1):
print(ser.readline().decode("utf-8"))
能否请您告诉我如何使用 fcntl 等程序来查找该端口是否完全免费可用,以及如何在强制释放端口后将 tty 端口的标志设置为释放。
一旦这个工作正常,我必须运行这个多线程,其中每个线程运行不同的设备,期望成行输出。任何建议以防万一。
【问题讨论】:
您引用的另一个应用程序具有不同的波特率并使用 1 个停止位。你能贴出你用来从串口读取数据的代码吗? 刚刚更新了问题。感谢您的回复。 我尽量避免在串行设备上使用 readline(),因为它会在您收到换行符时首先写入一些内容。因此,如果收到其他任何内容,您将看不到它。相反,您可以使用类似: sys.stdout.write(ser.read(1)) sys.stdout.flush() 你知道你尝试过的其他工具是否向ios设备发送了一些东西吗? 是的,它能够写入、读取等。它与串行输出和输入的工作方式完全一样。我也知道,当我让我的程序运行该工具时,该工具将无法工作。 【参考方案1】:def startSerial(tty_id):
ser = serial.Serial(port = tty_id, timeout = None)
ser.close()
ser.open()
if ser.isOpen():
print(ser.portstr, ":connection successful.")
return ser
else:
return False
在 .open() 修复它之前调用 ser.close()。我测试了大约 200 次,到目前为止我还没有失望过。我现在正在多线程中对其进行测试,希望它也可以工作。
谢谢大家。
【讨论】:
以上是关于从 Pyserial 读取串行输出不能可靠地工作的主要内容,如果未能解决你的问题,请参考以下文章
仅当终端应用程序在后台打开时,使用 pyserial 从串行端口读取才有效