In breve: DimmerLink viene fornito dalla fabbrica in modalità UART.
i2cdetectnon mostrerà l'indirizzo 0x50 finché non invierai il comando SWITCH_I2C (02 5B) tramite UART a 115200 baud. Aggiungi inoltre resistenze di pull-up da 4,7 kΩ su SDA e SCL — molte schede non hanno pull-up integrati adeguati. Imposta VCC alla stessa tensione del livello logico del tuo MCU (5V, 3,3V o 1,8V).
Sintomo
Colleghi DimmerLink al tuo bus I2C, esegui i2cdetect -y 1
(o una scansione da Arduino), e si verifica una delle due situazioni:
- la griglia degli indirizzi è completamente vuota — l'indirizzo 0x50 non è mostrato;
- la scansione richiede molto più tempo del solito o sembra bloccarsi.
Causa 1 — Modalità errata (UART attiva)
Ogni modulo DimmerLink esce dalla fabbrica in modalità UART. In modalità UART:
- il dispositivo non monitora il bus I2C;
- i pin TX/SDA e RX/SCL funzionano come uscite UART;
- il dispositivo non può rispondere agli indirizzi I2C — non apparirà mai in una scansione.
L'interfaccia I2C è attiva solo dopo che la modalità è stata commutata in I2C. La modalità è memorizzata in EEPROM e persiste tra i cicli di alimentazione, quindi è necessario commutare solo una volta.
Causa 2 — La modalità UART tira le linee del bus I2C a livello basso
Quando DimmerLink è in modalità UART e collegato al tuo bus I2C:
- L'uscita UART TX è mantenuta a livello logico alto (stato di riposo) — questo non è un problema.
- Alcune implementazioni UART tirano l'uscita a livello basso tra le trasmissioni o durante l'avvio.
Se la linea TX (collegata a SDA) va a livello basso, tira la linea I2C SDA
a livello basso. Lo scanner I2C invia una condizione di START su SDA e SCL,
ma SDA rimane basso — il bus appare permanentemente occupato. i2cdetect
attende diversi secondi per indirizzo prima del timeout, facendo
sembrare la scansione bloccata.
Questo non è un guasto hardware — una volta commutato DimmerLink in modalità I2C, SDA/SCL diventano vere linee I2C bidirezionali e il problema scompare.
Causa 3 — Resistenze di pull-up mancanti
I2C richiede resistenze di pull-up esterne su SDA e SCL. Senza di esse la tensione su queste linee non può salire a livello logico alto e il bus non funziona.
| Scheda | Pull-up I2C integrati | Adeguatezza |
|---|---|---|
| Raspberry Pi 3/4/5 | 1,8 kΩ (sulla scheda) | Generalmente sufficiente |
| Arduino Uno / Mega | ~50 kΩ (debole) | Insufficiente — aggiungere esterni |
| ESP8266 / ESP32 | Debole (~50 kΩ) | Insufficiente — aggiungere esterni |
| STM32 | Nessuno | Obbligatorio aggiungere esterni |
| Raspberry Pi Pico | Nessuno | Obbligatorio aggiungere esterni |
Valore richiesto: 4,7 kΩ da SDA a VCC e 4,7 kΩ da SCL a VCC. Usa lo stesso VCC di DimmerLink (vedi sotto).
Causa 4 — Disallineamento tensione VCC
DimmerLink supporta tre tensioni di alimentazione:
| VCC | Livelli logici | MCU tipico |
|---|---|---|
| 5 V | 5V TTL | Arduino Uno, Mega |
| 3,3V | 3.3V CMOS | ESP32, ESP8266, Raspberry Pi |
| 1,8V | 1.8V CMOS | MCU a bassa tensione |
Collega VCC alla stessa tensione del livello logico del tuo MCU. Non mescolare: un VCC di DimmerLink a 5V collegato a un MCU a 3,3V produrrà segnali a 5V su SDA/SCL, che possono danneggiare il MCU o causare errori logici.
Non è necessario un convertitore di livello — DimmerLink si adatta a qualsiasi VCC fornito.
Soluzione: commutazione passo passo alla modalità I2C
Cosa ti serve
- Adattatore USB-UART (CP2102, CH340, FT232 o simile)
- Cavetti jumper
- Qualsiasi applicazione terminale seriale
Passo 1 — Collegare DimmerLink all'adattatore USB-UART
| Pin DimmerLink | Pin adattatore UART |
|---|---|
| VCC | Uscita 3.3V |
| GND | GND |
| TX/SDA | RX |
| RX/SCL | TX |
Collega TX a RX e RX a TX (incrociato). Alimentazione dall'uscita 3.3V dell'adattatore — non usare 5V se il tuo adattatore UART fornisce solo segnali a 5V.
Passo 2 — Aprire il terminale seriale
Configurazione: 115200 baud, 8 bit dati, nessuna parità, 1 bit di stop (8N1).
Terminali consigliati:
- Windows: RealTerm (modalità invio HEX)
- Linux/macOS:
picocom -b 115200 /dev/ttyUSB0
Passo 3 — Inviare il comando SWITCH_I2C
Invia byte grezzi: 02 5B
- In RealTerm: scheda Send → campo Send Numbers:
02 5B→ Send - Su Linux/macOS — usa lo script Python seguente (richiede
pyserial):
python3 -c "
import serial
s = serial.Serial('/dev/ttyUSB0', 115200, timeout=1)
s.write(bytes([0x02, 0x5B]))
resp = s.read(1)
print('Risposta:', resp.hex() if resp else 'nessuna')
s.close()
"Sostituisci /dev/ttyUSB0 con la tua porta effettiva (/dev/ttyACM0, /dev/ttyS0, ecc.).
Installa pyserial se necessario: pip install pyserial.
Risposta attesa: 00 (un byte, OK).
Se non c'è risposta:
- Verifica che TX/RX siano incrociati (TX adattatore → RX DimmerLink).
- Conferma che la velocità è esattamente 115200 baud.
- Conferma che VCC è collegato.
Passo 4 — Verificare la commutazione di modalità
Dopo aver ricevuto 00, DimmerLink è ora in modalità I2C. Scollega
dall'adattatore UART, cabla per I2C e scansiona:
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("Trovato a 0x");
Serial.println(addr, HEX);
}
}
}Risultato atteso: indirizzo 0x50 trovato.
Cablaggio per funzionamento I2C
Dopo la commutazione in modalità I2C, collegare come segue:
Raspberry Pi
| Header GPIO RPi | DimmerLink |
|---|---|
| Pin 1 (3.3V) | VCC |
| Pin 6 (GND) | GND |
| Pin 3 (GPIO2 / SDA) | TX/SDA |
| Pin 5 (GPIO3 / SCL) | RX/SCL |
Il RPi ha pull-up da 1,8 kΩ su GPIO2/3 — generalmente sufficienti per cavi inferiori a 30 cm. Aggiungi pull-up esterni da 4,7 kΩ se la comunicazione è instabile.
Arduino (Uno/Mega)
| Arduino | DimmerLink |
|---|---|
| A4 (SDA) | TX/SDA |
| A5 (SCL) | RX/SCL |
| 5 V | VCC |
| GND | GND |
Aggiungi pull-up da 4,7 kΩ da A4 a 5V e da A5 a 5V.
ESP32
| ESP32 | DimmerLink |
|---|---|
| GPIO21 (SDA) | TX/SDA |
| GPIO22 (SCL) | RX/SCL |
| 3,3V | VCC |
| GND | GND |
Aggiungi pull-up da 4,7 kΩ da GPIO21 a 3.3V e da GPIO22 a 3.3V.
Schema di cablaggio pull-up I2C
VCC (uguale al VCC di DimmerLink)
│
├── 4.7kΩ ── SDA
│
└── 4.7kΩ ── SCLVerificare la comunicazione
Raspberry Pi (CLI)
# Leggere la frequenza di rete (dovrebbe restituire 50 o 60)
i2cget -y 1 0x50 0x20
# Impostare la luminosità al 50%
i2cset -y 1 0x50 0x10 50
# Rileggere la luminosità
i2cget -y 1 0x50 0x10Arduino
#include <Wire.h>
void setup() {
Serial.begin(115200);
Wire.begin();
// Impostare la luminosità al 50%
Wire.beginTransmission(0x50);
Wire.write(0x10); // registro DIM0_LEVEL
Wire.write(50); // 50%
if (Wire.endTransmission() == 0) {
Serial.println("DimmerLink: luminosità impostata al 50%");
} else {
Serial.println("Errore: DimmerLink non risponde");
}
}Python (Raspberry Pi)
from smbus2 import SMBus
try:
bus = SMBus(1)
freq = bus.read_byte_data(0x50, 0x20)
print(f"DimmerLink OK — frequenza di rete: {freq} Hz")
bus.close()
except OSError as e:
print(f"Non trovato: {e}")
print("Verifica: modalità I2C commutata, pull-up installati, VCC corretto")Come tornare alla modalità UART
Se devi tornare alla modalità UART, scrivi il comando 0x03
(SWITCH_UART) nel registro COMMAND I2C (0x01):
Arduino:
Wire.beginTransmission(0x50);
Wire.write(0x01); // registro COMMAND
Wire.write(0x03); // SWITCH_UART
Wire.endTransmission();
// I2C non funziona più — riconnetti tramite UARTRaspberry Pi:
i2cset -y 1 0x50 0x01 0x03
# Ora controllo solo tramite UARTDiagramma di flusso diagnostico
i2cdetect non mostra nulla a 0x50?
│
├── VCC di DimmerLink è collegato e corretto? → No → Collegare VCC
│
├── SWITCH_I2C è stato inviato (02 5B via UART)? → No → Inviare
│
├── Pull-up da 4,7 kΩ su SDA e SCL? → No → Aggiungere
│
├── SDA collegato a SDA, SCL a SCL? → No → Correggere cablaggio
│
└── i2cdetect si blocca (scansione lenta)?
→ Modalità UART attiva → Inviare SWITCH_I2C primaChecklist rapida
Articoli correlati
- 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
Hai ancora domande?
Ask on forum.rbdimmer.com or open a GitHub Issue.