Placas ESP32 para la caja de empotrar: un enchufe inteligente con medición de consumo y un interruptor TRIAC doble con y sin neutro, archivos de KiCad y ESPHome
Placas ESP32-C3 no aisladas que caben en una caja de Ø60: un módulo de enchufe con relé que mide el consumo con un BL0937, un interruptor de luz TRIAC de dos canales y una versión del interruptor sin neutro que se alimenta a través de las lámparas. Se conectan a Home Assistant mediante ESPHome y tienen bloqueo térmico. Proyectos de KiCad, Gerber/BOM/CPL listos para JLCPCB y YAML de ESPHome descargables.

Diseñé dos placas pequeñas para hacer inteligentes el enchufe de pared y el interruptor de la luz, y el interruptor doble tiene además una versión sin neutro. Todas caben en una caja de empotrar de Ø60, detrás del enchufe o del interruptor, funcionan con un ESP32-C3 y se conectan a Home Assistant mediante ESPHome. Sin nube y sin aplicación.
- priz60: un módulo con relé. Conmuta el enchufe que tiene delante y mide corriente, tensión, potencia y energía.
- anahtar2: un interruptor de luz de dos canales sin relés. Controla las lámparas con TRIAC, y el interruptor doble de la pared se queda en su sitio.
- anahtar2l: la versión de anahtar2 sin neutro. Para edificios sin neutro en la caja del interruptor; la placa se alimenta a través de las lámparas.
Los proyectos de KiCad, los archivos Gerber/BOM/CPL listos para JLCPCB y las configuraciones de ESPHome se pueden descargar al final del artículo.

Primero, la seguridad
Ninguna de las placas está aislada. La masa del circuito (GND) está unida a la red, así que todos los puntos de la placa, incluido el ESP, están a 230 V. Es el precio del tamaño pequeño y del bajo coste: una fuente aislada no cabe en una caja de Ø60.
- No se conecta nada a la placa mientras está en la red: ni un adaptador USB-serie, ni una sonda de osciloscopio, ni un ordenador. La programación se hace por los puntos de prueba (TP1-TP6) con la red desconectada. Las actualizaciones posteriores llegan por Wi-Fi (OTA).
- La carcasa debe ser totalmente aislante. No hay ninguna conexión hacia fuera (USB, sensores) y no debe haberla.
- La línea debe estar protegida con un magnetotérmico y un diferencial de 30 mA.
- Las placas todavía no se han fabricado y no se ha probado ningún prototipo. Las cifras de abajo salen de simulaciones y cálculos.
Si no tienes experiencia trabajando con tensión de red, no instales estas placas. Los archivos están abiertos para estudiar el diseño y aprender.

priz60: un relé con medición de consumo
Regleta (de izquierda a derecha): SW · N · L · O. L viene de la red, O va al enchufe, N hace falta para la alimentación y el interruptor de pared se conecta a SW.
L ── shunt 1 mΩ ── relé COM → NO ── O (enchufe)
N ── F1 500 mA T ── varistor ── 10 Ω ── M7 ── filtro π (4.7µ / 1 mH / 4.7µ)
→ buck LNK306 → 5 V → AMS1117 → 3.3 V → ESP32-C3
- Relé: Hongfa HF32FV-16 (16 A, bobina de 5 V). La bobina se activa a plena tensión durante 100 ms y luego se mantiene con un PWM del 50% a 20 kHz. La potencia de la bobina baja de 0,4 W a unos 0,1 W, y eso importa en una caja cerrada.
- Medición: BL0937. La corriente se mide en un shunt de 1 mΩ y la tensión con un divisor de 4 × 470k / 1k. El componente
hlw8012de ESPHome (model: BL0937) lo lee directamente. - Alimentación: un buck con un LNK306 de Power Integrations. La GND de la placa está unida a L; el buck se alimenta desde N y genera +5 V respecto a L.
- Entrada del interruptor de pared: SW → 2 × 100k (1206) → limitador BAT54S → GPIO. Cuando el interruptor cierra hacia L, la entrada pasa a LOW. Cada vez que se acciona un interruptor clásico, el relé cambia de estado.
¿Cuánta corriente?
El relé es de 16 A, pero la placa no puede llevar esa corriente de forma continua. Estimé la densidad de corriente y el calentamiento del cobre con un modelo sencillo de diferencias finitas (ambiente de 40°C, cobre de 2 oz, escenarios de 3/5/8 mΩ para el contacto del relé). El punto más caliente es el pin NO del relé:
| Corriente continua | Pin del relé (escenario realista) |
|---|---|
| 8 A | 57°C |
| 10 A | 67°C |
| 12 A | 78°C |
| 16 A | 108°C |
Es decir, la placa sirve para unos 10 A continuos, y 16 A solo durante poco tiempo. Basta para una estufa de 2 kW o una lavadora, no para un horno de 3,5 kW.

