# ESP32 LED Controller for Model Aircraft Professional LED controller firmware for ESP32. Designed for model aircraft with WS2812B LED strips. ## Features ### Hardware Support - **ESP32 DevKitC** and **ESP32-C3 MINI** Development Board - Dual WS2812B LED strip support (configurable GPIOs) - PWM signal input for RC control - Real-time LED animation at 60 FPS ### Animation Modes 1. **Black** - All LEDs off 2. **Red** - Solid red 3. **Blue** - Solid blue 4. **Green** - Solid green 5. **White** - Solid white 6. **Rainbow** - Smooth rainbow gradient 7. **Rainbow with Glitter** - Rainbow with sparkles 8. **Confetti** - Random colored speckles 9. **Sinelon** - Sweeping colored dot with trails 10. **BPM** - Pulsing stripes at 33 BPM 11. **Navigation** - Aviation lights (red left, green right) 12. **Chase (Red)** - Red dot chase effect 13. **Chase (RGB)** - RGB cycling chase effect 14. **Random** - Random LED colors ## Project Structure ``` led-controller-firmware/ ├── main/ │ ├── main.c # Application entry point │ ├── control.c/h # initialization │ ├── config.c/h # NVS │ ├── led.c/h # WS2812B control (RMT driver) │ ├── rcsignal.c/h # PWM signal reading │ ├── localbtn.c/h # Local btn reading │ └── animation.c/h # LED animation patterns ├── CMakeLists.txt ├── sdkconfig.defaults └── partitions.csv # OTA-enabled partition table ``` ## Build Instructions ### Prerequisites 1. Install ESP-IDF v5.0 or later 2. For ESP32-C3, ensure RISC-V toolchain is installed ### Building ```bash cd led-controller-firmware # For ESP32 DevKitC idf.py set-target esp32 idf.py build # For ESP32-C3 MINI idf.py set-target esp32c3 idf.py build ``` ### Flashing ```bash idf.py -p /dev/ttyUSB0 flash monitor ``` Replace `/dev/ttyUSB0` with your serial port. ## Hardware Setup ### Wiring ``` ESP32 Pin -> Component ----------- ---------- GPIO XX -> WS2812B Strip A Data GPIO XX -> WS2812B Strip B Data GPIO XX -> RC PWM Signal GPIO XX -> Local button Signal GND -> Common Ground 5V -> LED Strip Power (if current < 500mA) ``` ### LED Strips - **WS2812B** strips require 5V power - Each LED draws ~60mA at full white - Use external power supply for >10 LEDs - Add 100-500µF capacitor near strips - Add 330Ω resistor on data line ### PWM Signal - Standard RC PWM: 1000-2000µs pulse width - 1500µs threshold for mode switching - Rising edge >1500µs after <1500µs triggers next mode ## Development ### Adding New Animations 1. Add mode to `animation_mode_t` enum in `animation.h` 2. Implement animation function in `animation.c` 3. Add case to `animation_update()` switch statement ### Testing ```bash # Build and flash idf.py build flash # Monitor output idf.py monitor # Exit monitor: Ctrl+] ``` ## License See [LICENSE](LICENSE)