martes, 6 de junio de 2017

[ARDUINO-TIP] Leer y procesar con python una comunicación Serie


Cualquier persona que me conozca sabe muy bien que odio arduino y eso no ha cambiado xD. Mis desarrollos de hardware siempre se basan en microcontroladores PIC programados en assembler o eventualmente en C. Para mi, Arduino es el Python de la electrónica, y los que me conocen saben también que no comparto la filosofía de dicho lenguaje. En fin, aclarado eso, resultó que tengo que armar una demo para la cual no tengo el tiempo de hacer algo como a mi me gustaría, fue entonces que opté por usar un Arduino.

Como parte de la demo necesito poder recibir y procesar con un script en Python, ciertos datos enviados por el Arduino a través de una comunicación serie. Me pareció que podía serle útil a alguien más así que lo comparto.

En primer lugar tenemos el circuito, que para hacer una simple prueba de concepto utilicé 2 botones como entradas digitales y 2 LEDs de diferente color como salida (decoración). Al presionar un botón se enciende el LED rojo, si presionamos el otro botón se enciende el LED verde.




No voy a detallar como los conecté ya que no es más que 2 botones y 2 LEDs, tutoriales de cómo conectar eso hay millones. Para alimentar el protoboard utilicé la salida de 5v del arduino y el GND del mismo. Por otro lado tenemos dos pines digitales (4 y 12) declarados como entrada para los botones, y otros dos pines digitales (2 y 13) definidos como salida para los LEDs.

El objetivo es, que al presionar un botón no solo se encienda su correspondiente LED, sino también, que envíe un dato a través de una comunicación Serie, que nos diga si fue el "botón rojo" o el "botón verde" el que fue presionado. 

Para ello, el código para el Arduino puede ser el siguiente:




Podemos probar rápidamente que esto funciona utilizando el "Monitor Serie" del Arduino IDE. Al presionar los diferentes botones deberíamos ver que recibimos la correspondiente string en pantalla.



Sin embargo, esto no nos permite realizar ningún tipo de procesamiento del dato recibido para actuar en consecuencia, es por ello que programaremos un script en Python que nos permita jugar un poco más :)



Como vemos el script es extremadamente sencillo, podríamos hacer simples variaciones de acuerdo a lo que necesitemos. Por ejemplo la línea 14: "srecv = s.readline()" lee una línea completa que se ha recibido, esto es una string hasta donde se encuentra el caracter de salto '\n'. Si quisiéramos podríamos utilizar simplemente read() para ir leyendo byte a byte, o sino read(10) por ejemplo, para leer hasta los primeros 10 bytes recibidos.



Recuerda que puedes utilizar http://www.onlineocr.net/ para obtener el código de las imágenes publicadas. Sin más, espero que les sea útil, nos leemos en otra nota!

Author: Sheila A. Berta
Tw: @UnaPibaGeek.
Web: www.semecayounexploit.com

No hay comentarios.:

Publicar un comentario