Кратко: DimmerLink поставляется с завода в режиме UART.
i2cdetectне покажет адрес 0x50, пока вы не отправите команду SWITCH_I2C (02 5B) через UART на скорости 115200 бод. Также добавьте подтягивающие резисторы 4,7 кОм на SDA и SCL — на многих платах встроенные подтяжки недостаточны. Установите VCC в соответствии с логическим напряжением вашего MCU (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) переходит в низкий уровень, она притягивает
линию I2C 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 | Логические уровни | Типичный MCU |
|---|---|---|
| 5 В | 5V TTL | Arduino Uno, Mega |
| 3,3 В | 3.3V CMOS | ESP32, ESP8266, Raspberry Pi |
| 1,8 В | 1.8V CMOS | Низковольтные MCU |
Подключите VCC к тому же напряжению, что и логический уровень вашего MCU. Не смешивайте: VCC DimmerLink 5 В, подключённый к MCU с логикой 3,3 В, приведёт к появлению сигналов 5 В на SDA/SCL, что может повредить MCU или вызвать логические ошибки.
Преобразователь уровней не нужен — DimmerLink адаптируется к любому подаваемому VCC.
Решение: пошаговое переключение в режим I2C
Что вам понадобится
- USB-UART адаптер (CP2102, CH340, FT232 или аналогичный)
- Соединительные провода
- Любое приложение для работы с последовательным портом
Шаг 1 — Подключите DimmerLink к USB-UART адаптеру
| Пин DimmerLink | Пин UART адаптера |
|---|---|
| VCC | Выход 3.3V |
| GND | GND |
| TX/SDA | RX |
| RX/SCL | TX |
Соедините TX с RX и RX с TX (перекрёстно). Питание от выхода 3.3V адаптера — не используйте 5 В, если ваш UART-адаптер выдаёт только сигналы 5 В.
Шаг 2 — Откройте терминал последовательного порта
Настройки: 115200 бод, 8 бит данных, без чётности, 1 стоп-бит (8N1).
Рекомендуемые терминалы:
- Windows: RealTerm (режим отправки HEX)
- Linux/macOS:
picocom -b 115200 /dev/ttyUSB0
Шаг 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 подключите следующим образом:
— (без ISR)
| Разъём GPIO RPi | Любой ESP32 |
|---|---|
| Пин 1 (3.3V) | 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 | Любой ESP32 |
|---|---|
| A4 (SDA) | TX/SDA |
| A5 (SCL) | RX/SCL |
| 5 В | VCC |
| GND | GND |
Добавьте подтяжки 4,7 кОм от A4 к 5V и от A5 к 5V.
❌ нет
| ❌ нет | Любой ESP32 |
|---|---|
| GPIO21 (SDA) | TX/SDA |
| GPIO22 (SCL) | RX/SCL |
| 3,3 В | VCC |
| GND | GND |
Добавьте подтяжки 4,7 кОм от GPIO21 к 3.3V и от GPIO22 к 3.3V.
Схема подключения подтягивающих резисторов I2C
VCC (совпадает с VCC DimmerLink)
│
├── 4.7kΩ ── SDA
│
└── 4.7kΩ ── SCLПроверка связи
Raspberry Pi (CLI)
# Чтение частоты сети (должно вернуть 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 (0x01) по I2C:
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 setup → Raspberry Pi AC Dimmer via DimmerLink
- Tasmota setup → Tasmota AC Dimmer via DimmerLink
- ESPHome integration → ESPHome YAML for AC Dimmer and DimmerLink
- Home Assistant guide → AC Dimmer with Home Assistant and ESPHome
Остались вопросы?
Ask on forum.rbdimmer.com or open a GitHub Issue.