Skip to the content
2 layers93.4 × 42.6 mmEsp32-led controller v2, the printed circuit board in 3D

Esp32-led controller v2

arkandas/esp32-led-controller5

Controller for ws2812b/sk6812 LEDs

Size
93.4 × 42.6 mm
Copper layers
2
Thickness
1.6 mm
Parts
66
Nets
72
Pads
266
Tracks, vias
369, 202
Pours
1
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
25 Jan 2025
Updated
21 Jun 2026

Overview

Esp32-led controller v2 is an open-source printed circuit board by arkandas, from the arkandas/esp32-led-controller repository on GitHub, published under the MIT licence. It is a 2-layer board of 93.4 × 42.6 mm with 66 parts on 72 nets, routed with 369 tracks and 202 vias.

It is built around the SN74AHCT125PWRE4, SK6805-EC20 and B5819W, with the DC-005-5A-2.5 and USBLC6-2SC6 among its other parts. Its parts include 20 capacitors, 16 resistors, 6 ICs, 6 diodes and 6 switches. It belongs with the ESP32 boards of this library.

Main components

5

README

README.md

ESP32 LED Controller 💡

A custom ESP32-based controller for WS2812B/SK6812/WS2814 LED strips with web interface and Alexa integration.

Latest Version: V2 includes 24V RGBW support (WS2814), temperature/humidity monitoring, and enhanced status LEDs.

Versions

Version 2

✅ Released - Latest version in main branch

ESP32 LED Controller V2 Board

Version 1

✅ Released - Tagged as v1.0.0

ESP32 LED Controller Board


Version 2 Documentation

The following documentation applies to Version 2 of the project. All files are located in the v2/ directory.

✨ Features

  • 🎨 Web Interface - Real-time control with environment monitoring
  • 🗣️ Alexa Integration - Voice control support
  • 🔘 Physical Buttons - Manual brightness/mode control
  • 🌈 Multiple Effects - Rainbow, chase, breathing animations
  • 📱 Custom Colors - Full RGBW color picker
  • 🌡️ Temperature & Humidity - AHT20 sensor for environment monitoring
  • 💡 Status LEDs - 3x RGB status indicators (Power, WiFi, Strip)
  • ⚡ 24V RGBW Support - WS2814 LED strips with dedicated white channel

📁 Project Structure

text
v2/
├── code/                      # Arduino code & web interface
│   └── esp32-ws2814/          # WS2814 (RGBW) version
│       ├── data/              # Web interface files
│       │   ├── index.html     # Main web UI
│       │   ├── style.css      # Styling
│       │   └── app.js         # JavaScript controls
│       └── esp32-ws2814.ino   # Arduino sketch
├── kicad/                     # KiCad PCB project files
└── assets/                    # Board photos & schematics

🚀 Quick Start

Prerequisites
  1. Arduino IDE with ESP32 support
  2. Required Libraries:
    • Adafruit NeoPixel (for WS2814 RGBW)
    • FastLED (for status LEDs)
    • FauxmoESP (Alexa integration)
    • AsyncTCP & ESPAsyncWebServer (ESP32 versions)
    • LittleFS (file system)
    • Adafruit AHTX0 (temperature sensor)
Installation
  1. Add ESP32 Board Support:

    text
    File → Preferences → Additional Board Manager URLs:
    https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
  2. Board Configuration:

    • Board: "ESP32S3 Dev Module"
    • Flash Size: "8MB"
    • Partition Scheme: "8M with spiffs (3MB APP/1.5MB SPIFFS)"
  3. Install Libraries via Library Manager

Upload Process
  1. Configure Settings in the .ino file:

    cpp
    const char* ssid = "Your_WiFi_Network";
    const char* password = "Your_WiFi_Password";
    #define DEVICE_NAME "Your_Alexa_Device_Name"
    #define WIFI_HOSTNAME "Your_Device_Hostname"
    #define WEB_SERVER_PORT 8080  // Your preferred port
    #define NUM_LEDS 60  // Your LED count
  2. Upload Web Files:

    • Install Arduino LittleFS Upload plugin
    • Place the data folder in your sketch directory
    • Use: Cmd + Shift + P, then select "Upload LittleFS to Pico/ESP8266/ESP32"
  3. Upload Arduino Sketch normally

Programming via USB

The v2 board uses an ESP32-S3 with built-in USB - no need for an external USB-to-serial adapter.

USB Connection:

  • Connect a USB-C cable directly to the ESP32-S3's USB port
  • The board will show up as a serial device on your computer

Arduino IDE USB Configuration:

