Controlar un LED con ESP32 y MQTT
MQTT es un protocolo ligero de mensajería ideal para IoT. Con un ESP32 y un broker local o en un VPS puedes controlar actuadores desde cualquier lugar del mundo.
Preparar el broker
Opción local (Mosquitto)
sudo apt update
sudo apt install mosquitto mosquitto-clients
sudo systemctl enable --now mosquitto
Opción VPS
- Contrata un VPS ligero (1 vCPU, 1 GB RAM).
- Instala Mosquitto y configura autenticación básica en
/etc/mosquitto/conf.d/seguro.conf:
allow_anonymous false
password_file /etc/mosquitto/passwd
listener 8883
cafile /etc/letsencrypt/live/tu-dominio/fullchain.pem
keyfile /etc/letsencrypt/live/tu-dominio/privkey.pem
certfile /etc/letsencrypt/live/tu-dominio/fullchain.pem
- Genera certificados TLS con Let’s Encrypt y crea usuarios con
mosquitto_passwd.
Firmware ESP32 (Arduino core)
#include <WiFi.h>
#include <PubSubClient.h>
const char* ssid = "TuRed";
const char* password = "TuClave";
const char* mqtt_server = "broker.tudominio.com";
const int mqtt_port = 8883;
WiFiClientSecure espClient;
PubSubClient client(espClient);
const int ledPin = 2;
void callback(char* topic, byte* payload, unsigned int length) {
String mensaje;
for (unsigned int i = 0; i < length; i++) mensaje += (char)payload[i];
digitalWrite(ledPin, mensaje == "ON" ? HIGH : LOW);
}
void reconnect() {
while (!client.connected()) {
if (client.connect("esp32-led", "usuario", "password")) {
client.subscribe("casa/sala/led");
} else {
delay(2000);
}
}
}
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
espClient.setCACert("-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n");
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
}
void loop() {
if (!client.connected()) reconnect();
client.loop();
}
Para conexiones sin TLS ajusta el puerto 1883 y elimina setCACert, pero prioriza seguridad en despliegues reales.
Publicar desde cualquier lugar
- Usa
mosquitto_pub -h broker.tudominio.com -t casa/sala/led -m "ON". - Implementa dashboards con Node-RED, Home Assistant o apps móviles como MQTT Dash.
- Para automatización, crea reglas en tu VPS que escuchen webhooks y publiquen en el topic.
Buenas prácticas
- Segmenta topics por ubicación/dispositivo (
casa/sala/led). - Habilita TLS y autenticación para conexiones remotas.
- Implementa Last Will para detectar desconexiones inesperadas.
- Monitorea con
mosquitto_subo servicios como Grafana + Telegraf.
Con este flujo podrás encender y apagar un LED desde cualquier lugar del mundo usando MQTT y tu ESP32.
