Más allá del kit: MQTT

MQTT

MQTT no es una plataforma IoT ni un servicio, es un protocolo de comunicación al mismo nivel que HTTP.

Con el protocolo MQTT y un broker público, se puede extender a cualquier aplicación IoT, no está restringido a las plataformas vistas y me permite interconectar Micro:bits entre ellas, con un móvil, con una web o cualquier elemento.

Pero si queremos los servicios de almacenamiento, gráficas, etc… necesitamos montar un sistema que lo haga, por ejemplo Raspberry Pi + NodeRed.

MQTT son las siglas de Message Queue Telemetry Transport y tras ellas se encuentra un protocolo ideado por IBM y liberado para que cualquiera podamos usarlo enfocado a la conectividad Machine-to-Machine (M2M).

Está enfocado al envío de datos en aplicaciones donde se requiere muy poco ancho de banda. Además, sus características le permiten presumir de tener un consumo realmente bajo así como precisar de muy pocos recursos para su funcionamiento.

Cómo funciona MQTT

En el caso de que la comunicación principal se base en HTTP, la solución tradicional para enviar información al dispositivo sería HTTP Polling. Esto es ineficiente y tiene un coste elevado en aspectos de tráfico y/o energía. Una manera más novedosa de hacerlo sería con el protocolo MQTT, que permite crear una conexión HTTP completa bidireccional.

La diferencia entre una HTTP y MQTT es que MQTT mantiene una conexión hacia el servicio abierta y puede responder mucho más rápido a los cambios en el feed. La HTTP solo conecta al servicio cuando se hace una petición (request) y es más apropiada para proyecto donde el dispositivo permanece en modo sleep (para reducir el consumo) y despierta solo para mandar o recibir datos. (Push vs pull)

Los elementos de MQTT son:

  • Broker
  • Publisher
  • Subscriber

Es un transporte de mensajería de publicación/suscripción que es extremadamente ligero e ideal para conectar dispositivos pequeños a redes con ancho de banda mínimo. El MQTT es eficiente en términos de ancho de banda, independiente de los datos y tiene reconocimiento de sesión continua, porque usa TCP. 

Para filtrar los mensajes que son enviados a cada cliente los mensajes se disponen en topics organizados jerárquicamente. Un cliente puede publicar un mensaje en un determinado topic. Otros clientes pueden suscribirse a este topic, y el broker le hará llegar los mensajes suscritos.

La base del protocolo el el Broker o servidor:

Como MQTT Puede Hacer Control Remoto

Para hacer un control remoto desde cualquier parte del mundo de un dispositivo en casa o en el aula, saltándose todas restricciones de NAT y seguridad, es posible. Solo hace falta que desde casa o el aula se de acceso a la red o a los dispositivos en ella a:

  • Puerto 1883 y/o 8883 de la IP del broker MQTT

Cualquier elemento conectado al broker MQTT puede ser controlado remotamente.

Y así es como funcionan todos los elemento “smart” que compramos:

Topics MQTT

La comunicación se basa en unos «topics» (temas), que el cliente que publica el mensaje crea y los nodos que deseen recibirlo deben suscribirse a él. La comunicación puede ser de uno a uno, o de uno a muchos.

Dentro de la arquitectura de MQTT, es muy importante el concepto «topic» o «tema» en español ya que a través de estos «topics» se articula la comunicación puesto que emisores y receptores deben estar suscritos a un «topic» común para poder entablar la comunicación.

Un «topic» se representa mediante una cadena y tiene una estructura jerárquica. Cada jerarquía se separa con ‘/’.

Por ejemplo, «edificio1/planta5/sala1/raspberry2/temperatura» o «/edificio3/planta0/sala3/arduino4/ruido«. De esta forma se pueden crear jerarquías de clientes que publican y reciben datos, como podemos ver en la imagen:

Existen dos comodines en MQTT para suscribirse a varios topics (no se pueden usar para publicar):

  • Multi-level Wildcard: # (se suscribe a todos los hijos bajo esa cola)
  • Single Level Wildcard: + (se suscribe solo a ese nivel)

MQTT Explorer

MQTT Explorer es un cliente MQTT integral que proporciona una descripción general estructurada de sus topics MQTT y hace que trabajar con dispositivos/servicios en su broker sea muy simple.

Web http://mqtt-explorer.com/

​​

Instalar.

Clientes MQTT para móvil

Existen mucho pero vamos a usar: https://www.iot-onoff.com/ 

Broker MQTT

Vamos a un un broker público con una subscripción gratuita, HiveMQ: https://www.hivemq.com/ 

Existen otros similares como:

Pricing: https://www.hivemq.com/pricing/ 

Vamos a usar el broker siguiente, pero cada uno puede crearse el suyo.:

  • Dirección: 45a2782ea9724a0abf0ddb6c6c1a1830.s2.eu.hivemq.cloud
  • Puerto: 8883
  • Usuario: CursoCRIE
  • Password: Criexxx

Y configurar en el MQTT Explorer:

Y conectarse con MQTT Explorer:

Probar a enviar mensajes y leer los publicados.

Thingspeak también funciona con MQTT: https://es.mathworks.com/help/thingspeak/mqtt-basics.html 

Ir a devices MQTT y configurar un dispositivo para que publique y se suscriba a un canal.

HiveMQTT

HiveMQ es un broker MQTT y una plataforma de mensajería basada en cliente diseñada para mover datos dentro y fuera de dispositivos IoT conectados de manera rápida, eficiente y confiable.

Website: https://www.hivemq.com/

Registro

