我正在 Ubuntu 上运行一个相当简单的 python 代码,用于与 Arduino 进行通信。该代码按预期运行大约 15 分钟,然后抛出 I/O 错误 [Errno 5]。我搜索了许多有关此错误消息的线程,但似乎找不到适合我需要的解决方案。
Python 代码通过串口向 Arduino 发送命令,Arduino 执行该命令的任何操作。当抛出此错误时,Arduino 会被迫放弃其原始端口号。它从“/dev/ttyACM1”到“/dev/ttyACM2”
起初我以为这与 Arduino 的自动重置功能有关,我在 Reset 和 +5V 引脚之间使用 120 欧姆电阻绕过了该功能。这并没有解决问题。
接下来,我认为这是因为 Ubuntu 机器因不活动而自行挂起,因此我禁用了省电功能,但没有任何改善。
此外,我将最初运行 python 代码的终端 session 保持打开状态。
我确定问题与串行端口号问题有关,因为错误是由失败的 ser.write 命令触发的
产生此错误的Python代码的子例程如下:
def sc_loop(ptime,maxiter, file):
iter = 1 ## Initialize cycle count
totalvol = 0
cyclevol = 0
while iter < maxiter:
ts = time.time()
st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
print >>file, st, " - pump cycle #", iter
## Tell the arduino to begin pumping
ser.write("1".encode())
pump = ser.readline()
if pump == 'P':
ts = time.time()
st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
print >>file, st, " - Sample chamber pump turned ON"
ts = time.time()
st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
print >>file, st, " - Sample chamber pump turned ON"
time.sleep(ptime)
ser.write("2".encode())
ts2 = time.time()
st2 = datetime.datetime.fromtimestamp(ts2).strftime('%Y-%m-%d %H:%M:%S')
print >>file, st2, " - Sample Chamber Pump turned OFF"
print >>file, st2, " - Pump was on for",ts2-ts, "seconds"
cyclevol = 0.0667*(ts2-ts)
print >>file, st2, " - ", cyclevol," mL of sample were pumped this cycle"
totalvol = totalvol+cyclevol
print >>file, st2, " - ", totalvol, " mL of sample have been pumped so far"
time.sleep(3)
runcamera(file) ## Run camera
## imaged = raw_input("Sample is ready for imaging [Press any key once imaged] ")
iter = iter+1
return
这段代码可以完美地工作,尽管是暂时的。我的问题是,Python 代码运行 10-15 分钟后,是什么原因导致此错误?
提前致谢!
最佳答案
看一下:
http://ubuntuforums.org/showthread.php?t=2057988
该问题是由于 udev 为设备提供动态名称造成的。一段时间后,arduino 被机器重新注册,并被分配一个新的端口号。它被分配了一个新的端口号,因为驱动程序在几乎同时“删除”和“添加”arduino 时会打嗝。
为 udev 创建新规则来为设备分配静态端口将会有所帮助。
关于python - Python 中长期串行连接出现 IO 错误 [Errno 5],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33441579/