

Dimmer esp v1 main
a rotary dimmer switch
- Size
- 44 × 48.1 mm
- Copper layers
- 4
- Thickness
- 1.6 mm
- Parts
- 59
- Nets
- 52
- Pads
- 231
- Tracks, vias
- 829, 80
- Routed
- Yes
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 21 Nov 2023
- Updated
- 28 Oct 2026
Overview
Dimmer esp v1 main is an open-source printed circuit board by dagroe, from the dagroe/zigbee-rotary-dimmer-switch repository on GitHub, published under the MIT licence. It is a 4-layer board of 44 × 48.1 mm with 59 parts on 52 nets, routed with 829 tracks and 80 vias.
It is built around the ESP32-C6-MINI-1-N4, SN74LV1T125DBVR-TP and IRM-02-5S, with the PEC11S-929K-S0015, SGM2212-3.3XKC3G/TR and 0603B103K500NT among its other parts. Its parts include 20 resistors, 12 capacitors, 6 diodes, 5 ICs and 4 switches. It belongs with the ESP32 and RISC-V boards of this library.
Main components
12ESP32-C6-MINI-1-N4
SMD-53P-106dBm -40℃~+85℃ 2.4GHz 21dBm 354mA 3V~3.6V 71mA ESP32-C6FH4 Integrated Bluetooth function、Integrated Zigbee function On-board PCB Antenna UART、SPI、I2C、GPIO、I2S SMD-53P WiFi Modules ROHSEspressif SystemsWiFi ModulesSN74LV1T125DBVR-TP
SOT-23-5-40℃~+125℃ 1 1 1.6V~5.5V 1uA 2.7ns@5V,15pF 74LV 8mA 8mA Power-off isolation、Output enable、Level shifting Tri-State Unidirectional SOT-23-5 Buffers, Drivers, Receivers, Transceivers ROHSTECH PUBLICBuffers, Drivers, Receivers, TransceiversIRM-02-5S
SMD-14P,33.7x22.2mm1 2W 400mA 5V 70% 85VAC~305VAC SMD-14P,33.7x22.2mm Power Module/Power Supply ROHSMWAC-DC Power ModulesPEC11S-929K-S0015
SMD-40℃~+70℃ 10mA 30/15 5V Incremental Support Two-phase output Vertical welding SMD Rotary Encoders ROHSBournsRotary EncodersSGM2212-3.3XKC3G/TR
SOT-223-3-40℃~+125℃ 0.002%Vout 20V 3.3V 450mV@(800mA) 800mA 80dB@(120Hz) 80uA Fixed Short Circuit Protection、Thermal Shutdown SOT-223-3 Voltage Regulators - Linear, Low Drop Out (LDO) Regulators ROHSSG MicroVoltage Regulators - Linear, Low Drop Out (LDO) Regulators0603B103K500NT
060310nF 50V X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHSGuangdong Fenghua Advanced Tech (FH)Multilayer Ceramic Capacitors MLCC - SMD/SMTCT41G-0603-2X1-50V-0.1UF-K(N)
0603100nF 50V ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHSTORCHMultilayer Ceramic Capacitors MLCC - SMD/SMTBNLESD5D5.0CT1G
SOD-5231 120W@8/20us 15V 18pF 500nA 5V 8A@8/20us 9.5V Bidirectional ESD IEC 61000-4-2、IEC 61000-4-5、IEC 61000-4-4 SOD-523 ESD and Surge Protection (TVS/ESD) ROHSBORNESD And Surge Protection (TVS/ESD)CC0603KRX7R9BB104
0603100nF 50V X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHSYAGEOMultilayer Ceramic Capacitors MLCC - SMD/SMT1N4148WS
SOD-3231.25V@150mA 100V 150mA 1uA@75V 200mW 2A 4ns Independent SOD-323 Switching Diodes ROHSJiangsu Changjing Electronics Technology (CJ)Switching Diodes1N5819HW-7-F-01
SOD-123Schottky DiodesDiodes IncorporatedBC817-40,215
SOT-23SOT-23 Bipolar (BJT) ROHSNXP SemiconductorsBipolar (BJT)
README
README.mdA rotary Zigbee dimmer switch
A Zigbee dimmer switch with a tactile feeling like classic rotary dimmers that seamlessly integrates with your existing switch and socket design lines (e.g. Gira System 55).
![]() | ![]() |
|---|
Use case, requirements, and features
The goal of this dimmer switch is to
- provide tactile feeling like classic rotary dimmers, i.e. rotate and push one big knob (instead of multiple buttons)
- integrate with existing switch and socket design lines (e.g. Gira System 55), also for multi frames
- offer an optional 230V (or 110V) power supply, no more changing batteries + acts as Zigbee router
- control existing smart lights (e.g. Philips Hue), not making classic bulbs smart (i.e. switching/dimming classic bulbs)
Also nice to have:
- be extendable, e.g. easily add multiple dimmer switches or push buttons in multi frames
- ✅ allow for a second rotary input by rotating the knob while pushing it (e.g. to change color temperature or scenes) — implemented: push + rotate changes color temperature
- ✅ feature an integrated 230V (or 110V) mechanical switch to switch power of the connected lamp socket (e.g. for emergencies or to reset the lamp when replacing classic wall switches) — implemented: on-board relay + dedicated button
- be affordable
Backstory: Why yet another Zigbee dimmer switch?
TL;DR; I couldn't find one to fit my use case, so I decided to build my own.
When I moved into my new home I already had many Philips Hue Bulbs and classic Hue dimmer switches (the on with the four buttons) to control the lights. However, those didn't integrate well with my Gira System 55 outlets, switches, frames, etc. even when using fancy adapters (https://www.samotech.co.uk/products/philips-hue-dimmer-frame-cover-light-switch/) And I was also a big fan of using a rotary knob for dimming lights, since it is just more convenient.
So why didn't I use available rotary zigbee dimmers? Basically all dimmers I found are "real" dimmers, in the sense that they expect to control a load (classic dimmable bulb) or simply don't fit into the 55mm Gira system.
Since I though "well, it can't be that hard to hook up a rotary encoder to a Zigbee chip", I set out to build a rotary dimmer switch myself.
Current state of development
A working second prototype is built around the ESP32-C6. It joins any standard Zigbee coordinator (zigbee2mqtt, Home Assistant ZHA, deCONZ, …) as a mains-powered Zigbee router and controls bound smart lights with a single rotary knob. Hardware, firmware, and enclosure design files are all in this repository. It is a DIY prototype, not a finished product — see Help wanted.
Hardware
- ESP32-C6-MINI module (Zigbee/Thread radio), programmed/powered over USB-C.
- Integrated 230V → 5V power supply (IRM-02-5S) plus a 3.3V regulator — no batteries, and it acts as a Zigbee router.
- Rotary encoder with push (the single "big knob") for dimming and on/off.
- WS2812B RGB LED for status/feedback.
- On-board 230V relay (on a normally-closed contact) to switch the connected lamp socket directly, with a dedicated button to toggle it.
- A separate commissioning button for pairing / factory reset.
- Two external daughterboard ports so the in-wall module can drive a second control surface: a port for an external rotary encoder (a second dimmer) and a port for a plain wall switch. Both are optional — when nothing is wired in they idle and stay unused.
- Designed to fit Gira System 55 frames.
Controls
| Input | Action |
|---|---|
| Rotate knob | Brightness up / down (bound lights) |
| Push knob — short tap | Toggle on / off |
| Push knob — hold | Off |
| Push and rotate | Color temperature (warm / cool) |
| Relay button — tap | Cut / restore the 230V outlet (works even with no network) |
| External encoder (optional) | Second, independently bindable dimmer — same controls as the knob |
| External wall switch (optional) | Toggle on / off for its own independently bound light |
| Commission button — tap | Pair (start network steering) |
| Commission button — hold ~5 s | Factory reset (yellow warning while holding, red on reset) |
LED feedback: green = joined · solid red = not connected · white blink = command sent · red blink = command dropped (not joined) · blue blink = relay toggled · yellow = pairing / reset warning.
Firmware
Built with ESP-IDF and the esp-zigbee-sdk. From firmware/:
idf.py set-target esp32c6
idf.py build
idf.py -p <PORT> flash monitorAfter the first flash, firmware updates are delivered over the air (standard Zigbee OTA, with automatic rollback of a bad image). The single source of truth for the version is firmware/main/version.h.
Repository layout
hardware/— KiCad schematics, PCB, and exported gerbers/3D models.firmware/— ESP-IDF project (firmware/docs/OTA.md,firmware/z2m/README.md,firmware/TODO.md).enclosure/— printable enclosure / knob design files.
zigbee2mqtt integration & over-the-air updates
The dimmer joins any standard Zigbee coordinator and exposes four endpoints: the on-board controller (endpoint 1) that sends on/off, brightness and color commands to bound lights, the on-board 230V relay (endpoint 2) to switch the connected lamp socket directly, and the two optional daughterboard ports — an external encoder (endpoint 3, a second dimmer) and an external wall switch (endpoint 4). Each controller endpoint is bound independently, so they act as separate controllers sharing one device card. It also implements the standard Zigbee OTA Upgrade cluster, so firmware updates are delivered over the air. To add the device to zigbee2mqtt and receive OTA updates from this repo, follow firmware/z2m/README.md. Firmware-side OTA details (partitioning, rollback) are in firmware/docs/OTA.md.
Help wanted
My prototype is working but I see a lot of potential for improvement. Since I am mostly a software engineer with limited knowledge of electronics, I am looking for other interested in taking this project further. You can find me on discord here: https://discord.gg/CjbDc5nPja or checkout the discussion here: https://community.home-assistant.io/t/diy-zigbee-rotary-wall-dimmer/681751
Parts
59| Qty | Value | Footprint | References |
|---|---|---|---|
| 15 | 10k | Resistor_SMD:R_0603_1608Metric | R1, R2, R3, R4, R5, R6, R8, R9, R12, R13, R14, R15, R16, R18, R19 |
| 4 | 0.01u | Capacitor_SMD:C_0603_1608Metric | C1, C2, C11, C12 |
| 3 | 0.1uF/50V(10%) | Capacitor_SMD:C_0603_1608Metric | C3, C5, C9 |
| 3 | 10uF/25V(20%) | Capacitor_SMD:C_Elec_4x5.4 | C4, C6, C8 |
| 3 | LESD5D5.0CT1G | Diode_SMD:D_SOD-523 | D2, D3, D5 |
| 2 | 5.1k | Resistor_SMD:R_0603_1608Metric | R10, R11 |
| 2 | MountingHole | MountingHole:MountingHole_2.2mm_M2_DIN965 | H1, H2 |
| 1 | 0.1uF | Capacitor_SMD:C_0603_1608Metric | C10 |
| 1 | 1N4148WS | Diode_SMD:D_SOD-323 | D1 |
| 1 | 1N5819HW-7-F | Diode_SMD:D_SOD-123 | D4 |
| 1 | 1k | Resistor_SMD:R_0603_1608Metric | R7 |
| 1 | 1u | Capacitor_SMD:C_0603_1608Metric | C7 |
| 1 | 3.3k | Resistor_SMD:R_0603_1608Metric | R17 |
| 1 | 330 | Resistor_SMD:R_0603_1608Metric | R20 |
| 1 | BC817 | Package_TO_SOT_SMD:SOT-23 | Q1 |
| 1 | Commission | button_jlc:SW-SMD_L3.9-W3.0-P4.45 | SW1 |
| 1 | Conn_01x02 | Connector_JST:JST_SH_SM02B-SRSS-TB_1x02-1MP_P1.00mm_Horizontal | J3 |
| 1 | ESP32-C6-MINI | espressif_mcu:WIFIM-SMD_61P-L16.6-W13.2-P0.80-ESP32-C6-MINI-1-N4 | U4 |
| 1 | FTR-LYCA005Y | relay_mouser:FTRLYCA024Y | K1 |
| 1 | Fuse 230V 500mA Slow | jlc_misc:0443.500DR | F1 |
| 1 | GND | TestPoint:TestPoint_Pad_D1.5mm | TP4 |
| 1 | GPIO9 | TestPoint:TestPoint_Pad_D1.5mm | TP1 |
| 1 | IRM-02-5S | Converter_ACDC:Converter_ACDC_MeanWell_IRM-02-xx_SMD | PS1 |
| 1 | LED: WS2812B_5050 | LED_SMD:LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm | D6 |
| 1 | PEC11S-929K-S0015 | bourns_encoder:PEC11S929KS0015 | IC1 |
| 1 | RX | TestPoint:TestPoint_Pad_D1.5mm | TP3 |
| 1 | Reset | button_jlc:SW-SMD_L3.9-W3.0-P4.45 | SW3 |
| 1 | SGM2212-3.3XKC3G/TR | ldo_jlcpcb:SOT-223-3_L6.5-W3.4-P2.30-LS7.0-BR | U1 |
| 1 | SM05B-SRSS-TB_LF__SN_ | Connector_JST:JST_SH_SM05B-SRSS-TB_1x05-1MP_P1.00mm_Horizontal | J2 |
| 1 | SN74LV1T125DBVR | Package_TO_SOT_SMD:SOT-23-5 | U3 |
| 1 | Screw_Terminal_01x03 | TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-3-5.08_1x03_P5.08mm_Horizontal | J1 |
| 1 | TX | TestPoint:TestPoint_Pad_D1.5mm | TP2 |
| 1 | Toggle | button_jlc:SW-SMD_L3.9-W3.0-P4.45 | SW2 |
| 1 | USB TYPE-C 16PLT-H10.0 | usb_jlc:TYPE-C-SMD_USB4120-03-C | U2 |
More from dagroe/zigbee-rotary-dimmer-switch
1- 2 layers42 × 39.5 mm

