14 julio, 2013

Como descubrir el puerto arduino con Python

[singlepic id=20 w=320 h=240 float=right]Cuando desconecto y vuelvo a conectar el Arduino (Arduino Uno R3), el Ubuntu dependiendo si se ha enterado o no que lo he desconectado, al volver a conectarlo me lo instala en otro puerto, con lo que tengo que decirle al programa cual es el nuevo puerto. Para solucionar esto y aprovechando la librería PySerial y la función «try», podemos descubrir donde esta instalado el puerto Arduino. Para ello solo tenemos que probar los puertos que posiblemente pueda estar utilizando el Arduino. Si al intentar abrir el puerto arduino nos da error, eso es que el Arduino no esta instalado en ese puerto. Gracias a la función «try», controlamos ese error que se ha producido y podemos seguir con el funcionamiento normal de nuestro programa. Cuando al abrir el puerto no nos da error, eso quiere decir que en ese puerto hay algún dispositivo instalado. si solo tenemos el Arduino instalado ya tendremos el puerto Arduino y podemos salir del bucle y guardar el puerto.

Descubrir el puerto arduino

Código de ejemplo en Python:

#! /usr/bin/env python

# Importamos la libreria PySerial
import serial

# Varialbe para saber si hemos encontrado el puerto o no
bEncontrado = False
# Hacemos un bulce para recorrer los puertos que queremos comprobar
for iPuerto in range(0, 4):
    try:
        # Puerto que vamos a probar
        PUERTO = '/dev/ttyACM' + str(iPuerto)
        # Velocidad 
        VELOCIDAD = '9600'
        # Probamos ha abrir el puerto
        Arduino = serial.Serial(PUERTO, VELOCIDAD)
        # si no se ha producido un error, cerramos el puerto
        Arduino.close()
        # cambiamos el estado del la variable para saber si lo hemos encontrado
        bEncontrado = True
        # Salimos del bucle
        break
    except:
        # Si hay error, no hacemos nada y continuamos con la busqueda
        pass

# Si encontramos el puerto?
if bEncontrado:
    # Mostramos el puerto donde esta el arduino
    print('el puerto del arduino es: ' + '/dev/ttyACM' + str(iPuerto))
else:
    # Si no lo encotramos mostramos el mensaje de no encontrado
    print('No se ha encontrado Ardunio')

Aunque este código es de Python, el portarlo a cualquier otro lenguaje es muy sencillo, por lo básico de su planteamiento, lo único que podrida complicar el código seria las funciones que se tengan que utilizar para la apertura del puerto serie, por lo demás, el resto de funciones están disponibles en cualquier lenguaje.