To get USB UART working on the Serial Monitor:

  1. Board Settings (Tools menu):

    • Board: ESP32S3 Dev Module
    • USB CDC On Boot: Enabled ⚠️ Important for Serial Monitor
    • USB Mode: Hardware CDC and JTAG
    • Upload Mode: UART0 / Hardware CDC
    • Flash Size: 8MB
    • Partition Scheme: 8M with spiffs (3MB APP/1.5MB SPIFFS)
    • Upload Speed: 921600 (or lower if uploads fail)
  2. Port Selection:

    • After connecting USB, select the port showing as ESP32-S3 in Tools → Port
    • macOS: Usually appears as /dev/cu.usbmodem*
    • Windows: Usually appears as COM*
    • Linux: Usually appears as /dev/ttyACM*

USB CDC On Boot Explained:

  • When Enabled, the Serial Monitor will work over USB immediately after boot
  • This allows you to see debug output using Serial.println() without additional hardware
  • The board will enumerate as a USB serial device (CDC - Communications Device Class)

First-Time Programming:

  1. Connect the board via USB-C
  2. The ESP32-S3 should automatically enter bootloader mode when uploading
  3. If upload fails, try:
    • Press and hold the BOOT button (if available on your board)
    • Click Upload in Arduino IDE
    • Release BOOT button when upload starts
  4. Open Serial Monitor (Ctrl/Cmd + Shift + M) at 115200 baud to see output

Troubleshooting:

  • Port not appearing: Try a different USB cable (must support data, not just power)
  • Upload fails: Lower the upload speed to 460800 or 115200
  • Serial Monitor shows gibberish: Ensure baud rate is set to 115200 and USB CDC On Boot is enabled

🔌 Hardware Connections

ESP32 PinConnection
GPIO 40WS2814 LED Strip Data
GPIO 41Status LEDs (3x SK6805-EC20)
GPIO 1I2C SCL (AHT20 Sensor)
GPIO 2I2C SDA (AHT20 Sensor)
GPIO 4-7Control Buttons

🌐 Usage

After successful upload:

  1. WiFi Connection: Status LEDs flash yellow (5x) when connected
  2. Web Interface: Visit http://[ESP32_IP]:[WEB_SERVER_PORT]

Web Interface V2

  1. Alexa: Say "Alexa, turn on [your device name]"
  2. Buttons: Physical controls for power/brightness/modes

🎛️ Controls

  • Power Button: Long press (0.5s) to toggle on/off
  • Brightness: ± buttons adjust in 10% steps
  • Mode Button: Cycle through colors and effects
  • Web Interface: Real-time RGBW control, effects, and environment monitoring

💡 Status LEDs

The board features 3 RGB status LEDs:

  • LED 1 (Power): Always green when powered
  • LED 2 (WiFi): Green when connected, Red when disconnected, Yellow during errors
  • LED 3 (Strip): Green when strip is on, Red when off

⚡ Hardware

Custom PCB design includes:

  • ESP32-S3-WROOM-1 (8MB Flash)
  • SN74AHCT125 level shifter (3.3V → 5V for WS2814)
  • LM1117S-3.3 voltage regulator
  • 3x SK6805-EC20 RGB status LEDs
  • AHT20 temperature & humidity sensor
  • 4 control buttons
  • 2.5mm barrel jack power input (24V for WS2814)

🔧 Key Differences from V1

  • RGBW Support: Dedicated white channel for better white light quality
  • 24V LED Strips: Uses WS2814 instead of WS2812B/SK6812
  • Environment Monitoring: Built-in AHT20 temperature and humidity sensor
  • Improved Status LEDs: 3x addressable RGB LEDs instead of single common anode LED
  • Enhanced Web Interface: Shows temperature, humidity, and more device information
  • Configurable Port: Web server port can be customized

Version 1 Documentation

The following documentation applies to Version 1 of the project. All files are located in the v1/ directory.

✨ Features

  • 🎨 Web Interface - Real-time control via browser
  • 🗣️ Alexa Integration - Voice control support
  • 🔘 Physical Buttons - Manual brightness/mode control
  • 🌈 Multiple Effects - Rainbow, chase, breathing animations
  • 📱 Custom Colors - Full RGB color picker
  • 🔧 Two LED Types - WS2812B (RGB) and SK6812 (RGBW) support

📁 Project Structure

text
v1/
├── code/                       # Arduino code & web interface
│   ├── esp32-ws2812b/          # WS2812B (RGB) version
│   │   ├── data/               # Web interface files
│   │   │   ├── index.html      # Main web UI
│   │   │   ├── style.css       # Styling
│   │   │   └── app.js          # JavaScript controls
│   │   └── esp32-ws2812b.ino   # Arduino sketch
│   └── esp32-sk6812/           # SK6812 (RGBW) version
│       ├── data/               # Web interface files
│       └── esp32-sk6812.ino    # Arduino sketch
├── kicad/                      # KiCad PCB project files
├── gerbers/                    # Manufacturing files
├── datasheets/                 # Component datasheets
├── ibom/                       # Interactive BOM
└── assets/                     # Board photos

