22 junio, 2013

Leer el puerto serie de Arduino con Python y PySerial

[singlepic id=20 w=320 h=240 float=right]Desde hace ya un tiempo he hoy buenos comentarios sobre Python y lo «fácil» que es programar con él, su potabilidad entre sistemas, etc. Me he puesto ha ello, y la verdad es que es muy fácil programar con él, después de un rato, se le coge el tranquillo a esa forma tan peculiar de escribir el código que tiene, solo utilizando tabulación, sin puntos y comas, llaves o cualquier otra forma de indicar el inicio y el fin de las lineas,  a la declaración de las variables, mejor dicho a la no declaración, la formar de trabajar con las funciones, etc. En general es un lenguaje muy fácil de trabajar y encima puedes hacer verdaderas locuras con el. Me ha recordado mucho al Basic que aprendí ya hace muchas lunas.

Para empezar, que mejor que trabajar con Arduino. Lo primero que he hecho es leer del puerto serie la información que escribe el Arduino.

Para el Arduino solo le he metido un código muy simple, genera un numero aleatorio, de -100 a 100,  y lo escribe en el puerto serie.

Codigo para Arduino

int x = 0;    // variable

void setup() {
  Serial.begin(9600);      // abre el puerto serie a 9600 bps:    
}

void loop() {

  Serial.println(random(-100, 100)); // Escribe en el puerto un numero aleatorio de -100 a 100
  delay(2000);
}

Y en Python lo que he hecho es aprovechar la librería PySerial que hay para Python para leer el puerto y leer los datos que escribe el Arduino.  Para instalar la librería PySerial es muy fácil, solo tenemos que seguir los pasos que hay en la propia pagina de PySerial.

El código en Python es muy simple, este mismo código en Java, me llevo bastante tiempo pelearme con la librería RxTx, en cambio en Python es tan sencillo como escribir el siguiente código.

Código Pytho

#!/usr/bin/python

# Importamos la libreira de PySerial
import serial

# Abrimos el puerto del arduino a 9600
PuertoSerie = serial.Serial('/dev/ttyACM0', 9600)
# Creamos un buble sin fin
while True:
  # leemos hasta que encontarmos el final de linea
  sArduino = PuertoSerie.readline()
  # Mostramos el valor leido y eliminamos el salto de linea del final
  print "Valor Arduino: " + sArduino.rstrip('\n')

Después de este código tan simple, ya tenemos un programa que nos lee los datos del puerto serie y lo muestra en pantalla. Esto con cualquier otro lenguaje te lleva un buen rato. Esto no me ha llevado mas de media hora de buscar por internet como se programa en Python y como funciona la libreria PySerial.

Que opinas de ello???