IoT-Wifi-MQTT

MQTT

MQTT es un protocolo dentro de los protocolos entre máquina a máquina M2M. MQ significa Message Queue, son mensajes que se publican y otros se suscriben. Llegan a un servidor que también se llama Broker o Router, los va almacenando en una cola y se eliminan cuando son entregados. Un ejemplo fácil de entender son los mensajes SMS, que mientras no estas conectado, tus mensajes están en un servidor, y cuando te conectas, se descargan tus mensajes en tu móvil. Las últimas siglas TT significa Telemetry Transport

protocolos-rRPC.png

Fuente Luis Llamas CC-NC-BY-SA https://www.luisllamas.es/protocolos-de-comunicacion-para-iot/

Los clientes inician una conexión TCP/IP con el broker, el cual mantiene un registro de los clientes conectados. Esta conexión se mantiene abierta hasta que el cliente la finaliza. Por defecto, MQTT emplea el puerto 1883 y el 8883 cuando funciona sobre TLS.

Fuente Luis Llamas CC-NC-BY-SA https://www.luisllamas.es/protocolos-de-comunicacion-para-iot/

TCP/IP son los protocolos de comunicación en Internet. TLS Transport Layer Security es un protocolo que se añade para asegurar la privacidad y seguridad de los datos. Por eso hay que enviar un usuario y una contraseña para conseguir esta seguridad.

En los mensajes, se añade un texto que haga de filtro, que se llama topic, este topic permite al broker filtrar de todos los mensajes que se reciben a qué clientes hay que entregar estos mensajes. Estos topic suelen estar jerarquizados, por ejemplo Casa/Cocina/Temperatura y un cliente puede estar suscrito a Casa/+/Temperatura por lo que recibiría los datos de Casa/Cocina/Temperatura pero también los de Casa/Salon/Temperatura, etc... Si quieres saber más de los tópic te recomendamos la página https://www.luisllamas.es/que-son-y-como-usar-los-topics-en-mqtt-correctamente/

El MQTT se ha hecho muy popular en los dispositivos electrónicos, porque:

Para saber más te recomendamos la página de Luis Llamas https://www.luisllamas.es/protocolos-de-comunicacion-para-iot/

Y el broker ¿de donde?

Puedes montarte tu propio broker en un ordenador, pues es código abierto, por ejemplo instalar Mosquitto https://mosquitto.org/ en una raspberry.

O bien usar brokers MQTT gratuitos y públicos en Internet, con sus limitaciones de anchos de banda o número de conexiones... como HIVEMQ Info: http://www.mqtt-dashboard.com/ con la dirección Broker.hivemq.com o también el propio Mosquito https://mosquitto.org/ con la dirección test.mosquitto.org

Tenemos que tener en cuenta que los servidores MQTT públicos gratuitos no son seguros, cualquiera puede suscribirse a nuestros mensajes y publicar en ellos por lo tanto enviar órdenes. Evitar usar estos brokers en sistemas que no sean educativos y de pruebas.

El protocolo MQTT también se usa en Domótica, por ejemplo aquí en el curso de Raspberry apartado domótica

Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU

logo.png

IoT - Wifi- MQTT - ADAFRUIT

Esta compañía de circuitos electrónicos se hizo famosa por sus LEDS NEOPIXEL que lo vimos en el curso de mClon con nanoArduino, dedica parte de su producción a la didáctica y vamos a utilizar los servicios MQTT que ofrece gratuitamente. (Esto es típico, por ejemplo en los cursos de mBot utilizamos el software mBlock de la compañía Makeblock.)

Registro

Nos registramos dentro del plan gratuito de su plataforma https://io.adafruit.com/

ada1.png

El registro es típico, pidiendo un nombre de usuario, una contraseña y un correo electrónico para recuperar la contraseña.

Utiliza un nombre de usuario lo más sencillo posible, pero a la vez original, pues se convertirá parte de la URL del resto de acciones que vas a realizar.

Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU

logo.png

IoT-Wifi-MQTT-ADAFRUIT-FEED

