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.

esp32mqttdomoticarelesproyectos

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

ComponenteCantidadPara qué
ESP32 DevKit1El cerebro con WiFi
Módulo 4 relés optoacoplados 5V1Las 4 salidas (250V 10A)
Fuente 5V 2A1Alimenta ESP32 y relés
Cables dupont1 juegoConexionado

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

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

  1. Usar un topic genérico en un broker público. casa/rele/1 en test.mosquitto.org lo puede estar usando medio planeta. Poné un prefijo único (y para producción, broker propio con usuario y clave).
  2. 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.
  3. 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.
  4. 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

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.