Protecciones en el software
- Si la corriente supera los 16 A, el relé se desactiva.
- Si el NTC de la placa supera los 85°C, el relé se desactiva y se activa un bloqueo térmico. El bloqueo se mantiene aunque se corte la luz. Mientras está activo, el relé no se puede activar desde el interruptor de pared, el botón ni Home Assistant. El botón "Termal kilidi aç" (desbloquear) de Home Assistant solo lo libera cuando la placa baja de 60°C.
anahtar2: un interruptor TRIAC de dos canales
Regleta: S1 · S2 · L · O1 · O2 · N. El interruptor doble de la pared se conecta a S1 y S2 y se queda donde está; las lámparas se alimentan desde O1 y O2. Esta versión necesita neutro.
- Conmutación: un TRIAC BT136S-600E por canal (TO-252, 4 A / 600 V). Hasta 100 W por lámpara; con esa carga el TRIAC disipa unos 0,4 W. Sin relé no hay clic ni desgaste de contactos.
- Disparo de puerta: ESP → AO3400A → 330 Ω → puerta. La corriente de puerta es de unos 12 mA y negativa (cuadrantes II y III del TRIAC), así que basta con un solo N-MOSFET.
- Bypass integrado: en cada salida, O → 2 × 1k → 47 nF X2 → N. Con el interruptor apagado, las lámparas LED brillan un poco o parpadean por la pequeña corriente que se fuga por el TRIAC; el bypass le da a esa corriente otro camino. No hace falta comprar un módulo de bypass aparte.
- Alimentación: las mismas piezas que en priz60, pero aquí el LNK306 funciona como buck-boost con salida negativa. L es el carril de +5 V del circuito y la GND del ESP está 5 V por debajo de L. Como el MT1 del TRIAC puede ir directamente a L, el disparo de puerta queda sencillo.
- Protección: un fusible de 2 A T en la línea L, un fusible de 500 mA T y un varistor de 275 VAC en la alimentación. Entre los dos TRIAC hay un NTC: por encima de 95°C se apagan las dos lámparas y se activa un bloqueo térmico, igual que en priz60 (se libera por debajo de 70°C).

anahtar2l: la versión sin neutro
En los edificios antiguos la caja del interruptor muchas veces no tiene neutro: solo llegan la fase y los cables que van a las lámparas. anahtar2l es para ese caso. Regleta: S1 · S2 · L · O1 · O2 (la 6.ª posición queda libre). La idea es la misma que la del Shelly 1L/2L: la placa se alimenta a través de las lámparas.
- Alimentación a través de las lámparas: O1 y O2 se unen con dos diodos M7 → fusible de 500 mA T → 10 Ω → filtro π → buck-boost LNK306 (-3,9 V respecto a L) → condensador de polímero de 470 µF → LDO ME6211 → 3,3 V. Con la lámpara apagada, la pequeña corriente que consume la placa pasa por la lámpara.
- Ventana de alimentación: con una lámpara encendida y su TRIAC conduciendo, no queda tensión en la placa. Por eso, con las dos lámparas encendidas, el canal 1 se dispara 1,5 ms tarde en cada semiciclo positivo (
charge_delay) y la placa se alimenta en ese intervalo. Con una sola lámpara encendida no hay retraso; el camino de la lámpara apagada alimenta la placa. - Paso por cero: O1 → 2 × 470k → 10k → IO7, con un limitador BAT54S. Para disparar las puertas sincronizadas con el paso por cero escribí un componente para ESPHome (
components/triac_nl). Funciona cada 50 µs con un temporizador hardware de ESP-IDF y suelta la puerta 0,8 ms antes de cada paso por cero para que el TRIAC pueda apagarse. Si se pierde el paso por cero, se apagan los dos canales. - Puerta pulsada: la puerta se ataca a través de 150 Ω con unos 18 mA, pero no de forma continua durante la ventana de disparo: recibe un pulso de 100 µs cada 300 µs. Si un driver LED hace caer la corriente por debajo de la corriente de mantenimiento del TRIAC, el siguiente pulso lo vuelve a disparar. La corriente media de puerta es más o menos un tercio de la del disparo continuo, y eso importa en una placa que se alimenta a través de las lámparas.
- Requisitos de instalación: junto a cada lámpara (en la caja del techo) hay que poner un bypass, por ejemplo un Shelly Bypass o 47 nF X2 en serie con 2 × 1k. Sin él, las lámparas LED brillan apagadas y la alimentación de la placa queda débil. Debe haber al menos una lámpara, y la lámpara 1 (O1) debe estar siempre instalada: el paso por cero solo se toma de O1, y sin la lámpara 1 no se puede encender ninguno de los dos canales. En una instalación de una sola lámpara, la lámpara va en O1. El sensor de diagnóstico "Sıfır geçiş" (paso por cero) de Home Assistant muestra este estado.
En la cara superior hay también un logo de suricata.