Vamos primero a definir las variables que vamos a utilizar, o como lo llama ADAFRUIT la "comida" FEED, en estos FEED se almacenarán las salidas de nuestro Arduino que utilizaremos el sensor de humedad y temperatura y también se almacenará la entrada para encender un led. Esto lo tenemos que interpretar según el protocolo MQTT que hemos visto, como colas de mensajes que el proveedor almacena y el cliente se suscribe.

En el caso de los canales de humedad y temperatura, el proveedor será nuestro Arduino y el cliente será un dashboard que crearemos dentro de Adafruit. En el caso del led, el proveedor será el dashboard y el cliente será el Arduino.

Entramos en feed, creamos un grupo que le ponemos un nombre acorde al conjunto de feeds que tendrá (esto es útil si tenemos diferentes placas o el lugar donde están esas placas: cocina, salón, ... y dentro de cada grupo los diferentes sensores y actuadores: temperatura, persianas, luz.... 

Una vez creado el grupo, procedemos a crear 3 feeds : hum, temp y led

ada2.png

Como se puede ver, la URL es personalizada con el nombre de usuario, que para mi caso es https://io.adafruit.com/javierquintana/feeds (no intentes entrar, tú no verás nada, yo sí)

Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU

logo.png

IoT-Wifi-MQTT- ADAFRUIT-Dashboard

Ahora vamos a crear un panel, para ello entramos en IO - DASHBOARD y creamos un panel

ada3.png

Editando el Dashboard

Dentro del panel podemos hacerlo público, el mio es este https://io.adafruit.com/javierquintana/dashboards/panel

Y podemos crear los bloques que nosotros utilizaremos los de tipo gauge y tipo switch (marcados en la figura)

ada4.png

ada5.png

Cada vez que creas un bloque, pide a qué feed lo asocias :

ada6.png

Los bloques puedes definir que sean públicos:

ada7.pngada8.png

Bloques de los sensores de visualización (El Arduino como proveedor, el Dashboard como cliente)

Vamos a crear dos bloques:

Y pondremos las propiedades de los bloques HUMEDAD Y TEMPERATURA acordes a las características de los sensores:

ada-hum.png

ada-temp.png

Bloques de acción (El Arduino como cliente, el Dashboard como proveedor)

Ahora vamos a crear un bloque LED AZUL tipo switch asociado al feed led

Definimos en las propiedades de este bloque que vamos a enviar:

ada-led.png

Los bloques de acción si los haces públicos se pueden ver pero no se pueden tocar, para que gente no autorizada actúen sobre las placas. Por eso en https://io.adafruit.com/javierquintana/dashboards/panel NO PUEDES ACCIONARLO

Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU

logo.png

IoT-Wifi-MQTT-ADAFRUIT-ARDUINOBLOCKS

En ARDUINOBLOCKS seleccionamos Comunicaciones -IoT.MQTT y el bloque de Iniciar ESP01

ada11.png

Con estos datos:

ada9.png

Así tiene que quedar:

bloquearduinoblockswifi.png

El programa buble hacemos:

ada12.png

Lo grabamos en el Arduino con la placa TDR-STEAM y el ESP01 conectado como hemos definido anteriormente y si entramos en nuestro panel, veremos que visualiza la temperatura y humedad de ese momento. Si tenemos un poco de paciencia, pues sólo nos hace caso cada 10 segundos, actuamos sobre el switch y vemos que enciende o apaga el led.

¿Por qué cada 10 segundos?

Si entramos en nuestro perfil contratado, el plan gratuito permite sólo 30 datos por minuto, si no tocamos el switch de encender el led, podríamos bajar esos 10 segundos a 4 segundos pues 2 gauges temperatura y humedad * (60/4) = 30 datos por minuto pero en el momento que toquemos el switch te penalizará a esperarte pues te has pasado de 30 datos por minuto.

Para poder accionar sobre el switch, subimos esos 4 segundos a 10, esto nos da 2 gauges temperatura y humedad * (60/10) = 12 datos por minuto, luego podemos accionar el switch 30-12=18 veces por minuto.

Puedes bajar de 10 pero cuanto más bajes, menos puedes tocar el switch, tú mismo.

Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU

logo.png