TL;DR: DimmerLink поставляется с завода в режиме UART. Команда
i2cdetectне покажет адрес 0x50, пока вы не отправите команду SWITCH_I2C (02 5B) по UART на скорости 115200 бод. Также добавьте подтягивающие резисторы 4,7 кОм на SDA и SCL — на многих платах встроенные резисторы недостаточны. Установите VCC в соответствии с логическим уровнем вашего МК (5В, 3,3В или 1,8В).
Симптом
Вы подключаете DimmerLink к шине I2C, запускаете i2cdetect -y 1
(или сканируете из Arduino), и получаете один из результатов:
- таблица адресов полностью пуста — адрес 0x50 не отображается;
- сканирование занимает значительно дольше обычного или зависает.
Причина 1 — Неверный режим (активен UART)
Каждый модуль DimmerLink поставляется с завода в режиме UART. В режиме UART:
- устройство не отслеживает шину I2C;
- контакты TX/SDA и RX/SCL работают как выходы UART;
- устройство не может отвечать на I2C-адреса — оно никогда не появится при сканировании.
Интерфейс I2C активен только после переключения в режим I2C. Режим сохраняется в EEPROM и сохраняется после отключения питания, поэтому переключать нужно только один раз.
Причина 2 — Режим UART удерживает линии I2C в низком состоянии
Когда DimmerLink находится в режиме UART и подключён к шине I2C:
- Выход UART TX находится в логической единице в состоянии ожидания — это не проблема.
- Некоторые реализации UART переводят выход в логический ноль между передачами или во время запуска.
Если линия TX (подключённая к SDA) уйдёт в ноль, она потянет линию
SDA вниз. Сканер I2C подаёт условие START на SDA и SCL, но SDA
остаётся низкой — шина кажется постоянно занятой. i2cdetect
будет ожидать несколько секунд на каждый адрес до таймаута,
из-за чего сканирование кажется зависшим.
Это не аппаратная неисправность — после переключения DimmerLink в режим I2C линии SDA/SCL становятся настоящими двунаправленными линиями I2C и проблема исчезает.
Причина 3 — Отсутствуют подтягивающие резисторы
I2C требует внешних подтягивающих резисторов на SDA и SCL. Без них напряжение на этих линиях не может подняться до логической единицы и шина не работает.
| Плата | Встроенная подтяжка I2C | Достаточность |
|---|---|---|
| Raspberry Pi 3/4/5 | 1,8 кОм (на плате) | Обычно достаточно |
| Arduino Uno / Mega | ~50 кОм (слабая) | Недостаточно — добавьте внешние |
| ESP8266 / ESP32 | ~50 кОм (слабая) | Недостаточно — добавьте внешние |
| STM32 | Нет | Необходимы внешние |
| Raspberry Pi Pico | Нет | Необходимы внешние |
Рекомендуемое значение: 4,7 кОм от SDA до VCC и 4,7 кОм от SCL до VCC. Используйте то же значение VCC, что и у DimmerLink (см. ниже).
Причина 4 — Несоответствие напряжения VCC
DimmerLink поддерживает три напряжения питания:
| VCC | Логические уровни | Типичный МК |
|---|---|---|
| 5В | 5В TTL | Arduino Uno, Mega |
| 3,3В | 3,3В CMOS | ESP32, ESP8266, Raspberry Pi |
| 1,8В | 1,8В CMOS | МК с низким напряжением |
Подключите VCC к тому же напряжению, что и логика вашего МК. Не смешивайте: DimmerLink с VCC 5В, подключённый к МК на 3,3В, создаст сигналы 5В на SDA/SCL, что может повредить МК или вызвать логические ошибки.
Преобразователь уровней не нужен — DimmerLink адаптируется к любому поданному VCC.
Решение: переключение в режим I2C шаг за шагом
Что понадобится
- USB-UART адаптер (CP2102, CH340, FT232 или аналог)
- Провода
- Любая программа для работы с последовательным портом
Шаг 1 — Подключение DimmerLink к USB-UART адаптеру
| Контакт DimmerLink | Контакт UART адаптера |
|---|---|
| VCC | Выход 3,3В |
| GND | GND |
| TX/SDA | RX |
| RX/SCL | TX |
Подключите TX к RX и RX к TX (перекрёстно). Питание от выхода 3,3В адаптера — не используйте 5В, если UART адаптер работает только на 5В сигналах.
Шаг 2 — Откройте последовательный терминал
Настройки: 115200 бод, 8 бит данных, без чётности, 1 стоп-бит (8N1).
Рекомендуемые программы:
- Windows: RealTerm (режим отправки HEX)
- Linux/macOS: Python с библиотекой pyserial (см. ниже)
Шаг 3 — Отправьте команду SWITCH_I2C
Отправьте сырые байты: 02 5B
- В RealTerm: вкладка Send → поле Send Numbers:
02 5B→ Send - На Linux/macOS — используйте следующую команду Python
(требуется
pyserial):
python3 -c "
import serial
s = serial.Serial('/dev/ttyUSB0', 115200, timeout=1)
s.write(bytes([0x02, 0x5B]))
resp = s.read(1)
print('Ответ:', resp.hex() if resp else 'нет ответа')
s.close()
"Замените /dev/ttyUSB0 на ваш порт (/dev/ttyACM0, /dev/ttyS0 и т.д.).
Установите pyserial при необходимости: pip install pyserial.
Ожидаемый ответ: 00 (один байт, OK).
Если ответа нет:
- Проверьте, что TX/RX перекрещены (TX адаптера → RX DimmerLink).
- Убедитесь, что скорость ровно 115200 бод.
- Убедитесь, что VCC подключён.
Шаг 4 — Проверка переключения режима
После получения 00 DimmerLink находится в режиме I2C. Отключите
от UART адаптера, подключите для I2C и выполните сканирование:
Raspberry Pi:
i2cdetect -y 1Arduino:
#include <Wire.h>
void setup() {
Serial.begin(115200);
Wire.begin();
for (uint8_t addr = 1; addr < 127; addr++) {
Wire.beginTransmission(addr);
if (Wire.endTransmission() == 0) {
Serial.print("Найден по адресу 0x");
Serial.println(addr, HEX);
}
}
}Ожидаемый результат: адрес 0x50 найден.
Подключение для работы в режиме I2C
После переключения в режим I2C подключите следующим образом:
Raspberry Pi
| GPIO разъём RPi | DimmerLink |
|---|---|
| Контакт 1 (3,3В) | VCC |
| Контакт 6 (GND) | GND |
| Контакт 3 (GPIO2 / SDA) | TX/SDA |
| Контакт 5 (GPIO3 / SCL) | RX/SCL |
На RPi встроены резисторы 1,8 кОм на GPIO2/3 — обычно достаточно для кабелей до 30 см. Добавьте внешние 4,7 кОм, если связь ненадёжна.
Arduino (Uno/Mega)
| Arduino | DimmerLink |
|---|---|
| A4 (SDA) | TX/SDA |
| A5 (SCL) | RX/SCL |
| 5В | VCC |
| GND | GND |
Добавьте резисторы 4,7 кОм от A4 до 5В и от A5 до 5В.
ESP32
| ESP32 | DimmerLink |
|---|---|
| GPIO21 (SDA) | TX/SDA |
| GPIO22 (SCL) | RX/SCL |
| 3,3В | VCC |
| GND | GND |
Добавьте резисторы 4,7 кОм от GPIO21 до 3,3В и от GPIO22 до 3,3В.
Схема подключения подтягивающих резисторов
VCC (совпадает с VCC DimmerLink)
│
├── 4,7кОм ── SDA
│
└── 4,7кОм ── SCLПроверка связи
Raspberry Pi (командная строка)
# Читаем частоту сети (должно вернуть 50 или 60)
i2cget -y 1 0x50 0x20
# Устанавливаем яркость 50%
i2cset -y 1 0x50 0x10 50
# Читаем яркость обратно
i2cget -y 1 0x50 0x10Arduino
#include <Wire.h>
void setup() {
Serial.begin(115200);
Wire.begin();
// Устанавливаем яркость 50%
Wire.beginTransmission(0x50);
Wire.write(0x10); // регистр DIM0_LEVEL
Wire.write(50); // 50%
if (Wire.endTransmission() == 0) {
Serial.println("DimmerLink: яркость установлена 50%");
} else {
Serial.println("Ошибка: DimmerLink не отвечает");
}
}Python (Raspberry Pi)
from smbus2 import SMBus
try:
bus = SMBus(1)
freq = bus.read_byte_data(0x50, 0x20)
print(f"DimmerLink OK — частота сети: {freq} Гц")
bus.close()
except OSError as e:
print(f"Не найден: {e}")
print("Проверьте: режим I2C переключён, резисторы установлены, VCC верный")Переключение обратно в режим UART
Если нужно вернуться в режим UART, запишите команду 0x03
(SWITCH_UART) в регистр COMMAND I2C (0x01):
Arduino:
Wire.beginTransmission(0x50);
Wire.write(0x01); // регистр COMMAND
Wire.write(0x03); // SWITCH_UART
Wire.endTransmission();
// I2C больше не работает — подключайтесь через UARTRaspberry Pi:
i2cset -y 1 0x50 0x01 0x03
# Теперь управление только через UARTБлок-схема диагностики
i2cdetect не показывает ничего по адресу 0x50?
│
├── Подключён ли VCC DimmerLink и правильное ли напряжение? → Нет → Подключите VCC
│
├── Была ли отправлена команда SWITCH_I2C (02 5B по UART)? → Нет → Отправьте
│
├── Установлены ли подтяжки 4,7кОм на SDA и SCL? → Нет → Установите
│
├── SDA подключён к SDA, SCL к SCL? → Нет → Исправьте
│
└── Зависает ли i2cdetect (медленное сканирование)?
→ Активен режим UART → Сначала отправьте SWITCH_I2CКраткий чеклист
Связанные статьи
- Настройка Raspberry Pi → Управление AC диммером через DimmerLink на Raspberry Pi
- Настройка Tasmota → Управление AC диммером через DimmerLink в Tasmota
- Интеграция ESPHome → ESPHome YAML для AC диммера и DimmerLink
- Руководство Home Assistant → AC диммер с Home Assistant и ESPHome
Остались вопросы?
Задайте на forum.rbdimmer.com или откройте GitHub Issue.