# Example for `ESP32-led-strip` Component
## What it Does
This example demonstrates how to control addressable LED strips using the `ESP32-led-strip` component within the ESP-IDF framework. It supports the following LED types:
- WS2812 / WS2812B
- SK6812 (RGB or RGBW)
- APA104
- APA102 / SK9822 (SPI)
- LPD8806 / WS2801 (SPI)
The component handles low-level RMT or SPI transmission depending on the LED type. It also supports both RGB and RGBW color formats.
## Configuration
No `menuconfig` configuration is required. The component is initialized by defining a configuration struct in code:
```c
smart_led_config_t config = {
.led_type = LED_TYPE_WS2812B,
.format = SMART_LED_RGB,
.rmt = {
.gpio = GPIO_NUM_18,
},
.num_pixels = 10
};
smart_led_init(&config);
```
## API Overview
The following public API functions are provided:
- `esp_err_t smart_led_init(const smart_led_config_t *config);`
- `esp_err_t smart_led_set_pixel(uint16_t index, uint8_t r, uint8_t g, uint8_t b, uint8_t w);`
- `esp_err_t smart_led_refresh(void);`
- `esp_err_t smart_led_clear(void);`
Use `.rmt` or `.spi` in the config struct depending on LED type (RMT for WS2812-type, SPI for APA102/WS2801-type).
## Example Code
```c
#include <stdio.h>
#include "smart_led.h"
void app_main(void)
{
smart_led_config_t config = {
.led_type = LED_TYPE_SK6812,
.format = SMART_LED_RGBW,
.rmt = {
.gpio = GPIO_NUM_18,
},
.num_pixels = 8
};
smart_led_init(&config);
for (int i = 0; i < 8; i++) {
smart_led_set_pixel(i, 255, 0, 0, 32); // red + soft white
}
smart_led_refresh();
}
```
## Building and Running
Build the project:
```bash
idf.py build
```
Flash it to the ESP32:
```bash
idf.py flash
```
Monitor logs:
```bash
idf.py monitor
```
## Example Output (LED behavior)
- LEDs display configured colors
- If RGBW: white mixes into output
- No flicker or stutter with correct timings
## Notes
- Fully compatible with all ESP32-series targets (ESP32, C2, C3, C5, C6, S2, S3)
- Automatically selects RMT or SPI backend
- RGBW output depends on strip capabilities
- Designed for HomeKit or other RGB/RGBW control layers
- You can combine this with a color conversion library like `color-converter` for dynamic effects
---
**StudioPieters®** | Innovation and Learning Labs
🌐 https://www.studiopieters.nl | 🧑💻 GitHub: https://github.com/AchimPieters
idf.py add-dependency "achimpieters/esp32-led-strip^1.0.0"