128 lines
3.0 KiB
Markdown
128 lines
3.0 KiB
Markdown
# 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 # NVS, initialization
|
|
│ ├── 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 (COM3 on Windows).
|
|
|
|
## Hardware Setup
|
|
|
|
### Wiring
|
|
```
|
|
ESP32 Pin -> Component
|
|
----------- ----------
|
|
GPIO XX -> WS2812B Strip A Data
|
|
GPIO XX -> WS2812B Strip B Data
|
|
GPIO XX -> RC PWM 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
|
|
4. Update `MODE_NAMES` array in `webapp/app/app.js`
|
|
|
|
### Modifying LED Count
|
|
|
|
Edit `DEFAULT_NUM_LEDS_A` and `DEFAULT_NUM_LEDS_B` in `control.c`. TODO:
|
|
|
|
### Testing
|
|
|
|
```bash
|
|
# Build and flash
|
|
idf.py build flash
|
|
|
|
# Monitor output
|
|
idf.py monitor
|
|
|
|
# Exit monitor: Ctrl+]
|
|
```
|
|
|
|
## License
|
|
|
|
See [LICENSE](LICENSE)
|
|
|