75. Arduino Day y el protocolo de comunicaciones Firmata

Published: April 11, 2016, 4:54 a.m.

Hoy vamos a hablar del Arduino Day y del protocolo de comunicaciones Firmata. El Arduino Day es la celebración en todo el mundo del cumpleaños de Arduino y Genuino, te recuerdo que por problemas de marca Arduino se llama Genuino fuera de USA. Es un evento durante 24 horas que se celebra el 2 de abril de cada año. Los diferentes eventos pueden ser organizados por la comunidad o por los fundadores, donde las personas interesadas en Arduino se reúnen, comparten sus experiencias y aprenden cosas nuevas.

En el campus de programarfacil, hay un nuevo curso que estamos preparando, si quieres mantenerte informado y que te avisemos cuando esté preparado date de alta accediendo al formulario.

Este año han sido 331 eventos en 68 países de todo el mundo, en España han sido 29 repartidos por toda la geografía. Este año ha sido imposible organizar algún evento en nuestra ciudad, Alicante, pero te prometemos que el año que viene seremos parte del Arduino Day organizando nuestro propio evento al que esperamos que asistas.

Podías seguir dicho evento a través de las redes sociales, estuvieron muy activas, con fotos, vídeos y artículos, todo centrado en este día especial para Arduino. Si quieres ver los diferentes eventos, puedes ir a la web oficial de Arduino Day.

Además de los eventos repartidos por todo el mundo, este día aprovechan para hacer presentaciones de nuevos productos y diferentes anuncios relacionados con Arduino. En esta ocasión hay tres noticias importantes.

Por un lado han puesto a la venta la tan esperada placa MKR1000 con un precio de 30,99 €, de la cuál hemos hablado en diferentes ocasiones y a la que dedicaremos bastante tiempo. Es una placa orientada principalmente al IoT.

También se ha presentado el Arduino Project Hub, una nueva plataforma donde compartir experiencias y proyectos para toda la comunidad. Arduino es el referente en los microcontroladores de todo el mundo, uno de sus puntos fuertes es la cantidad de información que podemos encontrar en Internet alrededor de esta placa. Hay multitud de proyectos y tutoriales al respecto pero, Arduino a ido más allá. A presentado Arduino Project Hub, la plataforma de tutoriales alimentado por la más que conocida comunidad hackster.io. Esto abre un mundo infinito al mundo maker y lo más importante, lo recoge todo en una única plataforma donde poder consultar en tiempo real cualquier manual o tutorial paso a paso y pone en contacto a miles de usuarios con el apoyo oficial de Arduino.

Dentro de esta plataforma también encontramos el nuevo IDE oficial, Arduino Create, del cuál ya hemos hablado en el capítulo Arduino basado en la web y que por el momento esta en fase beta.

Y por ultimo y quizás la más importante, a mi modo de ver, se ha publicado el Manifiesto IoT donde se habla del cambio que se nos viene encima gracias a este movimiento. Los fundadores de Arduino creen que el IoT puede cambiar la manera en que los ciudadanos viven en las ciudades y apuestan por hacer crecer este entorno con plataformas de hardware y software libre. Proponen que los dispositivos conectado deben ser:

Abiertos: el código y el hardware abierto es la mejor manera para fomentar la innovación
Sostenibles: en contra de los productos de consumo rápidos.
Justos: que cada usuario tenga el control de sus datos, sin intermediarios.
No cabe duda que la era del IoT ha entrado en Arduino para quedarse, dando un puñetazo en la mesa a todos aquellos que, de alguna manera, quieren apoderarse tanto del mercado que lo rodea, como de la mina de diamantes que puede generar los datos producidos por estos dispositivos.

Protocolo Firmata

El protocolo Firmata es un protocolo para comunicar con microcontroladores desde cualquier software o cualquier ordenador conectado. El objetivo primordial de este protocolo es hacer que el microcontrolador sea una extensión de nuestro entorno de desarrollo. Fue diseñado para ser abierto y flexible para que pueda ser soportado por cualquier lenguaje de programación, también debe ser simple de implementar en el microcontrolador y en el ordenador.

La implementación de referencia es la librería para Arduino/Wiring la cual está incluida en el entorno de desarrollo oficial de Arduino a partir de la versión 0012.

Firmata fue creado en el 2006 como una demo para Arduino por Hans-Chistoph Steiner. Se le ocurrió mientras estaba trabajando en un proyecto musical con dispositivos Eroktronix MIDItron conectados a varios Arduinos con varios sensores conectados. Cuando tenía que hacer una modificación en el código, debía replicarlos en todos los Arduinos.

