

LEDController
ESP32-C3 LED controller with USB-C PD input, HomeKit native, KiCad PCB design
- Size
- 57.6 × 53.9 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 37
- Nets
- 37
- Pads
- 163
- Tracks, vias
- 319, 55
- Pours
- 1
- Routed
- Yes
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 22 Jul 2026
- Updated
- 30 Oct 2026
Overview
LEDController is an open-source printed circuit board by Hydr0neFN, from the Hydr0neFN/LightController repository on GitHub, published under the MIT licence. It is a 2-layer board of 57.6 × 53.9 mm with 37 parts on 37 nets, routed with 319 tracks and 55 vias.
It is built around the AP63205WU, CH224K and SN74LVC1T45DBV, with the IRFZ44N and SS54 among its other parts. Its parts include 11 resistors, 7 capacitors, 6 connectors, 5 ICs and 2 transistors. It belongs with the lEDs and displays and home automation and IoT boards and the ESP32 and RISC-V boards of this library.
Main components
5AP63205WU
TSOT-23-6-40℃~+85℃@(TA) 1 1.1MHz 22uA 2A 3.8V~32V 5V Buck Built-in Fixed Overcurrent Protection、Light load efficient mode、Cycle-by-cycle current limiting、Hiccup current limiting、EMI optimization (spread spectrum) Step-down type Yes TSOT-23-6 DC-DC Converters ROHSDiodes IncorporatedDC-DC ConvertersCH224K
ESSOP-10-150mil-1mm-40℃~+90℃ 100W 4V~30V 5V、9V、12V、15V、20V Overvoltage Protection、Thermal Protection PD 3.0 Power Receiver Controller ESSOP-10-150mil-1mm USB PD ROHSWCH (Nanjing Qinheng Microelectronics)USB ConvertersSN74LVC1T45DBV
SOT-23-6-40℃~+85℃ 1 1 1.65V~5.5V 1.65V~5.5V 420Mbps Bidirectional Tri-State SOT-23-6 Translators, Level Shifters ROHSTexas InstrumentsTranslators, Level ShiftersIRFZ44N
TO-220110pF 130W 18mΩ@10V 39nC@10V 430pF 4V 50A 60V 880pF N-Channel TO-220 MOSFETs ROHSOSENMOSFETsSS54
SMA(DO-214AC)-55℃~+125℃ 1mA@40V 40V 550mV@5A 5A Independent SMA(DO-214AC) Schottky Diodes ROHSMDDSchottky Diodes
README
README.mdEnglish · 繁體中文
LightController
ESP32-C3 Super Mini based LED controller with USB-C PD input, DC barrel jack/ terminal block input, two PWM-dimmed LED strip channels, and an addressable NeoPixel output. Apple HomeKit native via HomeSpan, with optional MQTT status reporting.
Built as a one-person project for Year 1 Period 4 — Power up Yourself at Hanze University of Applied Sciences, Groningen.
Hardware
Custom PCB designed in KiCad (design files in pcb/).
Key Components
| Component | Role |
|---|---|
| ESP32-C3 Super Mini | MCU, WiFi, HomeKit bridge |
| CH224K | USB-C PD sink controller (5V/9V/12V/15V/20V negotiation) |
| AP63205WU | Buck converter, PD/DC rail → 5V for MCU |
| SN74LVC1T45 | 3.3V → 5V level shifter for NeoPixel DIN |
| IRFZ44N × 2 | Low-side N-MOSFETs for LED strip channels |
| UCC27423 | Dual gate driver for MOSFET channels |
Power Input (Up to 24V tolorance)
- USB-C PD via CH224K — negotiates 5V/9V/12V/15V/20V from a PD source
- DC barrel jack — direct input (e.g. 12/24V wall adapter), bypasses PD negotiation
- Terminal Block — direct input if user have PSU input, bypasses PD negotiation.
Three inputs feed the LED strips directly and the AP63205 buck for 5V MCU power.
Outputs (All shares same power rail)
- Channel A — PWM-dimmed LED strip (low-side MOSFET, enable gate)
- Channel B — PWM-dimmed LED strip (low-side MOSFET, enable gate)
- NeoPixel — addressable RGB string via level-shifted DIN (SN74LVC1T45)
PCB History
The PCB was originally designed by Andrei (ihoneypot) as a basic LED controller. I modified the design to add:
- USB-C PD input with CH224K voltage negotiation
- DC barrel jack input as alternative power source
- ESP8266 → ESP32-C3 Super Mini swap (HomeKit-capable, smaller footprint)
- Unified power routing: three input paths merged to one rail, split to two LED strip outputs + NeoPixel output
- 3.3V→5V level shifter for NeoPixel data line
PD Status — Not Working
The CH224K PD negotiation circuit is currently disabled (ENABLE_PD 0 in config). During bringup we burned several CH224K chips and discovered through debugging:
- The 1kΩ resistor from VBUS to VDD acts as a voltage divider but the 0805 package cannot dissipate the power at higher voltages (P = V²/R; at 20V that's 0.4W through a 0.1W-rated resistor — it overheats and eventually burns)
- USB-C D+/D- must be shorted on the chip side for proper enumeration
- The USB-C connector requires careful reflow; loose joints cause intermittent communication
Fixes needed for a future revision:
- Use a power resistor rated for ≥0.4W (or ≥0.15W if limiting to 12V max)
- Short D+/D- on the CH224K side, remove the data line routing from the USB-C connector
- The firmware PD controller (
PDController.h) is implemented but untested on hardware — only the hardware needs fixing before end-to-end testing can happen
Firmware
PlatformIO project targeting nologo_esp32c3_super_mini via the pioarduino fork (arduino-esp32 core 3.3.9, ESP-IDF 5.5.4).
Features
- HomeKit native — two dimmable lightbulbs (CH A/B) + one RGB lightbulb (NeoPixel), bridged accessory
- PD voltage switching — load-shedding before rail transition, NVS persistence for brown-out recovery (disabled until hardware fix)
- MQTT status — periodic JSON status publish, network voltage control via
lightctrl/cmd/voltage - Web Log — live status/log at
http://<device-ip>/status - Serial CLI —
V0..V4for PD voltage,Jfor status JSON, plus full HomeSpan command set - OTA updates — via HomeSpan's built-in OTA
Building
- Copy
src/config.h.example→src/config.h - Edit
config.h— set your WiFi credentials, HomeKit pairing code, MQTT broker IP, and NeoPixel count - Build and flash:
pio run -t upload
pio device monitorPin Map
| GPIO | Function |
|---|---|
| 0 | CH B PWM (strapping pin) |
| 1 | CH A PWM |
| 2 | CH A enable |
| 3 | CH B enable |
| 4 | NeoPixel DIN |
| 5 | CH224K CFG1 |
| 6 | CH224K CFG3 |
| 7 | CH224K CFG2 |
| 8 | Status LED (boot strapping) |
| 21 | CH224K PG (Power Good) |
Project Structure
├── src/
│ ├── main.cpp # Setup, loop, serial commands, status LED
│ ├── config.h.example # Configuration template (copy to config.h)
│ ├── Lights.h # DimmableChannel + NeoStrip HomeKit services
│ ├── PDController.h # CH224K PD voltage negotiation driver
│ └── StatusReporter.h # MQTT publisher + JSON status builder
├── pcb/ # KiCad 10 design files
│ ├── LEDController.kicad_sch # Schematic
│ ├── LEDController.kicad_pcb # PCB layout
│ ├── LEDController.kicad_pro # Project file
│ ├── LEDController.csv # BOM
│ ├── LEDController.pretty/ # Custom footprints (ESP32-C3 module, UCC27423)
│ ├── LedPannel.pretty/ # Custom footprints (PowerDI diode, inductor)
│ └── Prod/ # Production Gerber files
└── platformio.iniDependencies
| Library | Version | Purpose |
|---|---|---|
| HomeSpan | ≥2.1.0 | HomeKit accessory framework |
| PubSubClient | ≥2.8 | MQTT client |
Credits
- PCB base design — Andrei (ihoneypot)
- Modifications, firmware, bringup — Yu-I (Hydr0neFN)
License
MIT
Parts
37| Qty | Value | Footprint | References |
|---|---|---|---|
| 8 | 10K | Resistor_SMD:R_0805_2012Metric | R4, R5, R6, R7, R8, R9, R10, R11 |
| 4 | MountingHole_Pad | MountingHole:MountingHole_3.2mm_M3_Pad_Via | H1, H2, H3, H4 |
| 3 | R1K | Resistor_SMD:R_0805_2012Metric | R1, R2, R3 |
| 3 | Screw_Terminal_01x02 | TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-02P_1x02_P5.00mm | J3, J4, J5 |
| 2 | 10uF | Capacitor_SMD:C_0805_2012Metric | C5, C6 |
| 2 | C22µF | Capacitor_SMD:C_1206_3216Metric | C3, C4 |
| 2 | IRFZ44N | Package_TO_SOT_THT:TO-220-3_Vertical | Q1, Q2 |
| 1 | 1uF | Capacitor_SMD:C_0805_2012Metric | C7 |
| 1 | AP63205WU | Package_TO_SOT_SMD:TSOT-23-6 | U1 |
| 1 | Barrel_Jack_Switch_MountingPin | Connector_BarrelJack:BarrelJack_Kycon_KLDX-0202-xC_Horizontal | J2 |
| 1 | C100nF | Capacitor_SMD:C_0805_2012Metric | C2 |
| 1 | C10µF | Capacitor_SMD:C_0805_2012Metric | C1 |
| 1 | CH224K | Package_SO:SSOP-10-1EP_3.9x4.9mm_P1mm_EP2.1x3.3mm | U3 |
| 1 | ESP32-C3_SUPERMINI_SMD | LEDController:MODULE_ESP32-C3_SUPERMINI_SMD | U2 |
| 1 | L4.7µH | Inductor_SMD:L_6.3x6.3_H3 | L1 |
| 1 | SN74LVC1T45DBV | Package_TO_SOT_SMD:SOT-23-6 | U5 |
| 1 | SS54 | Diode_SMD:D_SMA | D1 |
| 1 | Screw_Terminal_01x03 | TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-03P_1x03_P5.00mm | J6 |
| 1 | UCC2742x | LEDController:UCC2742x | U4 |
| 1 | USB_C_Receptacle | Connector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12 | J1 |
Questions
How big is the LEDController PCB?
It measures 57.6 × 53.9 mm and has 2 copper layers, 1.6 mm thick.
What parts does the LEDController use?
37 parts, built around the AP63205WU, CH224K, SN74LVC1T45DBV and IRFZ44N. 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 LEDController KiCad files?
From the Hydr0neFN/LightController repository on GitHub, at the commit this page was made from: the board is pcb/LEDController.kicad_pcb and its schematic pcb/LEDController.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the LEDController 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).
Similar boards
- 2 layers355 × 120 mm

- 2 layers81.3 × 72.9 mm

- 2 layers108.5 × 69.9 mm

- 2 layers50.8 × 27.8 mm

- 2 layers182.6 × 130.9 mm

Blackmacro base
KipJM/blackmacro-hardware
An open source, smaller, more configurable, and more capabable video editing keyboard based on the raspberry Pi Pico 2W.
189 parts29CERN-OHL-W-2.0 - 4 layers170.2 × 141.9 mm
![[DFR1142]Lite Carrier for LattePanda Mu, the printed circuit board in 3D](/embed/boards/ltbrain-mubook.jpg?size=s&soon)
[DFR1142]Lite Carrier for LattePanda Mu
LtBrain/MuBook
A x86 carrier board for the LattePanda Mu
308 parts37MIT - 6 layers100 × 120 mm

Astra piNas
jlcjak/astra_piNas
Six-layer CM5 Lite dual-NVMe carrier with PCIe switch, Ethernet, microSD, USB-C PD and PoE. Review design; fabrication hold documented.
176 parts30 - 4 layers91.7 × 66.8 mm

Pico expansion board
eamars/RaspberryPi-Pico-Motor-Expansion-Board
A raspberry pi pico expansion board designed for OpenTrickler project
68 parts18GPL-3.0