🚀 Quick Start

Prerequisites
  1. Arduino IDE with ESP32 support
  2. Required Libraries:
    • FastLED (for WS2812B) or Adafruit NeoPixel (for SK6812)
    • FauxmoESP (Alexa integration)
    • AsyncTCP & ESPAsyncWebServer (ESP32 versions)
    • LittleFS (file system)
Installation
  1. Add ESP32 Board Support:

    text
    File → Preferences → Additional Board Manager URLs:
    https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
  2. Board Configuration:

    • Board: "ESP32S3 Dev Module"
    • Flash Size: "8MB"
    • Partition Scheme: "8M with spiffs (3MB APP/1.5MB SPIFFS)"
  3. Install Libraries via Library Manager

  4. Choose Your LED Type:

    • v1/code/esp32-ws2812b/ for standard RGB strips
    • v1/code/esp32-sk6812/ for RGBW strips with dedicated white channel
Upload Process
  1. Configure Settings in the .ino file:

    cpp
    const char* ssid = "Your_WiFi_Network";
    const char* password = "Your_WiFi_Password";
    #define DEVICE_NAME "Bedroom Lights"
    #define NUM_LEDS 60  // Your LED count
  2. Upload Web Files:

    • Install Arduino LittleFS Upload plugin
    • Place the data folder in your sketch directory
    • Use: Cmd + Shift + P, then select "Upload LittleFS to Pico/ESP8266/ESP32"
  3. Upload Arduino Sketch normally

🔌 Hardware Connections

ESP32 PinConnection
GPIO 2LED Strip Data
GPIO 17Status LED (Red)
GPIO 16Status LED (Green)
GPIO 18Status LED (Blue)
GPIO 4-7Control Buttons

🌐 Usage

After successful upload:

  1. WiFi Connection: Board flashes blue → yellow (5x) when connected
  2. Web Interface: Visit http://[ESP32_IP]:8080

Web Interface

  1. Alexa: Say "Alexa, turn on bedroom lights"
  2. Buttons: Physical controls for power/brightness/modes

🎛️ Controls

  • Power Button: Long press (0.5s) to toggle on/off
  • Brightness: ± buttons adjust in 10% steps
  • Mode Button: Cycle through colors and effects
  • Web Interface: Real-time RGB control and effects

📖 Blog Post

Read the full build story and PCB design process for V1: ESP32 LED Controller

⚡ Hardware

Custom PCB design includes:

  • ESP32-S3-WROOM-1 (8MB Flash)
  • SN74AHCT125 level shifter (3.3V → 5V)
  • LM1117S-3.3 voltage regulator
  • Common anode status LED
  • 4 control buttons
  • 2.5mm barrel jack power input

🛠️ Development

The web interface uses vanilla JavaScript with no external dependencies. All files are served from ESP32's LittleFS for fast loading and offline operation.

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

Parts

