Introducción teórica #

MQTT es un protocolo de comunicación ligero diseñado para facilitar la transferencia de datos entre dispositivos o aplicaciones en una red, especialmente en entornos donde se requiere una comunicación eficiente, de baja latencia y baja tasa de intercambio de datos. Fue desarrollado por IBM en la década de 1990 y se ha convertido en un estándar ampliamente utilizado en el campo de la Internet de las cosas (IoT).

MQTT se basa en un modelo de publicación/suscripción. En lugar de que los dispositivos se comuniquen directamente entre sí, los dispositivos publican mensajes en «temas» o «topics», y otros dispositivos se suscriben a estos temas para recibir los mensajes relevantes. Esto permite una comunicación eficiente y escalable en redes con muchos dispositivos. Se muestra su funcionamiento con el siguiente ejemplo:

Diagrama

Descripción generada automáticamente

En el ejemplo anterior se aprecia cómo el microcontrolador, que tiene un sensor de temperatura, publica el dato de temperatura “25” en el tema “Temp”. Ese dato lo recibe solo el móvil, que es el único suscrito al tema “Temp”.

De igual forma, desde el ordenador de sobremesa se publica en el tema “Led” la palabra “ON”, que es recibida solo por el microcontrolador, posiblemente con el fin de que éste a continuación active una salida, pero esto último ya es un paso posterior que no depende de la comunicación, si no de la automatización realizada dentro del propio microcontrolador.

Este proceso de comunicación se puede ver también fácilmente en una conversación privada de WhatsApp entre dos personas. Esta comunicación entre ambas personas se lleva a cabo a través de un solo tema (dicha conversación), en el que las dos personas publican y al que las dos personas están suscritas.

Sin embargo, la comunicación con MQTT puede ser de uno a uno pero también de uno a muchos (broadcast).​ Un ejemplo de esto último sería un grupo de WhatsApp, en el que hay un tema (el grupo) al que muchas personas están suscritas y en el que esas mismas personas pueden publicar.

También se pueden organizar los temas por grupos y niveles y realizar suscripciones a multitud de temas o niveles, grupos, etc. Aquí se va a trabajar inicialmente con el formato mas sencillo de intercambio de información en un tema.

Uso del servidor io.adafruit para MQTT #

Hay multitud de servidores MQTT, algunos con versiones gratuitas limitadas en el tiempo o en número de mensajes y frecuencia de envío. Algunos de estos servidores incluyen también la opción de crear pantallas HMI (interfaz hombre – máquina) para interactuar con los dispositivos conectados, almacenar y graficar la información recibida, etc.

Se va a utilizar como ejemplo el servidor io.adafruit.com, debido a que tiene una versión gratuita muy funcional. Esta versión permite transmitir una media de un mensaje cada 2 segundos, con un máximo de 10 temas (topics) diferentes. Los mensajes pueden incluir datos sencillos o mensajes en JSON. En esta fase inicial se va a trabajar con mensajes que contengan solo un texto o un número.

Hay una cuestión muy importante a tener en cuenta para entender el método de trabajo llevado a cabo. Como muchos otros servidores, io.adafruit personaliza los temas en los que se intercambia información, de tal forma que el tema debe ir precedido del nombre de usuario + “/f/”. Siguiendo con el ejemplo del subapartado anterior, a continuación se muestra cómo habría que denominar a los temas para trabajar en io.adafruit, partiendo de un ejemplo en el que el usuario se llama “Pedroddf”:

Por simplicidad, io.adafruit nos permite referirnos directamente a lo que hemos considerado inicialmente nuestros temas (Temp y Led). Sin embargo, como eso no es nombre completo del tema para este servidor, a esa parte la denominan “Feed”. Es por esto que los mensajes se envían en los ejemplos anteriores en:

Pedroddf/feed/Temp

Pedroddf/ feed /Led

Simplificando la palabra feed por su inicial, queda el resultado final mostrado antes:

Pedroddf/f/Temp

Pedroddf/f/Led

Interfaz de usuario gráfica, Aplicación

Descripción generada automáticamente

Si otro usuario quiere realizar su comunicación usando los mismos feeds, tendrá que saber que el tema completo será el mismo que los anteriores pero cambiando Pedroddf por su nombre de usuario.

Tutoriales en vídeo sobre el uso práctico inicial de MQTT #

En el siguiente vídeo se explican de forma resumida y práctica los principios básicos del protocolo MQTT:

Y a continuación, se proporciona un vídeo en el que se detalla el proceso de trabajo con io.adafruit utilizando un software para ordenador que realiza la comunicación con el servidor, como si de un microcontrolador se tratara: