Pyserial: readline()正在阻塞,尽管定义了timeout



我在pyserial的readline()中有一个问题。我的代码是:

import serial
uart = serial.Serial(port='/dev/ttyS0', baudrate=9600, timeout=3)
data = uart.readline().decode()
print(data)
uart.close()

我正在接收来自微控制器的数据。问题是,如果没有数据从mc发送,程序将"永远"等待,尽管我定义了3秒的超时时间。我做错了什么?

好了,我找到解决办法了

问题是,树莓派3和4使用"miniuart";作为主UART, Raspberry Pi 1和2使用"pl011"。您可以在这里查看详细信息:https://www.raspberrypi.org/documentation/configuration/uart.md

要使超时中断工作,您必须更改"PL011"UART0。默认情况下,UART0 (GPIO 14和15)设置为"miniUART"one_answers";PL011"用于蓝牙调制解调器。

您必须编辑/boot/config.txt并添加dtoverlay=disable-bt。您还必须禁用初始化调制解调器的系统服务,因此它不连接到UART,使用sudo systemctl disable hciuart

我已经这样做了,现在程序等待消息的超时并继续,如果没有收到消息。

timeout只会影响readline()等待的最长时间

timeout = x:设置timeout为x秒(float允许),当请求的字节数可用时立即返回,否则等待超时过期并返回所有接收到的字节,直到

try this:

import serial
uart = serial.Serial(port='/dev/ttyS0', baudrate=9600, timeout=3)
while True:
data = uart.readline().decode()
print(data)
if not data :
break
uart.close()

相关内容

  • 没有找到相关文章

最新更新