14 de julio de 2026 · 11 min
Domótica con ESP32 y MQTT: 4 relés por WiFi sin apps de terceros
Prendé y apagá luces, bombas o lo que quieras desde el celular, con un ESP32, un módulo de 4 relés y el protocolo que usa la industria. Sin nubes propietarias que desaparecen en dos años.
Los enchufes “inteligentes” del supermercado tienen un problema que no figura en la caja: dependen de una app y un servidor que no controlás. La app se deja de mantener, el servidor cierra, y tu casa vuelve a ser tonta. La alternativa que armamos los electrónicos: ESP32 + MQTT. Mismo resultado, cero dependencia, y de paso aprendés el protocolo que usa la industria para IoT en serio.
Qué vas a armar
Un ESP32 conectado a un módulo de 4 relés, controlado por MQTT desde el celular. Cada relé puede manejar una luz, una bomba, un ventilador — cualquier carga. El sistema queda en tu red WiFi y responde en milisegundos.
Lista de compra
| Componente | Cantidad | Para qué |
|---|---|---|
| ESP32 DevKit | 1 | El cerebro con WiFi |
| Módulo 4 relés optoacoplados 5V | 1 | Las 4 salidas (250V 10A) |
| Fuente 5V 2A | 1 | Alimenta ESP32 y relés |
| Cables dupont | 1 juego | Conexionado |
MQTT en dos párrafos
MQTT es un protocolo de mensajes ultraliviano: los dispositivos se conectan a un broker (el cartero central) y publican o escuchan topics (canales con nombre, tipo casa/rele/1). Cuando tu celular publica “ON” en casa/rele/1, el broker se lo entrega al ESP32, que prende el relé. Simple, rapidísimo y estándar.
El broker puede ser: un broker público gratuito para probar (como test.mosquitto.org), o —la opción seria— uno propio corriendo en cualquier PC o mini servidor de tu casa (Mosquitto es gratis y pesa nada). Para el celular: cualquier app de “MQTT Dashboard” gratuita te da botones y estado.
Conexionado
- Fuente 5V → VIN del ESP32 y VCC del módulo de relés · GND común a todo
- IN1 → GPIO 26 · IN2 → GPIO 27 · IN3 → GPIO 32 · IN4 → GPIO 33
Atención — si vas a manejar 220V: bornera bien apretada, cables de sección adecuada, y todo dentro de una caja cerrada. Si no tenés experiencia con tensión de red, arrancá con cargas de 12V o pedile ayuda a un electricista. Los relés aguantan 10A, pero el que tiene que aguantar sos vos.
El código
Instalá la librería PubSubClient desde el gestor del IDE.
#include <WiFi.h>
#include <PubSubClient.h>
const char* WIFI_SSID = "TU_RED";
const char* WIFI_PASS = "TU_CLAVE";
const char* BROKER = "test.mosquitto.org"; // o la IP de tu Mosquitto
const char* TOPIC_BASE = "bypcasa/rele/"; // cambialo por algo único
const int RELES[4] = {26, 27, 32, 33};
// Los modulos de rele son activo-bajo: LOW = prendido
const int ON = LOW, OFF = HIGH;
WiFiClient wifi;
PubSubClient mqtt(wifi);
void alRecibir(char* topic, byte* payload, unsigned int len) {
int n = topic[strlen(topic) - 1] - '1'; // ultimo caracter: 1-4
if (n < 0 || n > 3) return;
bool prender = (len > 0 && (char)payload[0] == '1');
digitalWrite(RELES[n], prender ? ON : OFF);
}
void conectarMqtt() {
while (!mqtt.connected()) {
if (mqtt.connect("esp32-reles-byp")) {
// se suscribe a bypcasa/rele/1 ... /4
for (int i = 1; i <= 4; i++) {
char t[24];
snprintf(t, sizeof(t), "%s%d", TOPIC_BASE, i);
mqtt.subscribe(t);
}
} else {
delay(2000);
}
}
}
void setup() {
for (int i = 0; i < 4; i++) {
pinMode(RELES[i], OUTPUT);
digitalWrite(RELES[i], OFF); // arrancar todo apagado
}
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) delay(300);
mqtt.setServer(BROKER, 1883);
mqtt.setCallback(alRecibir);
}
void loop() {
if (!mqtt.connected()) conectarMqtt();
mqtt.loop();
}
Desde la app del celular: publicá 1 en bypcasa/rele/1 para prender el primer relé, 0 para apagarlo. Cuatro botones y ya tenés tablero.
Errores comunes
- Usar un topic genérico en un broker público.
casa/rele/1entest.mosquitto.orglo puede estar usando medio planeta. Poné un prefijo único (y para producción, broker propio con usuario y clave). - Relés que arrancan prendidos al energizar. Es el instante entre el encendido y el
setup(). Nuestro código los apaga al arrancar; si el parpadeo inicial te molesta, usá los GPIO que arrancan en alto o relés de estado sólido. - Alimentar los 4 relés desde el pin 5V de la placa. Con las 4 bobinas activas son ~300 mA extra: fuente de 2A y listo, no lo pidas del regulador del ESP32.
- GPIOs problemáticos. En el ESP32 evitá GPIO 0, 2, 12 y 15 para relés: intervienen en el arranque y pueden dejar la placa sin bootear o los relés parpadeando.
Para llevarlo más lejos
- Integralo con Home Assistant (habla MQTT nativo): tablero, horarios, automatizaciones, control por voz.
- Sumale un DHT22 y que publique temperatura: relé 1 prende el ventilador solo cuando hace falta.
- ¿No sabés qué ESP32 tenés o cuál comprar? Guía completa de variantes.
Los componentes, en un solo pedido
ESP32, módulo de relés, fuente y cables: todo en electronicabyp.com.ar y envío a toda Argentina. ¿Proyecto de domótica más grande (tablero completo, riego multizona, galpón)? Escribinos por WhatsApp y lo armamos juntos.
¿Necesitás los componentes de esta guía? Los encontrás en electronicabyp.com.ar — hacemos envíos a toda Argentina. Para cotizaciones por cantidad, escribinos por WhatsApp.