Marcio Cunha

Cómo configurar el protocolo MQTT en ESP32 para domótica

Aprende a implementar mensajería ligera con ESP32 y MQTT vía Wi-Fi para integrar actuadores IoT locales con brokers seguros.

Marcio Cunha•4 min
También disponible en:EnglishPortuguês
Resumen
  • El protocolo MQTT opera bajo una arquitectura publish-subscribe optimizada para microcontroladores con estrictos límites de energía y banda
  • La librería PubSubClient simplifica la gestión de conexiones TCP y el intercambio de paquetes JSON entre el ESP32 y el broker central
  • Asegurar las credenciales Wi-Fi y habilitar encriptación TLS en el broker previene escuchas clandestinas en la red local
  • Aislar redes físicas de IoT utilizando herramientas como VLANs en switches gestionables protege la infraestructura crítica
  • Gestionar las caídas de conexión con rutinas de reconexión automática asegura el funcionamiento continuo de los actuadores del hogar

Qué es MQTT y por qué usarlo en ESP32

En la automatización residencial moderna, conectar dispositivos físicos a una red inalámbrica requiere protocolos que consuman mínimos recursos de procesamiento y ancho de banda. MQTT, cuyas siglas significan Message Queuing Telemetry Transport, funciona exactamente como un sistema de correo ultraligero diseñado para computadoras diminutas como el ESP32. A diferencia del protocolo HTTP que abre y cierra una nueva conexión en cada petición, MQTT mantiene un canal TCP persistente y abierto con un servidor central llamado broker. En la práctica, esto significa que el microcontrolador puede enviar un comando o recibir un aviso al instante, gastando muy poca energía y operando perfectamente incluso cuando la conexión oscila. Para comprender mejor cómo la estabilidad afecta tu red, también vale la pena revisar cómo verificar la pérdida de paquetes con ping en tu red inalámbrica.

La arquitectura Publish-Subscribe en la práctica

El funcionamiento de MQTT se basa en el concepto de tópicos y en la división de roles entre publicadores y suscriptores. Un tópico actúa como un canal de mensajería estructurado por rutas en formato de texto, por ejemplo, 'casa/sala/luz'. Cuando el ESP32 quiere encender una lámpara conectada a un relé, publica un mensaje en ese canal. El broker recibe esta información y la reenvía inmediatamente a todos los dispositivos que demostraron interés en ese asunto suscribiéndose al mismo tópico. Este enfoque descentralizado elimina la necesidad de que el microcontrolador conozca la dirección IP de cada interruptor o sensor de la casa, simplificando enormemente la expansión del sistema a medida que agregas nuevos aparatos.

Preparando el entorno de desarrollo y librerías

Para poner manos a la obra con el ESP32 usando el IDE de Arduino, necesitamos preparar el terreno instalando las herramientas de comunicación esenciales. La librería más popular y probada para este propósito es PubSubClient, creada por Nick O'Leary, que gestiona toda la lógica de conexión con el broker y el envío de paquetes binarios. Antes de escribir el código de automatización, es altamente recomendable aislar tus dispositivos inteligentes en una red segregada, tal como explicamos al detallar cómo configurar VLANs en switches gestionables, asegurando que fallas en un ESP32 comprometido no afecten a tus computadoras principales. Con el ecosistema listo, definimos las credenciales de red y los parámetros básicos de conexión en la parte superior del código.

Escribiendo el código de conexión Wi-Fi y MQTT

A continuación presentamos un ejemplo funcional de código para que el ESP32 se conecte al Wi-Fi y establezca una sesión persistente con un broker MQTT local, como Mosquitto ejecutándose en un servidor de homelab. El código gestiona la reconexión automática en caso de que la señal caiga.

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

const char* ssid = "TuRedWiFi";
const char* password = "TuClaveWiFi";
const char* mqtt_server = "192.168.1.100";

WiFiClient espClient;
PubSubClient client(espClient);
const int relayPin = 23;

void callback(char* topic, byte* payload, unsigned int length) {
  String message;
  for (int i = 0; i < length; i++) {
    message += (char)payload[i];
  }
  if (String(topic) == "casa/sala/luz") {
    if (message == "ON") {
      digitalWrite(relayPin, HIGH);
    } else {
      digitalWrite(relayPin, LOW);
    }
  }
}

void reconnect() {
  while (!client.connected()) {
    if (client.connect("ESP32Client")) {
      client.subscribe("casa/sala/luz");
    } else {
      delay(5000);
    }
  }
}

void setup() {
  pinMode(relayPin, OUTPUT);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  }
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);
}

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

Tratando fallas de conexión y reconexión automática

Los dispositivos IoT instalados dentro de cajas de registro o paredes están expuestos a caídas esporádicas de señal y reinicios de enrutadores. Si la rutina de software no contempla estas fallas, el ESP32 puede bloquearse en un estado desconectado tras unos días de operación continua. En el script presentado, la función loop ejecuta cíclicamente la verificación client.connected(), activando el método de reconexión automática cuando es necesario. En la práctica, esto garantiza que el actuador recupere el control en pocos segundos tras el restablecimiento de la red inalámbrica, manteniendo el hogar totalmente responsivo sin intervención humana manual. Para profundizar en estos conceptos arquitectónicos en producción, consulte también nuestro análisis técnico sobre Cómo probar el chip de audio Realtek con multímetro en placa.

Consideraciones finales sobre seguridad y estabilidad

Implementar domótica con ESP32 y MQTT aporta una libertad increíble, pero exige atención rigurosa a la seguridad de la red local. Aunque el protocolo estándar utiliza el puerto 1883 sin cifrado, lo ideal en entornos de producción es habilitar soporte TLS en el puerto 8883 y utilizar autenticación por usuario y contraseña en el broker. Asimismo, mantener tus firmwares actualizados y monitorear el comportamiento físico de los relés garantiza una operación duradera, segura y totalmente integrada con tus asistentes de voz locales favoritos.