Usando el protocolo Firmata con Arduino

Firmata es un protocolo que permite la comunicación de microcontroladores con software en una computadora (o smartphone, tablet, etc). Puede ser implementado en diversas arquitecturas de microcontroladores así también como en distintos paquetes de software.

Firmata está basado en el formato de los mensajes MIDI y utiliza un byte (8 bits) para los comandos y un byte (7 bits) para los datos. También hace uso de los mensajes Sysex de MIDI que pueden adoptar cualquier longitud, y esto los hace más prominentes a través del protocolo.

Aprender a utilizar y dominar este protocolo permite realizar gran cantidad de proyectos interactivos e incursionar en el mundo de la computación física, aquello que enlaza el «mundo real» con el «mundo virtual».

Firmata y Arduino

Vamos a trabajar con la librería Firmata que incluye Arduino IDE para que nuestro hardware pueda comunicarse con el software cliente. Podemos verificar si está instalada desde el Gestor de Librerías (Programa > Incluir Librería > Administrar Bibliotecas).

Librería Firmata instalada.

Podemos optar por dos modelos principales a la hora de utilizar Firmata con Arduino:

  1. Diseñar un sketch que utilice los métodos provistos por la librería para enviar y recibir datos de manera selectiva entre el dispositivo de hardware y el software cliente. Tendremos que consultar y digerir la documentación para conocer su uso.
  2. La otra opción es subir el sketch de propósito general que incluye la librería llamado StandardFirmata (o alguna de las variantes) a la placa Arduino, de esta manera nos concentraremos exclusivamente en el software cliente. Los sketchs se encuentran en el menú Archivo > Ejemplos > Firmata.

La última opción es la que escogí para empezar a experimentar con el protocolo, simplemente subí el sketch StandardFirmata a una placa Arduino Uno que tiene conectado los siguientes componentes:

  • Potenciómetro en el pin A0
  • LED de color azul conectado al pin digital 8
  • LED de color rojo conectado al pin digital 9
Circuito de pruebas.

Interactuando con Snap4Arduino

Como ya les conté Firmata posee librerías para interactuar con un gran variedad de software (Processing, Python, Javascript, etc.) y para comenzar a estudiar sus posibilidades opté por un entorno de programación visual (bloques) que es ideal para aplicarlo con niños o con personas que comienzan a programar. Estoy utilizando Snap4Arduino que es una modificación de Snap!, un lenguaje de programación visual inspirado en Scratch escrito por Jens Mönig y Brian Harvey.

Snap4Arduino viene preparado para conectarse con una placa Arduino que ejecute Firmata y permite crear entornos interactivos en cuestión de minutos. Por el momento no me voy a detener en el entorno ni en la forma de trabajo ya que no es el fin de este artículo, pero les enlazo a una guía rápida para conocer la herramienta.

¡Hola Mundo!

Mi primer proyecto está basado en tres objetos, los cuales se comunican entre sí e intercambian información con el hardware Arduino. Cada objeto tiene una gráfica asociada y una rutina de programación:

  • Objeto 1: Logo de Arduino. Recibe mensajes de los objetos 2 y 3 y los transmite al hardware, es decir escribe en los pines digitales 8 y 9. Además obtiene el valor del pin analógico A0 y lo muestra en pantalla mediante un globo de diálogo.
  • Objeto 2: LED rojo. Detecta cuando el puntero del mouse está encima de él y se hace clic. Este evento es comunicado al objeto 1.
  • Objeto 3: LED azul. Detecta cuando el puntero del mouse está encima de él y se hace clic. Este evento es comunicado al objeto 1.

Las rutinas de programación del primer objeto son las siguientes:

Objeto ARDUINO.

La rutina de programación del segundo objeto es la siguiente:

Objeto LED_ROJO.

La rutina de programación del tercer objeto es la siguiente:

Objeto LED_AZUL.

Una vez realizada la programación, simplemente hay que conectar la placa Arduino al puerto USB, y enlazarla con Snap4Arduino. Esto último se hace desde la categoría «Arduino», opción «Conectar Arduino».

Conectar con Arduino.

Pueden descargar el proyecto completo desde aquí para comenzar a experimentar.

¿Cómo seguir?

Está tecnología abre un enorme abanico de posibilidades para aprender y enseñar programación e interactuar con el mundo real mediante hardware.

Me gustaría leer sus opiniones y comentarios sobre aplicaciones que se les ocurran donde podríamos aplicar el protocolo Firmata en conjunto con el software Snap4Arduino o alguna otra implementación.

Artículos relacionados