Overview
The DIM‑420‑R1 is a configurable smart I/O module designed for AC dimming control in building automation, lighting, HVAC, and general control systems. It offers 4 opto‑isolated digital inputs, 2 high‑current AC dimming channels, 4 user buttons, and 4 configurable user LEDs. All I/O channels are individually configurable, allowing flexible logic such as toggle, ramp, manual override, and scene control.
It connects via RS‑485 (Modbus RTU) to a MicroPLC, MiniPLC, or any compatible controller, and can also integrate with Home Assistant (ESPHome) or SCADA/PLC systems. Configuration and diagnostics are performed through a driverless Web Serial interface via USB‑C, using the browser‑based WebConfig Tool. The module supports both master‑controlled and standalone local logic modes.
Getting Started
Quick Setup Process
Mount & Wire – Install on 35mm DIN rail, connect 24V DC power, sensors, and relay loads.
Configure – Plug in USB-C, open the WebConfig tool in Chrome/Edge, set Modbus address and I/O mapping.
Integrate – Connect to your controller via RS-485 and start automation.
What You Need
DIM‑420‑R1 module
24V DC SELV power supply
AC loads (dimmable lamps, LED drivers)
RS‑485 cable (twisted pair)
USB‑C cable for configuration
Chromium-based browser (Chrome/Edge)
Web Configuration Steps
Connect USB-C to module and PC
Click "Connect" and select serial port
Set Modbus address (default: 3) and baud rate (default: 19200 8N1)
Configure input actions, mapping, LED modes, and button functions
Settings save automatically to flash
Tech Specs
| Parameter | Details |
|---|---|
| Microcontroller | RP2350, Dual-core ARM Cortex-M0+ |
| Operating Voltage | 3.3V, 5V (logic), 24V DC input |
| Digital Inputs | 4 (isolated) |
| Dimming Outputs | 2 (Leading/Trailing edge phase-cut) |
| User Buttons | 4 (configurable) |
| User LEDs | 4 (configurable) |
| Communication | RS‑485 (Modbus RTU) |
| Configuration Interface | USB‑C (Web Serial) |
| Built-in LEDs | Power, TX/RX indicators |
| Dimensions (W×H×D) | 91 × 157.4 × 58.4 mm |
| Operating Temperature | 0–40℃ |
Documentation
The DIO-430-R1 is open-source hardware! You can build your own board using the following files:
Hardware Design Files
- Field Board Schematic: DIM‑420‑R1‑FieldBoard.pdf
- MCU Board Schematic: DIM‑420‑R1‑MCUBoard.pdf
- MOSFET Board Schematic: DIM‑420‑R1‑MOSFETBoard.pdf
Firmware & Software
- Firmware Source Code: DIM‑420‑R1/Firmware/default_DIM_420_R1
- ESPHome Integration Package: default_dim_420_r1_plc.yaml
All design files and documentation are available in the HomeMaster GitHub repository.
Input and Output
Digital Inputs (4 channels)
Optically isolated dry-contact inputs
Configurable press logic: Short, Long, Double, Short‑then‑Long
Actions: Toggle, Ramp, Preset recall, MAX, Ping‑pong
PTC + TVS protection on each channel
Dimming Outputs (2 channels)
Phase‑cut AC outputs (Leading/Trailing edge)
110/230 VAC, MOSFET‑based (WMM36N65C4)
Configurable Lower/Upper thresholds
Zero‑cross detection and sync
Internal snubber and EMI suppression
User Interface
4 Buttons: Configurable for local override (toggle, ramp, preset)
4 LEDs: Configurable steady/blink modes, linked to channel or DI state
Status LEDs: PWR (power), TX/RX (Modbus activity)
Communication Interfaces
Protocol: Modbus RTU
Role: Slave device
Default Settings: Address 3, 19200 baud, 8 data bits, No parity, 1 stop bit
Supported Functions: Read Coils (0x01), Read Discrete Inputs (0x02), Read Holding Registers (0x03), Read Input Registers (0x04), Write Single Coil (0x05), Write Single Register (0x06)
Modbus Address Map
Coils (Read/Write) - Function Codes 0x01, 0x05
| Address | Name | Type | Description | R/W |
|---|---|---|---|---|
| 200 | CH1_ON | Coil | Pulse CH1 ON (to Preset) | Write Only |
| 201 | CH2_ON | Coil | Pulse CH2 ON (to Preset) | Write Only |
| 210 | CH1_OFF | Coil | Pulse CH1 OFF | Write Only |
| 211 | CH2_OFF | Coil | Pulse CH2 OFF | Write Only |
| 300–303 | DI1..4_ENABLE | Coil | Enable DIx | Write Only |
| 320–323 | DI1..4_DISABLE | Coil | Disable DIx | Write Only |
Discrete Inputs (Read Only) - Function Code 0x02
| Address | Name | Type | Description |
|---|---|---|---|
| 1–4 | DI1‑DI4 | Discrete Input | Digital input state |
| 50–51 | CH1_ON, CH2_ON | Discrete Input | Channel active status |
| 90–93 | LED1‑LED4 | Discrete Input | LED physical state |
| 120–121 | ZC1_OK, ZC2_OK | Discrete Input | Zero‑cross detection status |
Holding Registers (Read/Write) - Function Codes 0x03, 0x06
| Address | Name | Description | Range |
|---|---|---|---|
| 400/401 | Level | Output level (0‑255) | 0–255 |
| 410/411 | Lower | Minimum dimming level | 0–255 |
| 420/421 | Upper | Maximum dimming level | 0–255 |
| 430/431 | Freq_x100 | Mains frequency ×100 (Hz) | RO |
| 440/441 | Percent×10 | Dimming percent ×10 | 0–1000 |
| 460/461 | LoadType | Lamp/Heater/Key | 0/1/2 |
| 470/471 | CutMode | Leading/Trailing | 0/1 |
| 480/481 | Preset | Preset dimming level | 0–255 |
Home Assistant & ESPHome Integration Guide
Overview
The DIM‑420‑R1 integrates seamlessly with Home Assistant via ESPHome using the Modbus RTU protocol. This guide covers both quick integration using our pre‑built package and manual configuration for advanced users.
Prerequisites
Before starting, ensure you have:
ESPHome device (HomeMaster MiniPLC/MicroPLC or any ESP32/ESP8266 with RS‑485)
RS‑485 connection between ESP device and DIM‑420‑R1
24V power to DIM‑420‑R1 module
Home Assistant with ESPHome add‑on installed
RS‑485 Configuration
uart:
id: uart_modbus
tx_pin: GPIO17
rx_pin: GPIO16
baud_rate: 19200
parity: NONE
stop_bits: 1
modbus:
id: modbus_bus
uart_id: uart_modbus
Import DIM‑420‑R1 Package
packages:
dim_430_r1:
url: https://github.com/isystemsautomation/HOMEMASTER
ref: main
files:
- path: DIM-420-R1/Firmware/default_dim_420_r1_plc/default_dim_420_r1_plc.yaml
vars:
dim_prefix: "Living Room" # Custom name for your entities
dim_id: living_room_module # Unique internal ID
dim_address: 3 # Must match WebConfig Modbus address
refresh: 1d
Customize Variables
dim_prefix: Appears in entity names (e.g., "Living Room CH1 Level")
dim_id: Internal identifier for the module
dim_address: Modbus address (must match WebConfig setting)
Multiple Module Example
packages:
dim_kitchen:
url: https://github.com/isystemsautomation/HOMEMASTER
ref: main
files:
- path: DIM-420-R1/Firmware/default_dim_420_r1_plc/default_dim_420_r1_plc.yaml
vars:
dim_prefix: "Kitchen"
dim_id: kitchen_module
dim_address: 4
refresh: 1d
dim_bedroom:
url: https://github.com/isystemsautomation/HOMEMASTER
ref: main
files:
- path: DIM-420-R1/Firmware/default_dim_420_r1_plc/default_dim_420_r1_plc.yaml
vars:
dim_prefix: "Bedroom"
dim_id: bedroom_module
dim_address: 5
refresh: 1d
Programming
Supported Development Environments
Arduino IDE with RP2350 support
PlatformIO with RP2350 toolchain
MicroPython (community builds available)
Firmware Flashing
Connect USB-C to PC
Hold Buttons 3 + 4 to enter BOOT mode
Hold Buttons 1 + 2 to RESET the module
Upload via:
UF2 drag-and-drop to mounted drive, OR
PlatformIO/Arduino IDE upload
Pin Mapping (Default Firmware)
| Pin Name | GPIO | Function |
|---|---|---|
| IN1 | GPIO6 | Digital Input 1 |
| IN2 | GPIO11 | Digital Input 2 |
| IN3 | GPIO12 | Digital Input 3 |
| IN4 | GPIO7 | Digital Input 4 |
| CH1 | GPIO10 | Dimming Channel 1 Driver |
| CH2 | GPIO9 | Dimming Channel 2 Driver |
| ZC1 | GPIO18 | Zero‑cross detection CH1 |
| ZC2 | GPIO19 | Zero‑cross detection CH2 |
| BTN1 | GPIO1 | Button 1 |
| BTN2 | GPIO2 | Button 2 |
| BTN3 | GPIO3 | Button 3 |
| BTN4 | GPIO0 | Button 4 |
| LED1 | GPIO13 | User LED 1 |
| LED2 | GPIO14 | User LED 2 |
| LED3 | GPIO15 | User LED 3 |
| LED4 | GPIO20 | User LED 4 |
| RS485_TX | GPIO4 | RS‑485 Transmit |
| RS485_RX | GPIO5 | RS‑485 Receive |
Related products
These other products might interest you