Controlar Arduino desde GNU/Linux con PySerial

Escrito el 6 julio 2013 por Luis Ignacio Díaz Martínez


Este es un tema que siempre me ha parecido curioso… el controlar un microcontrolador ( en nuestro caso Arduino ) desde nuestro PC.

No siempre nuestro microcontrolador podrá realizar todo lo que nosotros le indiquemos… sea por falta de memoria en el chip o la limitación de sus recursos…

También podemos tener como objetivo controlar de forma remota enviando ordenes en vivo recreando por ejemplo un movimiento en un robot ( por ejemplo moverse hacía delante ).

Entorno

Principalmente estoy utilizando un Arduino Uno de tipo «clónico» ( no es el oficial de Arduino pero tiene la misma arquitectura ).

Como ya dice el título de este artículo estoy utilizando una distribución GNU/Linux… exactamente una Ubuntu 13.04.

Instalando PySerial

Primero de todo lo que tenemos que hacer es instalar la librería PySerial en nuestra máquina. Por suerte para nosotros tanto en Debian como en Ubuntu encontramos el paquete python-serial en sus repositorios…

Quizás necesitemos algún paquete más… si ese fuese el caso no dudéis en comentarlo.

Puerto serial

Aún que conectemos nuestro Arduino Uno a nuestro PC necesitaremos cambiar los permisos del puerto serie de comunicación… ya que si no, no podríamos acceder a el desde nuestro usuario ( por defecto tan solo es accesible desde root ).

Para ello tan solo realizaremos lo siguiente…

Por lo tanto.. ya estará! no obstante recomiendo la lectura del artículo sobre el IDE de Arduino

El código fuente

A continuación mostraré las dos piezas que necesitaremos para montar el pastel…

Descargando

Primero de todo descargaremos el código que tengo en mi cuenta de GitHub

Ahora ya estamos situados en el código que nos interesa!

Arduino ( sendString.ino )

Este es el código que hace referencia a nuestro Arduino

Python ( sendString.py )

El fragmento de código que se muestra a continuación se tendrá que ejecutar desde la consola…  Muestro a continuación como ejecutar el script para los despistados…

Y a continuación el código…

Ejecutándolo tendría que devolver por pantalla el mismo string que hemos enviado al Arduino Uno.

Como funciona

Bueno, esto quizás sea lo más complicado de explicar…

La verdad es que me ha costado mucho hacer que funcione este trocito de código… la clave esencialmente reside en los tiempos de ejecución… y en esperar a que la conexión con el puerto serie se realice con éxito.

Una vez establecida la conexión ( desde Python hasta el Arduino UNO ) enviaremos un mensaje ( que se envía de byte a byte ) hacía el microcontrolador. A su vez, Arduino se encarga de recopilar esos bytes y almacenarlos en una variable de tipo string…

Insisto, el secreto está en el tiempo de espera a que se realice la conexión. También he modificado los baudios de conexión con el puerto serial a 115200…

Referencias

Aún que son muchas… me gusta contrastar información!


Cargando...

Comentarios: