I need the full I2C register map for DimmerLink. I want to write my own driver for STM32 without using Arduino libraries.
I know the default address is 0x50 and registers 0x01-0x04 set channel power. But I need the complete map — device ID register, state registers, frequency detection, all of it.
Where is this documented?
Here’s a practical example for multi-channel sequential writes and readback using ESP-IDF’s I2C driver. The register logic is straightforward — one write per channel:
#include "driver/i2c.h"
#define DL_ADDR 0x50
#define I2C_PORT I2C_NUM_0
// Write a single register
esp_err_t dl_write_reg(uint8_t reg, uint8_t value) {
uint8_t buf[2] = {reg, value};
return i2c_master_write_to_device(I2C_PORT, DL_ADDR, buf, 2, pdMS_TO_TICKS(100));
}
// Read a single register
uint8_t dl_read_reg(uint8_t reg) {
uint8_t value = 0;
i2c_master_write_read_device(I2C_PORT, DL_ADDR, ®, 1, &value, 1, pdMS_TO_TICKS(100));
return value;
}
// Set all 4 channels in sequence
void setAllChannels(uint8_t ch1, uint8_t ch2, uint8_t ch3, uint8_t ch4) {
uint8_t powers[] = {ch1, ch2, ch3, ch4};
for (int i = 0; i < 4; i++) {
dl_write_reg(0x01 + i, powers[i]);
}
}
// Read mains frequency
uint8_t readFrequency() {
return dl_read_reg(0x10); // returns 50 or 60
}
The readback is useful for verifying that the DimmerLink actually received the command — if the I2C bus has noise issues you can compare the readback value against what you sent and retry if they don’t match.
The frequency register (0x10) is read-only and auto-detected. I use it to verify the mains frequency at startup — important in my case because some of my installations run on both 50Hz and 60Hz mains depending on the country.