Cuando se trabaja con microcontroladores, siempre es necesario disponer de un ordenador y un cable para comunicación serie con los microcontroladores. Estos son utilizados para capturar información a través de los sensores y actuar en consecuencia con los dispositivos conectados. En este caso se hace necesario un protocolo serie que permita comunicar el microcontrolador y el ordenador. Debido a que este tipo de proyectos utilizan un único ambiente de programación, se hace evidente que los microcontroladores deberían ser una extensión del entorno de desarrollo en lugar de un dispositivo ajeno al proyecto, con su propio lenguaje de programación.

El desarrollo inicial de Firmata se centró en la placa de Arduino y en la actualidad sigue siendo el foco principal. La librería ha sido portada a toda la familia de Arduino y a Wiring. Cualquier placa compatible puede utilizar el protocolo Firmata o la librería asociada.

Pero no solo existe Firmata como protocolo de comunicaciones, también hay otros tipos de protocolos, protocolos ASCII, Open Sound Control, Gainer, USB HID, MIDI, SLIP etc... y precisamente Hans-Chistoph se basó en todos ellos para crear un protocolo estándar y principalmente en el protocolo MIDI.

El protocolo Firmata se basa en la representación de la API de Arduino (comandos del lenguaje) y los tipos de datos que se transfieren entre la placa y el ordenador. Está enfocado en la facilidad de uso aunque esto conlleve un peor rendimiento. El protocolo MIDI fue elegido como el núcleo central de Firmata debido a su eficiencia, su facilidad y por la gran cantidad de implementaciones existentes de libre acceso. Firmata implementa solo el formato de mensajes de MIDI.

MIDI (Musical Instrument Digital Interface) es un protocolo, interfaz digital y conectores que se utilizan para comunicar y conectar ordenadores, instrumentos musicales eléctricos y otros dispositivos entre si.

El protocolo MIDI utiliza unos mensajes estándar para la comunicación. En el caso de Firmata estos mensajes han sido sustituidos y se creó un nuevo conjunto de mensajes tanto para los tipos de datos (analógicos y digitales) como para los mensajes de control (pinMode, digitalWrite, etc...). Esto hace posible representar la API de Arduino usando mensajes de Firmata además, da soporte a más de 16 pins analógicos con una resolución de 14 bits y más de 128 pines digitales.

Gracias a su condición de código abierto, se han implementado diferentes versiones que dan soportes a multitud de funcionalidades de los microcontroladores. La versión original es la Standard_Firmata que viene se incluye dentro de las versiones del entorno oficial de Arduino y Wiring. Hay que recordar que el entorno de desarrollo de Arduino se basa en la plataforma Wiring. Esta versión incluye soporte para las siguientes características:

Entradas y salidas analógicas
Entradas analógicas
Salidas PWM
Conmutación entre entradas y salidas analógicas
Servomotores
Matrices de LEDs
I2C
Además de las funcionalidades a las que tenemos acceso, también hay que destacar que es compatible con multitud de lenguajes de programación y es multiplataforma. Solo tenemos que buscar en los repositorios como GitHub y encontraremos infinidad de implementaciones de este protocolo. A continuación mostraremos unos cuantos pero puedes encontrar muchos más en la web oficial.

Pyduino (Python)
Processing
C++/openFrameworks
Solid Soils (C#)
Sharpduino (C#)
4ntoine (Java)
Johnny-five (JavaScript / node.js)
Hardbap (Ruby)
Carica-firmata (PHP)
Volviendo hacer mención a lo que dice el creador de Firmata Hans-Chistoph, es muy buena idea hacer que Arduino sea una extensión de el entorno o plataforma de programación que utilices pero, hay que tener en cuenta que tiene limitaciones, no va a servir para todos los casos que queramos.

Sin duda alguna nos abre las puertas a otros lenguajes de programación con el que nos sintamos más cómodos, como menciona en alguno de sus capítulos Gabriel Viso en el podcast Pitando, la programación física puede ser más divertida con lenguajes como Python.

A continuación te dejamos unos ejemplos donde hemos utilizado Firmata con C# y con JavaScript.

Control Arduino motor 28BYJ-48 con una aplicación WPF
Recurso del día

Visualino

Visualino es un entorno de programación para Arduino. Está basado en la plataforma Google Blockly, el editor visual que permite crear entornos de desarrollo de lenguajes visuales. Es muy fácil de usar gracias a su entorno intuitivo y a que se encuentra en múltiples idiomas. Al contrario de plataformas como S4A, genera el código nativo de Arduino a partir de la programación por bloques, lo que permite la ejecución de programas independientemente del ordenador. Es un software libre y puede ser modificado.

Muchas gracias a todos por los comentarios y valoraciones que nos hacéis en iVoox, iTunes y en Spreaker, nos dan mucho ánimo para seguir con este proyecto.