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:
#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
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.
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.
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
- Conectar el sensor de temperatura al ESP32.
- Cargar el código al ESP32.
- Iniciar el software de visualización de datos.
- 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