Crear interfaz de comunicación PC-Arduino en Python!

Publicado por en Arduino el 07/09/2010
Comentarios:

Que mas se puede decir de Arduino? Esa pequeña maravilla de color azulada que hace las delicias de todo geek.

Pues muchas cosas! Hoy en concreto voy a escribir sobre la comunicación entre arduino y otras plataformas, como es el caso de nuestro PC!

Con unos sencillos conceptos de programación en cualquier otro lenguaje, vais a tener suficiente como para entender el codigo de este sencillo pero potente por igual lenguaje, Python!

No te pierdas ni un solo detalle de este tutorial DIY de programación, aqui en BricoGeek.com!

Pantallas LCD gráficas y de texto

Lo primero de todo será tener instalado el intérprete Python en nuestro ordenador, el mas reciente es la versión 3.0 y la inmensa mayoria de sistema Linux-BSD lo traen instalado por defecto o en su falta, es facilmente accesible y descargable desde los repositorios.

El tutorial no trata de su instalación, pero si quieres mas información al respecto, no olvides revisar la sección de enlaces al final del tutorial.

Una vez tenemos nuestro Python funcionando bajo nuestra máquina, nos dispondremos a instalar la libreria de comunicación por puertos de serie, o en nuestro caso un USB simulado, y poder escribir bajo el flujo de datos que hay entre ambos dispositivos, logrando así una comunicación robusta y rapida.

pySerial - Libreria de comunicación para puertos de serie bajo Python

Bien ahora crearemos un codigo sencillo que nos servirá como prueba de concepto (PoC) para posteriormente desarrollar interfaces mas complejas.

A ello!

Lo primero es importar la libreria:

    import serial

Luego procedemos a bindearnos al puerto de serie con una sencilla función y encapsulamos dicha conexión en un objeto:

    ser = serial.Serial('/dev/tty.usbserial', 9600)

Ahora es el momento de leer lo que arduino nos dice:

   while 1:

     ser.readline()

Quedando el codigo completo de la siguiente manera:

import serial
      ser = serial.Serial('/dev/tty.usbserial', 9600)
      while 1:
         ser.readLine() 

Pudiendo asignar de esa manera el valor de readline a una variable para interpretarlo.

Ahora envezde leer lo que arduino nos diga, vamos a escribirle:

import serial 
       ser = serial.Serial('/dev/tty.usbserial', 9600)
       ser.write('5')

Con lo que estariamos enviando con una velocidad de 9600 baudios al arduino el numero 5 en formato String o char[] para los de la vieja escuela :P

Pero como puedo yo hacer que mi arduino lea eso, direis...

Pues muy sencillo con la clase Serial y sus metodos orientados precisamente a esto, a la comunicación, en concreto print() y read(), veamos ahora un ejemplo de lectura desde arduino:

#define BUFFSIZ 20 //20 caracteres

void readString() {
 char c;
 int buffSize = 0;
 
 Serial.flush();
 while (true) {
     c=Serial.read();
     if ((buffSize == BUFFSIZ-1) || (c == 'r')) {            
       buffer[buffSize] = 0;                                  
       return;
     }
     buffer[buffSize++] = c;                                  
 }
}

Con el codigo anterior leemos uno a uno los caracteres que enviamos al arduino y los guardamos en un array para su posterior interpretación.

Eso es todo amigos!

Si os ha interesado el tema no le quiteis ojo al blog en los proximos dias, porque estoy preparando una aplicación grafica con Java para poder interactuar con Arduino!

Enlaces:

Python

Arduino

Si te ha gustado, compártelo con tus amigos!
Google Plus 

Ver comentarios antiguos...