Python y Arduino.

Ya te puedes dar cuenta que Arduino es capaz de conectar con cualquier dispositivo electrónico gracias a sus librerías y en partícular gracias a firmata. Esta librería proporciona conectividad y permite a un programa abrir un socket de comunicación entre ambos dispositivos (la placa Arduino y el conector USB).

En otras clases del curso de electrónica para maker, hemos visto como conectar nuestra placa Arduino UNO a otros sofware a través del puerto Serial, como el caso de conector VB.NET, a través del cual hemos conectado un programa hecho en VB.NET para encender un LED conectado en la placa Arduino. Visita este enlace AQUÍ.

Para esta práctica vamos a hacer lo mismo, pero a través de un programa en Python y, además haremos que el programa cargue la estructura que ejecutará la acción, es decir, será el programa en python quién ejecutará las instrucciones para conseguir que se encienda o se apague el LED, en lugar del generar las instrucciones desde el IDE de Arduino.

Para ello, necesitaremos un par de cosas:

● Librería de python pyfirmata.
● Un editor de texto plano.
● Tu placa Arduino.
● El archivo Standarfirmata.ino.

Si ya tienes todo preparado, ¡a construir!

Circuito a montar.

Como puedes ver a continuación el circuito es muy sencillo de montar y no implica ningún secreto ya a estas alturas del curso.

Circuito básico para programarlo desde python

Como ves solo necesita un diodo LED y su resistencia limitadora y un pulsador y una resistencia de 10KΩ para evitar una sobreintensidad de la placa. Solo cuatro componentes y unos pocos cables de conexión.

Instalación.
El montaje no conlleva ninguna complicación y lo vas a entender enseguida. La resistencia limitadora de 330Ω estará conectada a positivo de alimentación (+5V). El diodo LED se conectará al otro extremo de la resistencia mediante su ánodo y el cátodo se conectará al pin 12 de tu placa Arduino.

Por otro lado, el pulsador se conectará de la forma siguiente:

conexión del pulsador

El terminal 1A se conectará a través de la resistencia de 10kΩ a masa del circuito; mientras que el terminal 2A se conectará al terminal positivo directamente. En el extremos opuesto, en el terminal 1B, se conectará al puerto digital 8 de tu Arduino.

Descargas.

Para programar tu placa Arduino desde un lenguaje diferente al de Arduino, tienes que tener instalado en tu sistema el lenguaje en cuestión. En mi caso como el conector va a ser un lenguaje de python, deberás de tener instalado el intérprete de python. Si no lo tienes, visita este ENLACE.

Suponiendo que lo tengas instalado, lo siguiente que necesitas es descargar la librería para poder programar Arduino desde python. Esa librería se llama pyfirmata y la puedes descargar desde el siguiente enlace:

Descargar pyfirmata.

NOTA: Te puedes descargar directamente el archivo .zip a tu ordenador, pero tendrás que instalarlo despues en tu ordenador desde python (con el problema de tener instalado el paquete setuptools instalado). Pero existe una forma rápida y eficaz de instalar la librería sin tener que realizar la instalación manual. Abre tu consola de comandos - Terminal - MSDOS- PowerShell, etc., y escribe el siguiente comando dentro de la consola:

pip install pyfirmata

Esto instalará automaticamente la librería pyfirmata en tu ordenador dentro del conjunto de librerías de python para que la puedas utilizar cuando desees.

También necesitarás el archivo StandarFirmata disponible en tu IDE de Arduino UNO. Este archivo lo tendrás disponible dentro del menú Archivo - Ejemplos - Firmata - StandarFirmata de tu editor de Arduino, ya que por defecto viene integrado dentro del mismo una versión (que se suele auto actualizar).

Cargar programa StandarFirmata.ino

También te puedes descargar el programa conn.py en el menú inferior de descargas de ésta página para usarlo sin que tengas que escribir el código, pero mejor tener que escribir para aprender a programar, ¿verdad? ;)

Programar el archivo python.

El programa no tiene mucha complicación. La complicación puede ser la acción que queramos programar. En nuestro caso, queremos que al pulsar el pulsador se encienda y se apague el LED del circuito utilizado en Arduino.

En el ide de Arduino sería fácil hacerlo (Visita la práctica del capítulo 2 de electrónica para maker para recordar como se procede.

El código del sketch sería el siguiente:

programa en Arduino

Como en python no podemos invocar a los métodos de la API de Arduino, necesitamos la librería pyfirmata que nos servirá para realizar la misma acción desde un lenguaje externo al de los sketch del Arduino. Por eso, abre tu editor favorito y escribe el siguiente código:

# Archivo: conn.py

import pyfirmata

placa = pyfirmata.Arduino('COM3')

pyfirmata.util.Iterator(placa).start()

entrada = placa.get_pin('d:8:i')
entrada.enable_reporting()
salida = placa.get_pin('d:12:o')

try:
    encendido = False
    while True:
        if entrada.read():
            encendido = not encendido
            salida.write(encendido)
            placa.pass_time(0.2)

finally:
    salida.write(False)
    placa.exit()

El código se puede dividir en tres partes. La primera la importación de la librería y la creación de variables para la conexion, la segunda, la configuración de los puertos y la tercera como la estructura repetitiva para realizar la acción a ejecutar en la placa.

Así, empezando por la primera parte, tenemos que una vez importada la librería, necesitamos una variable para almacenar el puerto de comunicación por el que el programa se conectará a la placa Arduino. En mi caso es el puerto COM3, porque estoy usando un Windows10.

A continuación hay que escanear los puertos de la placa Arduino y así se mantienen a la escucha del programa. Para ello tenemos que hacer una iteración, es decir recorrer los puertos continuamente en modo de escucha. Eso se realiza con el metodo start de la librería pyfirmata.

En la segunda parte, declaramos los puertos que vamos a utilizar con la variable entrada y salida. Se utilizará la función get_pin() para establecer el puerto a utilizar, indicando entre paréntesis si el puerto es anologico (a), o digital(d); el puerto en cuestión y la configuración OUTPUT(o), INPUT(i). Cada valor se separará entre dos puntos (:). Por lo que se configura un puerto para entrada y otro para salida.

En la tercera parte se establece la estructura repetitiva mediante un bucle while, indicando que mientras sea True, se repita el bucle con la condición establecida. En el programa, se hace que la pulsación del botón cambie el estado del LED con una lógica negada mediante la instrucción not.

Así que, cuando se pulse el pulsador, se cambiará el estado del LED (si está encendido se apagará, y si está apagado se encenderá). Por último, para finalizar, tienes que cerrar la conexión con el método exit() para liberar los recursos y que el ordeandor no se quede pillado por el uso de la librería pyfirmata.

Ya solo queda guardar el programa con extensión .py. Y ejecutarlo.

Carga de programa.

Para ejecutar el programa, lo primero que tienes que hacer es cargar el StandardFirmata.ino en la placa Arduino. Simplemente selecciona el archivo, conectas la placa Arduino a tu ordenador a través del puerto USB y subes el progama al microprocesador. Cuando se termine de subir el archivo, el led se quedará encendido ya que el programa StandardFirmata.ino establece todos los puertos como salida.

Ahora busca tu archivo conn.py creado anteriormente y, o bien lo cargas desde tu editor de python, o lo ejecutas dando doble click al programa.

ejecuta el programa

Ya estarás controlando el circuito eléctrico desde python y no desde el IDE de Arduino.

Ya puedes descargar el proyecto completo desde el menú inferior de descargas y te invito a visitar el vídeo de esta práctica para que veas el proceso graficamente.