Hero Image
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.