我有一个 arduino 板,它不断地将值转储到串行端口(USB)。该数据由使用 pySerial 库的 python 脚本的机器读取。我使用的代码如下:
import serial
import time
ser = serial.Serial('/dev/ttyACM0', 9600, timeout=1)
while True:
ser.flushInput() #Clear the serial input buffer
print "Value:"
print ser.readline()
print ser.readline()
print ser.readline()
time.sleep(30) #Wait for 30 seconds
这完美地工作并提供以下输出:
Value:
162
162
162
Value:
162
162
162
但是当我在循环中给出比 30 秒更大的延迟时,比如 1 分钟或更高:
time.sleep(60) #Wait for 60 seconds
我开始遇到问题。正在打印第一组值。从那时起, ser.readline() 总是超时产生空值!
输出:
Value:
162
162
162
Value:
Value:
为什么串行模块会显示这种行为?
最初,我用来读取序列值的机器是运行 Raspian linux 的 Raspberry Pi 板。我认为这个问题可能是由于 RPi 在遇到空闲期时将 USB 推迟到低功耗睡眠。但是我在笔记本电脑上测试了相同的代码,然后也出现了同样的问题,这意味着它可能是其他问题。
我想构建一个需要 24x7并在某些事件发生时读取串行值的系统,因此这种行为是不可接受的。
请对这个问题有所了解。