Hacer clic en el botón «Cloud» en la página.

../../_images/IOT_HiveMQ_01.png

Click “Sign up now”.

../../_images/IOT_HiveMQ_02.png

Elegir “Sign Up” para registrar con la información (email, passwords).

../../_images/IOT_HiveMQ_03.png

Requisitos de la contraseña

../../_images/IOT_HiveMQ_04.png

Configurar HiveMQTT

Despues de registrarse, ir a: https://www.hivemq.com/mqtt-cloud-broker/ .

../../_images/IOT_HiveMQ_02.png

Login con el email y password.

../../_images/IOT_HiveMQ_05.png

Click “CREATE CLUSTER”.

../../_images/IOT_HiveMQ_06.png

Elegir “Azure” o “AWS” y click “CREATE CLUSTER”.

../../_images/IOT_HiveMQ_07.png

Click “MANAGE CLUSTER”.

../../_images/IOT_HiveMQ_08.png

Click “Access Management”, configurar el  “Username” y “Password”, luego click “ADD”. 

../../_images/IOT_HiveMQ_09.png

¡Terminado! Recordar el nombre de usuario y la contraseña; esta información será necesaria en la configuración de MQTT en MakeCode.

../../_images/IOT_HiveMQ_10.png

Programar MQTT en Micro:bit

Elegir “ESP8266_IoT”.

../../_images/IOT_HiveMQ_13.png

En el bloque de inicio, inicialice esp8266 y complete con el nombre y contraseña del wifi para conectarse.

../../_images/IOT_HiveMQ_14.png

Configurar las aplicaciones de MQTT, configure «esquema» como «TSL», añadir el nombre de usuario y la contraseña con los de HiveMQ.

../../_images/IOT_HiveMQ_15.png

Click “Overview” y copiar el “Host” y “port” en MakeCode.

../../_images/IOT_HiveMQ_16.png

Configurar un Cliente Web en HiveMQ (Opcional)

Click “Getting started”, elegir “HiveMQ Websocket Client”.

../../_images/IOT_HiveMQ_17.png

Poner el User y Password, luego click “Connect” para conectarse por MQTT .

../../_images/IOT_HiveMQ_19.png

Aparece un aviso de «conectado» marcado en verde si la conexión se realiza correctamente. Haga clic en «Agregar suscripción a nuevo tema»..

../../_images/IOT_HiveMQ_20.png

Elegir “Subscribe”.

../../_images/IOT_HiveMQ_21.png

Si se completa, se puede enviar mensajes desde MakeCode.

El «hola» en el bloque es el mensaje que vamos a enviar, puedes configurarlo tú mismo. Y el bloque de temas: “testtopic/1” son las configuraciones previas en la plataforma, puedes reemplazar “#” con cualquier número.

../../_images/IOT_HiveMQ_22.png

Siguiendo los pasos anteriores, presione el botón A en micro:bit para enviar «hola» a la plataforma.

../../_images/IOT_HiveMQ_23.png

Por supuesto, podemos enviar datos desde la plataforma a la parte local, configurar el tema como «testtopic/2» y añadir los mensajes en «Mensaje» y luego hacer clic en «Publicar» para enviar. Y asegurarse de mantener el mismo tema en los bloques.

../../_images/IOT_HiveMQ_24.png

Envir el número “2” desde la plataforma y muéstralo en el micro:bit.

../../_images/IOT_HiveMQ_25.png

Programa completo:

../../_images/IOT_HiveMQ_26.png

Código: https://makecode.microbit.org/S26730-27939-32964-07709

Estación Meteorológica con MQTT

Mandar los datos de la estación meteorológica por MQTT.

Publicar los datos en el topic: (En “nombre” poner el nombre del alumno para identificarlo)

  • Temperatura: “nombre”/estacion/temperatura
  • Humedad: “nombre”/estacion/humedad
  • Presión: “nombre”/estacion/presion
  • Iluminación: “nombre”/estacion/iluminacion

Además suscribirse en Microbit a los topics:

  • “nombre”/accion/pantalla – muestra por pantalla una serie de iconos en base al número recibido
  • “nombre”/accion/sonido – sonido en base al número recibido

Ejemplo base: https://www.elecfreaks.com/learn-en/microbitKit/iot_kit/IOT_bit_case03.html 

Código Base: https://makecode.microbit.org/S53218-80602-32411-15434 

Configurar conexión:

Publicar datos:

Suscribirse:

Comprobar en MQTT Explorer que se reciben los datos:

Hacer gráficas de los datos recibidos en MQTT Explorer:

Solución: https://makecode.microbit.org/S61662-88281-59527-81418 

Riego automático con MQTT

Basándose en el ejemplo de riego automático: https://www.elecfreaks.com/learn-en/microbitKit/iot_kit/IOT_bit_case04.html 

Código base: https://makecode.microbit.org/86394-37873-04244-02496 

Publicar los datos en el topic: (En “nombre” poner el nombre del alumno para identificarlo)

  • Temperatura: “nombre”/riego/suelo
  • Humedad: “nombre”/riego/agua
  • Estado de la válvula: “nombre”/riego/valvula

Además suscribirse en Microbit al topic:

  • “nombre”/accion/valvula – abrir y cerrar la válvula

Publicar datos:

Subscripción:

Solución: https://makecode.microbit.org/S11068-94904-25302-37751 

Probar con la app https://www.iot-onoff.com/ ha hacer un dashboard para controlar y monitorizar el riego.

1 comentario en “Más allá del kit: MQTT

  1. Pingback: Más allá del kit: MQTT -

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.