Otro prolema con python + arduino vía serial

Hola.
El caso es que llevo poco tiempo trasteando con python, y estoy intentando comunicarlos en serie, y me surgen muchas dudasy varios problemas, que he decidido recopilar aquí más detalladamente, por si alguien me pudiera echar un cable.

1º La comunicacion python --> arduino la he conseguido sin problemas, con a excepción de que tan solo funciona el sketch de arduino, cuando la consola de serie de arduino está abierta. Esto lo he dado por vencido, pues no encuentro en ningún sitio que pueda funcionar la comunicación en serie con la consola cerrada.

2º En la comunicacion arduino ---> python me surgen muchos problemas:

  • intento hacer el típico "hola mundo" de conexión serie, pero me es imposible. Estoy probando los siguientes códigos:

Arduino: No pego el código, pero es el del ejemplo de InOutSerial que viene en la IDE. Leo los valores de un potenciometro y los imprimo por la consola de serie dejando un delay de 1 segundo. Hasta ahí todo correcto.
El problema viene en la parte de python, que intento correr el siguiente código (con la consola ya funcionando leyendo datos del pote):

#!/usr/bin/env python
import serial
import time
ser = serial.Serial("/dev/ttyACM0", 9600)
time.sleep(5.0)
while 1:

  • recibidos=ser.readline()*
  • print recibidos*

Y el error que me dice es éste:
Traceback (most recent call last):
File "/home/pablo/.config/gedit/tools/python", line 12, in
exec(sys.stdin.read())
File "", line 8, in
File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 456, in read
raise SerialException('device reports readiness to read but returned no data (device disconnected?)')
serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected?)

(obviamente si que está conectado, pues estoy leyendo los datos por el otro lado)
Mientras que con el monitor serial de arduino cerrado no hace nada.

Por otro lado, si quito el while 1, dejando solo:

recibidos=ser.readline()
print recibidos

sí funciona, pero tan solo me coge el valor de una linea, la que esté capturando en ese momento. Lo que a mí me gustaría es recibir una serie de valores, igual que los que recibo en la consola de arduino, pero en python, para luego "jugar" con ellos.

Esos son los problemas que tengo de momento, no sé si me he explicado.
Los códigos creo que están bien, pues los valores del pote los leo, el problema viene en la parte de python...

Si alguien tiene alguna indicación o respuesta, agradecería mucho su ayuda, ya que estoy un poco perdido, como he dicho.

Un saludo y muchas gracias de antemano. Y perdon por repetir los temas de los posts, pero era por concretar un poco más con ejemplos.

Ahora mismo me acaba de surgir el mismo problema. Se debe a que ha cambiado el puerto serie donde se conecta arduino. Al poner en el programa python

serial.Serial("/dev/ttyACM0", 9600)

cuando se desocnecta el arduino y se vuelve a conectar (se saca el cable usb y se vuelve a conectar) se encuentra en el puerto ttyACM1, por ejemplo, y el programa no encuentra arduino en el puerto especificado.

En lilnux se crean los enlaces simbólicos al puerto arduino automáticamente. Lo que se puede hacer es conectar arduino segun el enlace simbólico que se crea para no cambiar el path a la conexión. En ubuntu hay que mirar en /dev/serial/by-id o bien /dev/serial/by-path que son las carpetas donde se crea ese enlace simbólico y el código python queda

serial.Serial("/dev/serial/by-path/pci-0000:00:03.0-usb-0:1:1.0", 9600) #Enlace simbólico por by-path

serial.Serial("/dev/serial/by-id/usb-Arduino__www.arduino.cc__0043_A4139363931351B04151-if00", 9600) #Enlace simbólico de by-id

En este post cuentan como configurar cada uno de los diferentes arduinos para que esten en un sitio concreto
http://arduino.cc/forum/index.php/topic,38409.0.html