Resumen: DimmerLink viene de fábrica en modo UART.
i2cdetectno mostrará la dirección 0x50 hasta que envíe el comando SWITCH_I2C (02 5B) por UART a 115200 baudios. Además, agregue resistencias pull-up de 4,7 kΩ en SDA y SCL — muchas placas no tienen pull-ups integrados adecuados. Configure VCC a la misma tensión que el nivel lógico de su MCU (5V, 3,3V o 1,8V).
Síntoma
Conectas DimmerLink a tu bus I2C, ejecutas i2cdetect -y 1
(o escaneas desde Arduino), y ocurre una de dos cosas:
- la tabla de direcciones está completamente vacía — la dirección 0x50 no aparece;
- el escaneo tarda mucho más de lo normal o parece bloquearse.
Causa 1 — Modo incorrecto (UART activo)
Cada módulo DimmerLink sale de fábrica en modo UART. En modo UART:
- el dispositivo no monitorea el bus I2C;
- los pines TX/SDA y RX/SCL funcionan como salidas UART;
- el dispositivo no puede responder a direcciones I2C — nunca aparecerá en un escaneo.
La interfaz I2C solo está activa después de cambiar el modo a I2C. El modo se almacena en EEPROM y persiste entre ciclos de energía, por lo que solo necesitas cambiarlo una vez.
Causa 2 — El modo UART arrastra las líneas del bus I2C a nivel bajo
Cuando DimmerLink está en modo UART y conectado a tu bus I2C:
- La salida UART TX se mantiene en nivel lógico alto (estado de reposo) — esto no es un problema.
- Algunas implementaciones UART arrastran la salida a nivel bajo entre transmisiones o durante el arranque.
Si la línea TX (que está cableada a SDA) pasa a nivel bajo, arrastra la línea
I2C SDA a nivel bajo. El escáner I2C envía una condición START en SDA y SCL,
pero SDA permanece bajo — el bus parece permanentemente ocupado. i2cdetect
espera varios segundos por dirección antes del tiempo de espera, haciendo
que el escaneo parezca bloqueado.
Esto no es una falla de hardware — una vez que DimmerLink se cambia a modo I2C, SDA/SCL se convierten en verdaderas líneas I2C bidireccionales y el problema desaparece.
Causa 3 — Resistencias pull-up faltantes
I2C requiere resistencias pull-up externas en SDA y SCL. Sin ellas, el voltaje en estas líneas no puede subir a nivel lógico alto y el bus no funciona.
| Placa | Pull-ups I2C integrados | Suficiencia |
|---|---|---|
| Raspberry Pi 3/4/5 | 1,8 kΩ (en la placa) | Generalmente suficiente |
| Arduino Uno / Mega | ~50 kΩ (débil) | Insuficiente — agregar externos |
| ESP8266 / ESP32 | Débil (~50 kΩ) | Insuficiente — agregar externos |
| STM32 | Ninguno | Obligatorio agregar externos |
| Raspberry Pi Pico | Ninguno | Obligatorio agregar externos |
Valor requerido: 4,7 kΩ de SDA a VCC, y 4,7 kΩ de SCL a VCC. Use el mismo VCC que para DimmerLink (ver más abajo).
Causa 4 — Desajuste de tensión VCC
DimmerLink soporta tres tensiones de alimentación:
| VCC | Niveles lógicos | MCU típico |
|---|---|---|
| 5 V | 5V TTL | Arduino Uno, Mega |
| 3,3V | 3.3V CMOS | ESP32, ESP8266, Raspberry Pi |
| 1,8V | 1.8V CMOS | MCU de bajo voltaje |
Conecte VCC a la misma tensión que el nivel lógico de su MCU. No mezcle: un VCC de DimmerLink de 5V conectado a un MCU de 3,3V producirá señales de 5V en SDA/SCL, lo que puede dañar el MCU o causar errores lógicos.
No se necesita un convertidor de niveles — DimmerLink se adapta a cualquier VCC que le suministre.
Solución: cambio paso a paso al modo I2C
Lo que necesitas
- Adaptador USB-UART (CP2102, CH340, FT232 o similar)
- Cables de conexión
- Cualquier aplicación de terminal serie
Paso 1 — Conectar DimmerLink al adaptador USB-UART
| Pin DimmerLink | Pin adaptador UART |
|---|---|
| VCC | Salida 3.3V |
| GND | GND |
| TX/SDA | RX |
| RX/SCL | TX |
Cablee TX a RX y RX a TX (cruzado). Alimente desde la salida 3.3V del adaptador — no use 5V si su adaptador UART solo proporciona señales de 5V.
Paso 2 — Abrir terminal serie
Configuración: 115200 baudios, 8 bits de datos, sin paridad, 1 bit de stop (8N1).
Terminales recomendados:
- Windows: RealTerm (modo de envío HEX)
- Linux/macOS:
picocom -b 115200 /dev/ttyUSB0
Paso 3 — Enviar comando SWITCH_I2C
Envíe bytes crudos: 02 5B
- En RealTerm: pestaña Send → campo Send Numbers:
02 5B→ Send - En Linux/macOS — use el script Python a continuación (requiere
pyserial):
python3 -c "
import serial
s = serial.Serial('/dev/ttyUSB0', 115200, timeout=1)
s.write(bytes([0x02, 0x5B]))
resp = s.read(1)
print('Respuesta:', resp.hex() if resp else 'ninguna')
s.close()
"Reemplace /dev/ttyUSB0 con su puerto real (/dev/ttyACM0, /dev/ttyS0, etc.).
Instale pyserial si es necesario: pip install pyserial.
Respuesta esperada: 00 (un byte, OK).
Si no hay respuesta:
- Verifique que TX/RX estén cruzados (TX del adaptador → RX de DimmerLink).
- Confirme que la velocidad es exactamente 115200 baudios.
- Confirme que VCC está conectado.
Paso 4 — Verificar el cambio de modo
Después de recibir 00, DimmerLink está ahora en modo I2C. Desconecte del
adaptador UART, cablee para I2C y escanee:
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("Encontrado en 0x");
Serial.println(addr, HEX);
}
}
}Resultado esperado: dirección 0x50 encontrada.
Cableado para operación I2C
Después de cambiar al modo I2C, conecte de la siguiente manera:
— (sin ISR)
| Cabecera GPIO RPi | Cualquier ESP32 |
|---|---|
| Pin 1 (3.3V) | VCC |
| Pin 6 (GND) | GND |
| Pin 3 (GPIO2 / SDA) | TX/SDA |
| Pin 5 (GPIO3 / SCL) | RX/SCL |
El RPi tiene pull-ups de 1,8 kΩ en GPIO2/3 — generalmente suficientes para cables de menos de 30 cm. Agregue pull-ups externos de 4,7 kΩ si la comunicación es inestable.
Arduino (Uno/Mega)
| Arduino | Cualquier ESP32 |
|---|---|
| A4 (SDA) | TX/SDA |
| A5 (SCL) | RX/SCL |
| 5 V | VCC |
| GND | GND |
Agregue pull-ups de 4,7 kΩ de A4 a 5V y de A5 a 5V.
❌ no
| ❌ no | Cualquier ESP32 |
|---|---|
| GPIO21 (SDA) | TX/SDA |
| GPIO22 (SCL) | RX/SCL |
| 3,3V | VCC |
| GND | GND |
Agregue pull-ups de 4,7 kΩ de GPIO21 a 3.3V y de GPIO22 a 3.3V.
Diagrama de cableado de resistencias pull-up I2C
VCC (igual que VCC de DimmerLink)
│
├── 4.7kΩ ── SDA
│
└── 4.7kΩ ── SCLVerificar comunicación
Raspberry Pi (CLI)
# Leer frecuencia de red (debería retornar 50 o 60)
i2cget -y 1 0x50 0x20
# Configurar brillo al 50%
i2cset -y 1 0x50 0x10 50
# Leer brillo de vuelta
i2cget -y 1 0x50 0x10Arduino
#include <Wire.h>
void setup() {
Serial.begin(115200);
Wire.begin();
// Configurar brillo al 50%
Wire.beginTransmission(0x50);
Wire.write(0x10); // registro DIM0_LEVEL
Wire.write(50); // 50%
if (Wire.endTransmission() == 0) {
Serial.println("DimmerLink: brillo configurado al 50%");
} else {
Serial.println("Error: DimmerLink no responde");
}
}Python (Raspberry Pi)
from smbus2 import SMBus
try:
bus = SMBus(1)
freq = bus.read_byte_data(0x50, 0x20)
print(f"DimmerLink OK — frecuencia de red: {freq} Hz")
bus.close()
except OSError as e:
print(f"No encontrado: {e}")
print("Verifique: modo I2C activado, pull-ups instalados, VCC correcto")Cómo volver al modo UART
Si necesita volver al modo UART, escriba el comando 0x03
(SWITCH_UART) en el registro COMMAND I2C (0x01):
Arduino:
Wire.beginTransmission(0x50);
Wire.write(0x01); // registro COMMAND
Wire.write(0x03); // SWITCH_UART
Wire.endTransmission();
// I2C ya no funciona — reconecte vía UARTRaspberry Pi:
i2cset -y 1 0x50 0x01 0x03
# Ahora control solo vía UARTDiagrama de flujo de diagnóstico
¿i2cdetect no muestra nada en 0x50?
│
├── ¿VCC de DimmerLink conectado y correcto? → No → Conectar VCC
│
├── ¿Se envió SWITCH_I2C (02 5B vía UART)? → No → Enviar
│
├── ¿Pull-ups de 4,7 kΩ en SDA y SCL? → No → Agregar
│
├── ¿SDA cableado a SDA, SCL a SCL? → No → Corregir cableado
│
└── ¿i2cdetect se bloquea (escaneo lento)?
→ Modo UART activo → Enviar SWITCH_I2C primeroChecklist rápido
Artículos relacionados
- 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
¿Todavía tienes preguntas?
Ask on forum.rbdimmer.com or open a GitHub Issue.