Diseño de la placa
Las tres placas son de 2 capas y redondas de Ø60. Al no estar aisladas no tienen la separación clásica "lado de red / lado de baja tensión", pero los distintos nodos de la red siguen necesitando distancia entre sí. Definí tres clases de red en el archivo de reglas personalizadas de KiCad (.kicad_dru):
| Clase | Redes | Distancia mínima |
|---|---|---|
| HV | N, O, S, entrada del buck | 2,5 mm |
| SWN | nodo de conmutación del LNK306 | 2,0 mm |
| HVCH | nodos intermedios de cadenas de resistencias en serie | 1,5 mm |
La colocación se hizo con scripts de Python (scripts/place.py). Las rutas de alta corriente y el cobre de red también se dibujaron por script (copper60.py, copper2t.py, copper2l.py), y mi propio autorrouter, fastroute, conectó el resto de las pistas de señal. En priz60 y anahtar2l, un último paso une con vías las islas de cobre de GND de las capas superior e inferior. Las tres placas dan 0 errores y 0 pads sin conectar en el DRC de KiCad, y 0 errores en el ERC.
Coste de piezas (JLCPCB, precios de octubre de 2026, placas y montaje incluidos): para priz60, 5 placas salen por unos 53 $ más las tasas de piezas extended (17 × 3 $); para anahtar2, 5 placas cuestan 92 $, 10 placas 126 $ y 50 placas 385 $.
ESPHome
Las tres placas tienen un YAML listo. Los datos de la Wi-Fi van en secrets.yaml, y la primera grabación se hace con la red desconectada, por los puntos de prueba TP1-TP6 (3V3, GND, TXD, RXD, IO9, EN) con un adaptador USB-serie:
uvx esphome run priz60.yaml
En Home Assistant, priz60 aparece como un interruptor de relé y sensores de corriente, tensión, potencia, energía y temperatura de la placa; anahtar2 aparece como dos luces, dos entradas de interruptor de pared y una temperatura de TRIAC. Las dos tienen un estado "Termal kilit" (bloqueo térmico) y un botón "Termal kilidi aç". En priz60 hay que calibrar los coeficientes del BL0937 en la primera instalación con una carga conocida y un multímetro.
El YAML de anahtar2l necesita la carpeta components/triac_nl a su lado (en el paquete van juntos). En Home Assistant se ve como anahtar2, más un sensor de diagnóstico "Sıfır geçiş" (paso por cero). charge_delay, zero_cross_offset y el pulso de puerta se ajustan en el YAML.
Qué verificar en el prototipo
- La fuente LNK306: tensión de salida y rizado con carga y con la Wi-Fi activa, y la temperatura del pin SOURCE. Medir solo a través de un transformador de aislamiento.
- EMI: si el filtro π es suficiente.
- priz60: prueba térmica con termopar en los pines del relé a 10 A y 16 A dentro de una caja cerrada; calibración del BL0937.
- anahtar2: brillo con el interruptor apagado y parpadeo encendido con lámparas LED pequeñas (3-5 W); temperatura de los TRIAC con dos cargas de 100 W; corriente de arranque de los drivers LED.
- anahtar2l: que el carril de 3,9 V no caiga con las dos lámparas encendidas y la Wi-Fi activa (si hace falta, subir
charge_delay); medir con osciloscopio el retraso del paso por cero y ajustarlo; que el TRIAC siga conduciendo en cada semiciclo con la puerta pulsada en distintas lámparas LED.
Descargas
| Archivo | Contenido | Tamaño |
|---|---|---|
| priz60-kicad.zip | Proyecto de KiCad 10: esquema, PCB, reglas, footprints y modelos 3D, PDF del esquema, Gerber/BOM/CPL, YAML de ESPHome, scripts de colocación y cobre, simulación térmica | 3.5 MB |
| anahtar2-kicad.zip | Proyecto de KiCad 10: esquema, PCB, reglas, footprints y modelos 3D, PDF del esquema, Gerber/BOM/CPL, YAML de ESPHome, scripts | 3.5 MB |
| priz60-gerber.zip | Solo Gerber + Excellon, listo para subir a JLCPCB | 0.1 MB |
| anahtar2-gerber.zip | Solo Gerber + Excellon, listo para subir a JLCPCB | 0.1 MB |
| anahtar2l-kicad.zip | Proyecto de KiCad 10: esquema, PCB, reglas, footprints y modelos 3D, PDF del esquema, Gerber/BOM/CPL, YAML de ESPHome y el componente triac_nl, scripts, logo | 4.2 MB |
| anahtar2l-gerber.zip | Solo Gerber + Excellon, listo para subir a JLCPCB | 0.1 MB |
| priz-anahtar-esphome.zip | Configuración de ESPHome de las tres placas, el componente triac_nl de anahtar2l y una nota de instalación | 12 KB |
Los archivos BOM y CPL de JLCPCB están en la carpeta production/ de cada paquete de KiCad. Revisa siempre la orientación de las piezas en la vista previa del montaje: KiCad y JLCPCB definen los 0° de forma distinta en algunos encapsulados.
Los comentarios de los archivos del proyecto y los README están en turco.