Similar boards
- 2 layers28 × 20 mm

Microduck Audio AMP R3
ldcyes/OpenDuck
已完成可编辑原理图、真实四层 PCB 和本地库。阶梯板面积 4510 mm²,比原 65×60 + 32×30 mm 两板总面积 4860 mm² 少 350 mm²(7.20%)。原 TDK 模块本体、四个安装孔和原 TDK 器件位置保留,回生电容采用原料号卧装,J1 因实际拔插通道冲突改为同系列 BM08 顶插。当前为工程候选,未制造,未完成热、回生瞬态、低电量或行走验收。
14 parts - 4 layers96 × 60 mm

- 2 layers55 × 35 mm

- 2 layers100 × 95 mm

- 4 layers150 × 30 mm

Single sh proto
andrewsharmon/rp2350-stepper-controller
Low-cost 10-axis sine-microstepping controller for small steppers on the RP2350 (PIO + DMA). WIP.
163 partsMIT - 2 layers127.5 × 68.5 mm

Ghost host
VEXU-GHOST/ghost_kicad
Welcome to UT IEEE RAS VEXU GHOST's repository for our PCB developments! - PCB Images - Onboarding
182 parts - 2 layers83.8 × 71.1 mm

Dev habit reminder
Rikeroo/habit-reminder
Low energy physical habit reminder, using RGB LEDs, a small task screen and tactile switches to build useful habits and get tasks done
13 parts - 4 layers35 × 35 mm

Canonical
AnasSarkiz/smart-nema14-motor-controller
STEPPERONLINE 14HM11-0404S controller — unrouted work-in-progress prototype; mechanical and electrical qualification pending
213 parts
Questions
How big is the Dimmer esp v1 main PCB?
It measures 44 × 48.1 mm and has 4 copper layers, 1.6 mm thick.
What parts does the Dimmer esp v1 main use?
59 parts, built around the ESP32-C6-MINI-1-N4, SN74LV1T125DBVR-TP, IRM-02-5S and PEC11S-929K-S0015. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
Where can I download the Dimmer esp v1 main KiCad files?
From the dagroe/zigbee-rotary-dimmer-switch repository on GitHub, at the commit this page was made from: the board is hardware/design_files/main_board/dimmer_esp_v1_main.kicad_pcb and its schematic hardware/design_files/main_board/dimmer_esp_v1_main.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Dimmer esp v1 main design in my own project?
Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

