Resumen: Existen dos caminos de integración. El Camino A (plataforma estándar ESPHome
ac_dimmer) es simple pero causa conflictos ISR/WiFi en ESP32 de doble núcleo. El Camino B (componente ESPHome DimmerLink) descarga la temporización TRIAC a un controlador dedicado — sin ISR, sin conflictos, funciona en cualquier plataforma incluyendo ESP32-C3, Raspberry Pi y HA OS.
¿Qué camino deberías usar?
| Criterio | Camino A: ESPHome estándar | Camino B: DimmerLink |
|---|---|---|
| Placa | ESP8266 (seguro), ESP32 (arriesgado) | Cualquier ESP32, RPi, cualquier SBC |
| Complejidad YAML | ~10 líneas | ~30 líneas |
| Estabilidad WiFi | Puede parpadear con carga WiFi | Sin conflicto (solo I2C) |
| ESP32 de un solo núcleo | No soportado | Soportado |
| Hardware adicional | Ninguno | Módulo DimmerLink |
| Calidad de atenuación | Buena | Excelente (temporización por hardware) |
⚠️ Por qué el ESP32 es arriesgado con el Camino A: la plataforma estándar
ac_dimmerusa un ISR por software en el ESP32. Cuando el WiFi o la API de HA están activos, la temporización del ISR se altera, causando parpadeo visible o congelamiento del dimmer. Usa el Camino B para eliminar el ISR por completo.
Elige el Camino A si usas ESP8266 y quieres la configuración más simple.
Elige el Camino B si usas ESP32 (cualquier variante), Raspberry Pi, HA OS en x86, o necesitas atenuación fiable con WiFi/MQTT activo.
Camino A: Plataforma estándar ESPHome ac_dimmer
Cableado (ESP8266 / ESP32)
Módulo dimmer → ESP8266 (NodeMCU)
──────────────────────────────────────
ZC-OUT → D1 (GPIO5)
DIM → D2 (GPIO4)
VCC → 3.3V
GND → GNDPara ESP32, cualquier GPIO puede usarse para ZC y DIM.
YAML de ESPHome
esphome:
name: ac-dimmer
platform: ESP8266 # o ESP32
board: nodemcuv2 # ajustar a tu placa
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
api:
encryption:
key: !secret api_key
ota:
password: !secret ota_password
output:
- platform: ac_dimmer
id: dimmer_out
gate_pin: GPIO4
zero_cross_pin:
number: GPIO5
mode: INPUT
inverted: yes
method: leading_pulse # por defecto; 'trailing' para MOSFET
min_power: 0.01
light:
- platform: monochromatic
output: dimmer_out
name: "AC Dimmer"
gamma_correct: 0 # 0 = lineal, 2.8 = percepción LEDMétodos de atenuación
| Método | Valor method: |
Uso con |
|---|---|---|
| Leading pulse (por defecto) | leading_pulse |
Módulos TRIAC |
| Leading (gate mantenido) | leading |
TRIAC — alternativo |
| Trailing | trailing |
Solo módulos MOSFET |
Problema conocido: ESP32 + WiFi
⚠️ La plataforma estándar
ac_dimmerusa un ISR por software en el ESP32. Cuando el WiFi está activo (especialmente con la API de HA u OTA), el ISR puede retrasarse, causando parpadeo visible o congelamiento del dimmer.This is the same root cause as crashes with the
RBDdimmerC++ library. See: ESP32 + AC Dimmer: IRAM_ATTR Causes and FixSolución: Usa el Camino B (DimmerLink) para instalaciones HA basadas en ESP32.
Camino B: Componente ESPHome DimmerLink
DimmerLink es un controlador dedicado con procesador Cortex-M0+ que gestiona la detección de cruce por cero y la temporización del gate TRIAC internamente. Tu ESP32 envía un valor de brillo (0–100 %) por I2C — ningún ISR se ejecuta en el MCU.
Cableado
DimmerLink → ESP32
─────────────────────────
VCC → 3.3V
GND → GND
SDA → GPIO21
SCL → GPIO22DimmerLink → AC load wiring is identical to the standard module. See: Hardware Connection Guide
Instalar el componente ESPHome
Añade el componente externo a tu YAML:
external_components:
- source:
type: git
url: https://github.com/robotdyn-dimmer/DimmerLink
ref: main
components: [dimmerlink]Component source and docs: github.com/robotdyn-dimmer/DimmerLink/tree/main/components
YAML mínimo (~30 líneas)
esphome:
name: dimmerlink-ha
platform: ESP32
board: esp32dev
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
api:
encryption:
key: !secret api_key
ota:
password: !secret ota_password
external_components:
- source:
type: git
url: https://github.com/robotdyn-dimmer/DimmerLink
ref: main
components: [dimmerlink]
i2c:
sda: GPIO21
scl: GPIO22
frequency: 100kHz
light:
- platform: dimmerlink
name: "Dimmer"
address: 0x50Flashea, añade a HA, listo.
YAML estándar — con sensores y selector de curva
# (external_components + i2c como arriba)
light:
- platform: dimmerlink
name: "Dimmer"
address: 0x50
sensor:
- platform: dimmerlink
address: 0x50
frequency:
name: "AC Frequency"
brightness:
name: "Dimmer Brightness"
select:
- platform: dimmerlink
address: 0x50
dimming_curve:
name: "Dimming Curve"
# Opciones: LINEAR, RMS, LOGARITHMIC
binary_sensor:
- platform: dimmerlink
address: 0x50
status:
name: "Dimmer Status"Curvas de atenuación
| Curva | Ideal para |
|---|---|
LINEAR |
Elementos calefactores, cargas resistivas |
RMS |
Bombillas incandescentes y halógenas |
LOGARITHMIC |
Bombillas LED dimmables |
Vista del dispositivo en Home Assistant
Tras flashear y añadir el dispositivo ESPHome a HA:
- El Camino A crea una entidad
lightcon un deslizador de brillo (0–255 mapeado a 0–100 %) - El Camino B crea una entidad
lightmás entidades de sensores opcionales (frecuencia AC, brillo %, versión de firmware) y un selector de curva de atenuación — todo mostrado en una sola tarjeta de dispositivo HA
Multi-canal con DimmerLink
Cada módulo DimmerLink gestiona una carga AC en una dirección I2C (configurada mediante jumpers de dirección en la placa). Para controlar dos cargas, conecta dos módulos DimmerLink separados en el mismo bus I2C con diferentes direcciones:
light:
- platform: dimmerlink
name: "Channel 1"
address: 0x50
- platform: dimmerlink
name: "Channel 2"
address: 0x51Artículos relacionados
- ESPHome YAML details → ESPHome YAML for AC Dimmer
- MQTT alternative → AC Dimmer via MQTT with ESP32
- ESP32 WiFi ISR problem → IRAM_ATTR Causes and Fix
- Single-core ESP32 → ESP32-S2/C3/H2 Doesn't Work
- Which dimmer to buy → Complete Buyer's Guide
¿Todavía tienes preguntas?
Ask on forum.rbdimmer.com or open a GitHub Issue.