66
QtyValueFootprintReferences
70.1uFeasyeda2kicad:C0603C3, C9, C12, C14, C15, C18, C19
4MHolePadMountingHole:MountingHole_3.2mm_M3_Pad_ViaH1, H2, H3, H4
3100Keasyeda2kicad:R0402R5, R7, R10
3SK6805-EC20easyeda2kicad:LED-SMD_4P-L2.0-W2.0-BRLED1, LED2, LED3
2100ohmeasyeda2kicad:R0603R15, R16
210uFeasyeda2kicad:C0603C16, C17
21uFeasyeda2kicad:C0603C7, C13
222pfeasyeda2kicad:C0603C1, C2
227ohmeasyeda2kicad:R0603R3, R4
24.7keasyeda2kicad:R0603R12, R13
25.1Keasyeda2kicad:R0603R1, R2
2B5819Weasyeda2kicad:SOD-123_L2.7-W1.7-LS3.8-RDD2, D3
1+easyeda2kicad:SW-SMD_L3.9-W3.0-P4.45SW4
1-easyeda2kicad:SW-SMD_L3.9-W3.0-P4.45SW3
10.1uFeasyeda2kicad:C0402C6
11.1Aeasyeda2kicad:FUSE-SMD_L4.7-W3.4F1
11000uFeasyeda2kicad:CAP-TH_BD16.0-P7.50-D1.2-FDC20
110Keasyeda2kicad:R0603R11
110uFeasyeda2kicad:C1210C4
110uHeasyeda2kicad:IND-SMD_L6.6-W6.4L1
11uHeasyeda2kicad:IND-SMD_L8.2-W7.9L2
1220nFeasyeda2kicad:C0805C5
1220ohmeasyeda2kicad:R0603R14
122uFeasyeda2kicad:C0603C11
124.9Keasyeda2kicad:R0603R6
14.7uFeasyeda2kicad:C0805C10
1453Keasyeda2kicad:R0402R9
1475Keasyeda2kicad:R0402R8
147uFeasyeda2kicad:C1210C8
1AHT20_C2757850easyeda2kicad:SENSOR-SMD_L3.0-W3.0-P1.00-BRU5
1BOOTeasyeda2kicad:SW-SMD_L3.9-W3.0-P4.45SW2
1DC-005-5A-2.5easyeda2kicad:DC-IN-TH_DC-005-5A-2.5DC1
1ESP32-S3-WROOM-1(N16R8)easyeda2kicad:WIRELM-SMD_ESP32-S3-WROOM-1U3
1GPIOConnector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_VerticalJ2
1LED_STRIP_CONNeasyeda2kicad:CONN-TH_3P-P5.00_KF301-5.0-3PU9
1LMR33630ADDAReasyeda2kicad:ESOP-8_L4.9-W3.9-P1.27-LS6.0-TL-EPU1
1LOGOLOGOG***
1MODEeasyeda2kicad:SW-SMD_L3.9-W3.0-P4.45SW5
1POWEReasyeda2kicad:SW-SMD_L3.9-W3.0-P4.45SW6
1RESETeasyeda2kicad:SW-SMD_L3.9-W3.0-P4.45SW1
1SN74AHCT125PWReasyeda2kicad:TSSOP-14_L5.0-W4.4-P0.65-LS6.4-BLU4
1TLV62569APDRLReasyeda2kicad:SOT-563_L1.6-W1.2-P0.50-LS1.6-BRU2
1TYPE-C 16PIN 2MD(073)easyeda2kicad:USB-C-SMD_TYPE-C-6PIN-2MD-073USB1
1UARTConnector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ1
1USBLC6-2SC6easyeda2kicad:SOT-23-6_L2.9-W1.6-P0.95-LS2.8-BLD1

More from arkandas/esp32-led-controller

1
  • 2 layers53.8 × 36.2 mmEsp32-led controller, the printed circuit board in 3D

    Esp32-led controller

    arkandas/esp32-led-controller

    Controller for ws2812b/sk6812 LEDs

    25 parts5MIT

Similar boards

  • 2 layers100 × 100 mmHeatTable Base v0.9, the printed circuit board in 3D

    HeatTable Base v0.9

    DerSpatz/PCB-reflow-solder-table

    Table version of the PCB heat plate with advanced features and swappable heat plate

    82 parts14MIT
  • 2 layers70 × 64 mmWindpcb, the printed circuit board in 3D

    Windpcb

    lindestad/wind-controller

    LINDESTAD simracing wind controller: ESP32-C3 Zephyr firmware, KiCad PCB and SimHub integration

    82 parts
  • 2 layers42 × 32 mmRAMS - PCB, the printed circuit board in 3D

    RAMS - PCB

    JanClyde05/Road-Accident-Monitoring-System

    This directory contains the planning, specification, and initial KiCad project for RAMS Wearable PCB Revision C. Do not fabricate from this directory yet -- manual schematic wiring and DRC verification are still needed.

    68 parts1
  • 2 layers71.4 × 99.7 mmRP2350A Macropad, the printed circuit board in 3D

    RP2350A Macropad

    arkandas/rp2350-macropad

    RP2350A 3x3 mechanical macropad with a browser-programmable keymap and an on-board status LCD

    85 partsMIT
  • 2 layers100 × 120 mmDcc station, the printed circuit board in 3D

    Dcc station

    cc90202/DCC-esp32

    DCC command station for ESP32-C6 — NMRA-compliant model railroad controller in Rust

    82 parts12
  • 4 layers70 × 52 mmPager carrier rev a, the printed circuit board in 3D

    Pager carrier rev a

    vyquocvu/analog-ai-chip

    This directory contains the editable KiCad 10 source for the 70 mm × 52 mm, four-layer Pager-1 main carrier. The display, keypad, protected Li-Po pack, and analog accelerator are external assemblies.

    32 parts1MIT
  • 4 layers88.2 × 38.5 mmMotion play main, the printed circuit board in 3D

    Motion play main

    moclei/motion-play

    Motion sensing project for fast moving objects moving through a plane. With directionality.

    93 parts

Questions

How big is the Esp32-led controller v2 PCB?

It measures 93.4 × 42.6 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Esp32-led controller v2 use?

66 parts, built around the SN74AHCT125PWRE4, SK6805-EC20, B5819W and DC-005-5A-2.5. 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 Esp32-led controller v2 KiCad files?

From the arkandas/esp32-led-controller repository on GitHub, at the commit this page was made from: the board is v2/kicad/esp32-led-controller-v2.kicad_pcb and its schematic v1/kicad/esp32-led-controller.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Esp32-led controller v2 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).