Información en vídeo #

Conceptos básicos y ejemplo con intercambio de un solo dato:

Ejemplo de intercambio de distintos tipos de datos en ambos sentidos:

Introducción y objetivos #

En este documento se muestra cómo realizar una comunicación Wifi por MQTT con un microcontrolador Esp32, utilizando dos servidores de forma simultánea, uno en local y otro en remoto, de forma que se pueda obtener lo mejor de cada uno. Todos los recursos utilizados (excepto el material físico) son gratuitos.

Este documento pertenece al nivel medio de comunicación Wifi con microlsb, recomendamos realizar previamente los bloques fundamentos y nivel inicial, si bien, en el siguiente apartado se listan todos los recursos utilizados necesarios para comprender completamente el proceso.

En cualquier caso, todas las dudas así como ideas que surjan durante el proceso, se pueden compartir en los comentarios del vídeo y en el foro de la plataforma.

Objetivos:

  1. Enviar lecturas de temperatura y humedad cada segundo a un servidor local.
  2. Enviar lecturas cada 10 segundos de temperatura y humedad a un servidor remoto.
  3. Recibir órdenes en un servidor local procedentes de un servidor remoto.
  4. Recibir estados digitales en un servidor remoto, procedentes de un servidor local.

El servidor remoto elegido es io.adafruit.com en su versión gratuita, que permite una media de un mensaje cada 2 segundos.

Recursos utilizados #

  • Material
    • Esp32 o Esp8266
    • Sensor de temperatura y humedad DHT22
    • Pulsador, led y resistencias.
  • Cuenta gratuita en servidor MQTT remoto io.adafruit.com

Cableado y esquema del proceso #

  • Sensor DHT22 de temperatura y humedad -> GPIO13
  • Pulsador o interruptor con resistencia externa pull-up (10kOhm aproximadamente) -> GPIO2
  • Led con resistencia limitadora (220 Ohm aproximadamente) -> GPIO15

El servidor utilizado para almacenar gestionar el proceso MQTT en local, será Mosquitto y el servidor en remoto, io.adafruit.com. El software que se conectará a ambos servidores para el intercambio de mensajes, será Node Red, siguiendo en total un esquema similar al siguiente:

Programación #

Programa en el Esp32 #

Como se indica en los objetivos, el programa del Esp32, deberá hacer lo siguiente:

  1. Enviar lecturas de temperatura y humedad cada segundo a un servidor local.
  2. Gestionar el estado de activación del GPIO15 en función de las órdenes recibidas desde el servidor local.
  3. Enviar al servidor local el estado de un pulsador en el GPIO2 cada vez que éste cambie.

Conexión a la red Wifi y al servidor local:

Envío de la temperatura un segundo y al segundo siguiente la humedad. Se ha utilizado la funcionalidad «secuencia», establecida, como se puede ver, con una frecuencia de 1 segundo y dos ciclos, ya que se envían dos datos. Además, se ha elegido el bloque de publicar que publica cuando recibe una orden. Estas órdenes provienen precisamente del bloque secuencia. Temas:

  • Pedroddf/f/temperatura
  • Pedroddf/f/humedad

Cada vez que se reciba en el tema «Pedroddf/f/salida15» un 1, «on», «true» o similar, se activará el contacto asociado a la lectura MQTT y activará el GPIO15, que permanecerá activo mientras no se reciba un 0 o similar (off, false, etc.):

Finalmente, en el tema «Pedroddf/f/entrada2» se envía el estado del pulsador conectado al GPIO2 cuando este cambie, siempre que el cambio sea con una frecuencia superior a 500 segundos.

Programa básico en Node Red #

Configuración de la conexión al servidor local en el PC, teniendo en cuenta que en este ejemplo la ip asignada por el rúter al PC es 192.168.1.85:

Configuración de la conexión al servidor remoto, teniendo en cuenta que en este caso, en la pestaña de «Security» hay que añadir las credenciales de conexión:

Suscripción al tema en el que el Esp32 publica la temperatura en local, limitación de mensajes cada 10 segundos y publicación de temperatura en el servidor remoto:

La gestión de la humedad será igual. Para la gestión del estado del pulsador, se puede establecer un límite de tiempo inferior, ya que se supone que no se va a accionar con una alta frecuencia y así se evita demasiado retraso en la recepción del estado.

Para pasar las órdenes de encendido o apagado desde el servidor remoto al local, se utilizarán los nodos justo a la inversa, se suscribe al servidor remoto y publica en el local.

En una de múltiples instancias en Node Red, se está detectando que el uso del «delay» impide la correcta comunicación en ambos servidores en ocasiones. Obsérvese que tienen que estar conectados todos los nodos, no como ocurre en la siguiente imagen, en la que se ha desconectado la suscripción al servidor local:

Por ello se propone esta otra solución:

Configuración de io.adafruit.com #

Panel de gestión: