python-serial OSError: [Errno 11] 资源暂时不可用

Posted

技术标签:

【中文标题】python-serial OSError: [Errno 11] 资源暂时不可用【英文标题】:python-serial OSError: [Errno 11] Resource temporarily unavailable 【发布时间】:2016-03-21 14:24:00 【问题描述】:

我正在使用 Arduino Nano 与 ODROID 进行串行通信(单板计算机安装 Ubuntu 14.04)。 Arduino代码:

void setup() 
   Serial.begin(9600); // set the baud rate
   Serial.println("Ready"); // print "Ready" once

void loop() 
  char inByte = ' ';
  if(Serial.available()) // only send data back if data has been sent
    char inByte = Serial.read(); // read the incoming data
  Serial.println(inByte); 

  delay(100); // delay for 1/10 of a second
   

ODROID中的Python代码:

#!/usr/bin/env python

from time import sleep
import serial
ser = serial.Serial('/dev/LIDAR', 9600, timeout=1) # Establish the connection on a specific port

sleep(1)
print "Arduino is initialized"

counter = 32 # Below 32 everything in ASCII is gibberish

while True:
    if (ser.inWaiting()>0):
      counter +=1
      ser.write(str(chr(counter))) # Convert the decimal number to ASCII then send it to the Arduino
      print ser.readline() # Read the newest output from the Arduino
      sleep(.1) # Delay for one tenth of a second
      if counter == 255:
          counter = 32

ser.close  

回溯(最近的最后一个):

File "./serial_test1.py", line 16, in <module>        
    print ser.readline() # Read the newest output from the Arduino       
File "/usr/lib/python2.7/dis-package/serial/serialposix.py", line 43, in read   
    buf = os.read(self.fd, size-len(read))     
OSError: [Errno 11]Resource temporarily unavailable 

然后我在打印一些值后遇到了这个问题,我知道这个问题可能当前没有可用的数据。但是我怎么能弄清楚这个问题。感谢您的帮助。

【问题讨论】:

请提供整个堆栈跟踪 嗨@Mr.E,我已经更新了堆栈跟踪,请给我一些建议。谢谢 【参考方案1】:

我不知道这是否适用于 ODROID,但我发现了一篇关于 similar problem with Raspberry PI 的帖子。在那篇文章中,答案之一是redirected to this link

上面说问题是由树莓派串口引起的,默认情况下使用系统控制台,当您尝试将其用于自己的目的时会发生冲突

要禁用控制台的串行端口,您必须编辑文件/etc/inittab 并注释T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100 行(您在行的开头使用# 对其进行注释,就像在python 中一样)。您必须重新启动 ODROID,它应该可以工作

我建议您阅读我链接的答案,因为它更多地解释了如何替换串行端口来访问命令行(它建议使用 ssh),另一件事是 Raspberry PI(并假设 ODROID 工作方式类似) 在启动时通过串行端口发送一条消息,该消息将由 Arduino 接收。您可以删除该消息,并在此处进行了说明

希望对你有帮助

【讨论】:

【参考方案2】:

您收到此错误,因为您的串行设备正在被操作系统本身使用。您应该停止操作系统以使用此设备。

Serial getty 现在是一项服务,您应该停止和/或禁用它:

sudo systemctl stop serial-getty@ttyAMA0.service
sudo systemctl disable serial-getty@ttyAMA0.service

请注意,我的本机串行设备 ID 是 ttyAMA0。

要永久禁用串行服务,请使用 sudo systemctl mask serial-getty@ttyAMA0.service 在这种情况下,即使重新启动,串行服务也不会启动。

【讨论】:

以上是关于python-serial OSError: [Errno 11] 资源暂时不可用的主要内容,如果未能解决你的问题,请参考以下文章

Linuxpython 2.x 升级 python3.x 之后 yum命令出现except OSError, e: ^ SyntaxError: invalid syntax

OSError: cannot open resource(pillow错误处理)

(转)pd.read_csv之OSError: Initializing from file failed的解决方案

OSError:[Errno 26] 文本文件忙:'baremetrics'

解决raise OSError(“Truncated File Read“)OSError: Truncated File Read

解决raise OSError(“Truncated File Read“)OSError: Truncated File Read