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.
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:
- CloudMQTT: https://www.cloudmqtt.com/
- MyQTT Hub: https://myqtthub.com/
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.
Click “Sign up now”.
Elegir “Sign Up” para registrar con la información (email, passwords).
Requisitos de la contraseña
Configurar HiveMQTT
Despues de registrarse, ir a: https://www.hivemq.com/mqtt-cloud-broker/ .
Login con el email y password.
Click “CREATE CLUSTER”.
Elegir “Azure” o “AWS” y click “CREATE CLUSTER”.
Click “MANAGE CLUSTER”.
Click “Access Management”, configurar el “Username” y “Password”, luego click “ADD”.
¡Terminado! Recordar el nombre de usuario y la contraseña; esta información será necesaria en la configuración de MQTT en MakeCode.
Programar MQTT en Micro:bit
Elegir “ESP8266_IoT”.
En el bloque de inicio, inicialice esp8266 y complete con el nombre y contraseña del wifi para conectarse.
Configurar las aplicaciones de MQTT, configure «esquema» como «TSL», añadir el nombre de usuario y la contraseña con los de HiveMQ.
Click “Overview” y copiar el “Host” y “port” en MakeCode.
Configurar un Cliente Web en HiveMQ (Opcional)
Click “Getting started”, elegir “HiveMQ Websocket Client”.
Poner el User y Password, luego click “Connect” para conectarse por MQTT .
Aparece un aviso de «conectado» marcado en verde si la conexión se realiza correctamente. Haga clic en «Agregar suscripción a nuevo tema»..
Elegir “Subscribe”.
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.
Siguiendo los pasos anteriores, presione el botón A en micro:bit para enviar «hola» a la plataforma.
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.
Envir el número “2” desde la plataforma y muéstralo en el micro:bit.
Programa completo:
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.
Pingback: Más allá del kit: MQTT -