Skip to the content
PCBKitNew board
2 layers57.6 × 53.9 mmLEDController, the printed circuit board in 3D

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

5

README

README.md

English · 繁體中文

LightController

image

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

ComponentRole
ESP32-C3 Super MiniMCU, WiFi, HomeKit bridge
CH224KUSB-C PD sink controller (5V/9V/12V/15V/20V negotiation)
AP63205WUBuck converter, PD/DC rail → 5V for MCU
SN74LVC1T453.3V → 5V level shifter for NeoPixel DIN
IRFZ44N × 2Low-side N-MOSFETs for LED strip channels
UCC27423Dual 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..V4 for PD voltage, J for status JSON, plus full HomeSpan command set
  • OTA updates — via HomeSpan's built-in OTA

Building

  1. Copy src/config.h.example → src/config.h
  2. Edit config.h — set your WiFi credentials, HomeKit pairing code, MQTT broker IP, and NeoPixel count
  3. Build and flash:
bash
pio run -t upload
pio device monitor

Pin Map

GPIOFunction
0CH B PWM (strapping pin)
1CH A PWM
2CH A enable
3CH B enable
4NeoPixel DIN
5CH224K CFG1
6CH224K CFG3
7CH224K CFG2
8Status LED (boot strapping)
21CH224K PG (Power Good)

Project Structure

text
├── 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.ini

Dependencies

LibraryVersionPurpose
HomeSpan≥2.1.0HomeKit accessory framework
PubSubClient≥2.8MQTT client

Credits

License

MIT

Parts

37
QtyValueFootprintReferences
810KResistor_SMD:R_0805_2012MetricR4, R5, R6, R7, R8, R9, R10, R11
4MountingHole_PadMountingHole:MountingHole_3.2mm_M3_Pad_ViaH1, H2, H3, H4
3R1KResistor_SMD:R_0805_2012MetricR1, R2, R3
3Screw_Terminal_01x02TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-02P_1x02_P5.00mmJ3, J4, J5
210uFCapacitor_SMD:C_0805_2012MetricC5, C6
2C22µFCapacitor_SMD:C_1206_3216MetricC3, C4
2IRFZ44NPackage_TO_SOT_THT:TO-220-3_VerticalQ1, Q2
11uFCapacitor_SMD:C_0805_2012MetricC7
1AP63205WUPackage_TO_SOT_SMD:TSOT-23-6U1
1Barrel_Jack_Switch_MountingPinConnector_BarrelJack:BarrelJack_Kycon_KLDX-0202-xC_HorizontalJ2
1C100nFCapacitor_SMD:C_0805_2012MetricC2
1C10µFCapacitor_SMD:C_0805_2012MetricC1
1CH224KPackage_SO:SSOP-10-1EP_3.9x4.9mm_P1mm_EP2.1x3.3mmU3
1ESP32-C3_SUPERMINI_SMDLEDController:MODULE_ESP32-C3_SUPERMINI_SMDU2
1L4.7µHInductor_SMD:L_6.3x6.3_H3L1
1SN74LVC1T45DBVPackage_TO_SOT_SMD:SOT-23-6U5
1SS54Diode_SMD:D_SMAD1
1Screw_Terminal_01x03TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-03P_1x03_P5.00mmJ6
1UCC2742xLEDController:UCC2742xU4
1USB_C_ReceptacleConnector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12J1

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 mmAniboard, the printed circuit board in 3D

    Aniboard

    cheyao/aniboard

    An Anime-themed MX keyboard

    392 partsZlib
  • 2 layers81.3 × 72.9 mmController v4.3, the printed circuit board in 3D

    Controller v4.3

    RT-CUSTOMZ/Illumigon

    WLED-gesteuerte Lichtpanele

    48 parts1
  • 2 layers108.5 × 69.9 mmUsbpd adapter, the printed circuit board in 3D

    Usbpd adapter

    fachat/pcb_bits

    Various libs for symbols, footprints, partial schematics

    132 parts
  • 2 layers182.6 × 130.9 mmBlackmacro base, the printed circuit board in 3D

    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
  • 6 layers100 × 120 mmAstra piNas, the printed circuit board in 3D

    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 mmPico expansion board, the printed circuit board in 3D

    Pico expansion board

    eamars/RaspberryPi-Pico-Motor-Expansion-Board

    A raspberry pi pico expansion board designed for OpenTrickler project

    68 parts18GPL-3.0