Files
WS2812B-LED-RC-Controller/README.md
2026-01-05 21:01:26 +01:00

175 lines
4.5 KiB
Markdown

# ESP32 LED Controller for Model Aircraft
Professional LED controller firmware for ESP32 with Web-BLE configuration interface. 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
### Web-BLE Configuration
- **Pin Configuration**: Set GPIO pins for LED strips and PWM input
- **BLE Auto-Off**: Configure timeout (Never/1min/5min)
- **Manual Control**: Select animation modes from web interface
- **PWM Emulation**: Test mode switching without RC signal
- **OTA Firmware Update**: Upload new firmware via Bluetooth
## Project Structure
```
led-controller-firmware/
├── main/
│ ├── main.c # Application entry point
│ ├── control.c/h # BLE, NVS, initialization
│ ├── led.c/h # WS2812B control (RMT driver)
│ ├── rcsignal.c/h # PWM signal reading
│ └── animation.c/h # LED animation patterns
├── webapp/
│ ├── index.html # Web-BLE interface
│ ├── app/app.js # BLE communication logic
│ ├── css/style.css # UI styling
│ └── data/favicon.ico
├── 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
## Web-BLE Configuration
### Access the Interface
1. Open `webapp/index.html` in Chrome, Edge, or Opera (Web Bluetooth required)
2. Click "Connect via BLE"
3. Select "LED-Controller" from device list
4. Configure settings and control LEDs
### Configuration Options
#### Pin Setup
- **LED Strip A GPIO**: -1 to disable, 0-48 for GPIO pin
- **LED Strip B GPIO**: -1 to disable, 0-48 for GPIO pin
- **PWM Input GPIO**: -1 to disable, 0-48 for GPIO pin
#### BLE Timeout
- **Never**: BLE stays on until manually disabled
- **1 Minute**: Auto-disable after 1 min of boot (unless connected)
- **5 Minutes**: Auto-disable after 5 min of boot (unless connected)
#### Firmware Update
1. Build firmware: `idf.py build`
2. Find binary: `build/led_controller.bin`
3. Upload via Web-BLE interface
4. Device restarts with new firmware (settings reset)
## Default Configuration
On first boot or after reset:
- All pins: **Not configured** (-1)
- BLE timeout: **Never**
- Animation mode: **Black** (off)
Configure via Web-BLE before use.
## 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)