Коротко: Существует два пути интеграции. Путь A (стандартная платформа ESPHome
ac_dimmer) прост, но вызывает конфликты ISR/WiFi на двухъядерном ESP32. Путь B (компонент DimmerLink ESPHome) выносит синхронизацию TRIAC на выделенный контроллер — без ISR, без конфликтов, работает на любой платформе, включая ESP32-C3, Raspberry Pi и HA OS.
Какой путь выбрать?
| Критерий | Путь A: стандартный ESPHome | Путь B: DimmerLink |
|---|---|---|
| Плата | ESP8266 (безопасно), ESP32 (рискованно) | Любой ESP32, RPi, любой SBC |
| Сложность YAML | ~10 строк | ~30 строк |
| Стабильность WiFi | Возможно мерцание при нагрузке WiFi | Нет конфликта (только I2C) |
| Одноядерный ESP32 | Не поддерживается | Поддерживается |
| Дополнительное оборудование | Нет | Модуль DimmerLink |
| Качество диммирования | Хорошее | Отличное (аппаратная синхронизация) |
⚠️ Почему ESP32 рискован с путём A: стандартная платформа
ac_dimmerиспользует программный ISR на ESP32. При активном WiFi или HA API синхронизация ISR нарушается, что приводит к видимому мерцанию или зависанию диммера. Используйте Путь B, чтобы полностью исключить ISR.
Выбирайте Путь A, если используете ESP8266 и хотите максимально простую настройку.
Выбирайте Путь B, если используете ESP32 (любой вариант), Raspberry Pi, HA OS на x86 или нужно надёжное диммирование при активном WiFi/MQTT.
Путь A: Стандартная платформа ESPHome ac_dimmer
Схема подключения (ESP8266 / ESP32)
Модуль диммера → ESP8266 (NodeMCU)
──────────────────────────────────────
ZC-OUT → D1 (GPIO5)
DIM → D2 (GPIO4)
VCC → 3.3V
GND → GNDДля ESP32 подойдёт любой GPIO для ZC и DIM.
YAML для ESPHome
esphome:
name: ac-dimmer
platform: ESP8266 # или ESP32
board: nodemcuv2 # укажите вашу плату
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 # по умолчанию; 'trailing' для MOSFET
min_power: 0.01
light:
- platform: monochromatic
output: dimmer_out
name: "AC Dimmer"
gamma_correct: 0 # 0 = линейная, 2.8 = воспринимаемая для LEDМетоды диммирования
| Метод | Значение method: |
Применение |
|---|---|---|
| Передний импульс (по умолчанию) | leading_pulse |
Модули TRIAC |
| Передний (удержание затвора) | leading |
TRIAC — альтернативный |
| Задний | trailing |
Только модули MOSFET |
Известная проблема: ESP32 + WiFi
⚠️ Стандартная платформа
ac_dimmerиспользует программный ISR на ESP32. При активном WiFi (особенно с HA API или OTA) ISR может задерживаться, вызывая видимое мерцание или зависание диммера.This is the same root cause as crashes with the
RBDdimmerC++ library. See: ESP32 + AC Dimmer: IRAM_ATTR Causes and FixРешение: Используйте Путь B (DimmerLink) для установок HA на базе ESP32.
Путь B: Компонент DimmerLink ESPHome
DimmerLink — выделенный контроллер с процессором Cortex-M0+, который выполняет детектирование перехода через ноль и управление затвором TRIAC внутри себя. ESP32 отправляет значение яркости (0–100 %) по I2C — ISR на MCU не запускается.
Схема подключения
DimmerLink → ESP32
─────────────────────────
VCC → 3.3V
GND → GND
SDA → GPIO21
SCL → GPIO22DimmerLink → AC load wiring is identical to the standard module. See: Hardware Connection Guide
Установка компонента ESPHome
Добавьте внешний компонент в 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 (~30 строк)
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: 0x50Прошейте, добавьте в HA — готово.
Стандартный YAML — с датчиками и выбором кривой
# (external_components + i2c как выше)
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"
# Варианты: LINEAR, RMS, LOGARITHMIC
binary_sensor:
- platform: dimmerlink
address: 0x50
status:
name: "Dimmer Status"Кривые диммирования
| Кривая | Лучше для |
|---|---|
LINEAR |
Нагревательные элементы, резистивные нагрузки |
RMS |
Лампы накаливания и галогенные |
LOGARITHMIC |
Диммируемые LED-лампы |
Вид устройства в Home Assistant
После прошивки и добавления ESPHome-устройства в HA:
- Путь A создаёт одну сущность
lightс ползунком яркости (0–255 с маппингом на 0–100 %) - Путь B создаёт сущность
lightплюс опциональные сущности датчиков (частота AC, яркость %, версия прошивки) и селектор кривой диммирования — всё отображается на одной карточке устройства HA
Многоканальное управление с DimmerLink
Каждый модуль DimmerLink управляет одной AC-нагрузкой по одному I2C-адресу (задаётся джамперами на плате). Для управления двумя нагрузками подключите два отдельных модуля DimmerLink на одну шину I2C с разными адресами:
light:
- platform: dimmerlink
name: "Channel 1"
address: 0x50
- platform: dimmerlink
name: "Channel 2"
address: 0x51Связанные статьи
- 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
Остались вопросы?
Ask on forum.rbdimmer.com or open a GitHub Issue.