简体   繁体   中英

python-serial OSError: [Errno 11] Resource temporarily unavailable

I am using Arduino Nano to serial communicated with ODROID (single-board computer installed Ubuntu 14.04). The Arduino code:

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
}   

The Python code in ODROID:

#!/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  

Traceback(most recent last):

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 

Then I had this issue after print some values, I know this problem maybe no data in available at current time. But how can I figure out this issue. Thanks for your help.

I don't know if this will work for ODROID, but I found a post about similar problem with Raspberry PI . In that post one of the answers redirected to this link

There it says the problems is caused by Raspberry Pi serial port, which is used by default to use the system console which conflicts when you try to use it for your own purposes

To disable the serial por for console you must edit the file /etc/inittab and comment the line T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100 (You comment it with a # at the begining of the line, like in python). You must reboot the ODROID and it should work

I suggest you to read the answer I linked cause it explains a bit more about how can you substitute the serial port to access the command line (It suggests using ssh) and another thing is that Raspberry PI (And assume ODROID works similar) sends at boot time a message through serial port that will be received by the Arduino. You can remove that message and it's explained there

Hope this helps you

You are receiving this error since your serial device is being used by os itself. You should stop os to use this device.

Serial getty is now a service and you should stop and/or disable it:

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

Note that my native serial device id is ttyAMA0.

to permanently disable serial service, use sudo systemctl mask serial-getty@ttyAMA0.service in this case serial service will not start even on reboot.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM