Módulo 5

Comunicación con MQTT

Conectividad Inalámbrica

ESP32 Mecatrónica IoT UNAM

Introducción Teórica

MQTT (Message Queuing Telemetry Transport) es un protocolo de mensajería orientado a la comunicación entre dispositivos IoT (Internet of Things). Se basa en la publicación y subscripción de información, lo que permite a los dispositivos comunicarse entre sí de manera eficiente y confiable, incluso en redes con ancho de banda limitado o en condiciones de alta latencia.

En la mecatrónica, MQTT es esencial para la automatización y control de sistemas, donde los dispositivos deben intercambiar información en tiempo real. Además, su bajo consumo de energía y la capacidad de funcionar en redes inestables lo hacen ideal para aplicaciones de monitoreo remoto, como la supervisión de sistemas de producción en la industria manufacturera.

En México, por ejemplo, la empresa Bimbo utiliza MQTT en su proceso de producción para monitorear y controlar la calidad de sus productos en tiempo real, lo que les permite optimizar sus operaciones y reducir costos.

Explicación Técnica Detallada

El ESP32 es un microcontrolador de bajo costo con capacidades de WiFi y Bluetooth, lo que lo hace perfecto para aplicaciones IoT. Para configurar la comunicación MQTT en el ESP32, necesitamos configurar tanto la conexión WiFi como el cliente MQTT.

Primero, necesitamos incluir las bibliotecas WiFi y PubSub (MQTT) en nuestro código. Luego, debemos configurar los parámetros de nuestra red WiFi (nombre y contraseña) y el servidor MQTT al que nos conectaremos.

El siguiente código de ejemplo muestra cómo hacer esto en Arduino IDE:

C++
#include <WiFi.h>
#include <PubSubClient.h>

const char* ssid = "your_SSID";
const char* password =  "your_PASSWORD";
const char* mqtt_server = "broker.mqtt-dashboard.com";

WiFiClient espClient;
PubSubClient client(espClient);

void setup_wifi() {
  delay(10);
  // Conectar a la red WiFi
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void reconnect() {
  // Loop hasta que estemos conectados
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    // Crear un cliente ID aleatorio
    String clientId = "ESP32Client-";
    clientId += String(random(0xffff), HEX);
    // Intentar conectar
    if (client.connect(clientId.c_str())) {
      Serial.println("connected");
      // Una vez conectado, publicar un anuncio...
      client.publish("outTopic", "hello world");
      // ... y subscribirse
      client.subscribe("inTopic");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Esperar 5 segundos antes de reintentar
      delay(5000);
    }
  }
}

void setup() {
  Serial.begin(115200);
  setup_wifi();
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);
}

void loop() {
  if (!client.connected()) {
    reconnect();
  }
  client.loop();
}

En este código, la función setup_wifi() se encarga de conectar el ESP32 a la red WiFi. Luego, la función reconnect() se encarga de conectar el ESP32 al servidor MQTT y subscribirse a un tema. Finalmente, la función loop() se encarga de mantener la conexión MQTT.

Ejercicios Prácticos Visuales

1

Conectar ESP32 a servidor MQTT

Básico 15-20 min
Objetivo: Conectar el ESP32 a un servidor MQTT y publicar un mensaje.
Materiales: ESP32, cable USB, PC con Arduino IDE instalado.
Código: El código mostrado en la sección anterior.
Esquema de conexiones: No aplica, ya que no se conectan componentes externos.
Resultados esperados: El ESP32 se conecta a la red WiFi y al servidor MQTT, y publica un mensaje.
2

Subscribirse a tema MQTT

Intermedio 30-40 min
Objetivo: Subscribirse a un tema MQTT y mostrar los mensajes recibidos en el monitor serial.
Materiales: ESP32, cable USB, PC con Arduino IDE instalado.
Código: El código mostrado en la sección anterior, con la adición de una función de callback para manejar los mensajes recibidos.
Esquema de conexiones: No aplica, ya que no se conectan componentes externos.
Resultados esperados: El ESP32 se subscribe a un tema y muestra los mensajes recibidos en el monitor serial.
3

Publicar datos de sensor

Avanzado 60-90 min
Objetivo: Leer datos de un sensor y publicarlos a un tema MQTT.
Materiales: ESP32, cable USB, PC con Arduino IDE instalado, sensor (por ejemplo, un sensor de temperatura).
Código: El código mostrado en la sección anterior, con la adición de código para leer el sensor y publicar sus datos.
Esquema de conexiones: Conectar el sensor al ESP32 siguiendo las especificaciones del sensor.
Resultados esperados: El ESP32 lee los datos del sensor y los publica a un tema MQTT.

Proyecto Aplicado

Sistema de monitoreo de temperatura con MQTT

Aplicación práctica en mecatrónica

Este proyecto puede ser utilizado para monitorear la temperatura de un sistema en tiempo real.

Integración con sensores/actuadores

Se utiliza un sensor de temperatura para medir la temperatura.

Lista de materiales
  • ESP32
  • Cable USB
  • PC con Arduino IDE instalado
  • Sensor de temperatura
  • Software para visualizar datos (Node-RED)
Procedimiento paso a paso
  1. Conectar el sensor de temperatura al ESP32.
  2. Cargar el código al ESP32.
  3. Iniciar el software de visualización de datos.
  4. Conectar el ESP32 al PC y visualizar los datos de temperatura.

Código completo del proyecto: El código es similar al del ejercicio 3, pero con la adición de una interfaz gráfica en el PC para visualizar los datos.

Evaluación y Troubleshooting

Problemas Comunes
  • Problemas de conexión: Asegúrate de que el ESP32 está correctamente conectado a la red WiFi y que el servidor MQTT está activo y accesible.
  • Problemas de publicación/subscripción: Asegúrate de que los temas a los que te estás subiendo/publicando son correctos y que el servidor MQTT está configurado para permitir estas operaciones.
  • Problemas de hardware: Asegúrate de que el ESP32 y los componentes conectados a él están funcionando correctamente.
Criterios de Evaluación
  • Correcta configuración del ESP32
  • Correcta publicación/subscripción de mensajes MQTT
  • Correcta lectura de los datos del sensor
  • Correcta visualización de los datos