SavaLED_ESP32 - Высокопроизводительная библиотека для ESP32
- Версия: 2.1.0
- Версия: 2.1.1
Автор: SavaLab
- SavaLED_ESP32 — это мощная, эффективная и полностью неблокирующая библиотека для платформы ESP32 (в среде Arduino IDE), предназначенная для управления адресными светодиодами (WS2812, SK6812 и совместимыми).
- Библиотека разработана с нуля для проектов, требующих максимальной производительности и отзывчивости. Благодаря использованию аппаратного модуля RMT и асинхронной архитектуры,
- SavaLED_ESP32 не останавливает выполнение основного цикла (loop()), что делает ее идеальным выбором для сложных задач, таких как аудиовизуализаторы, интерактивные инсталляции,
- IoT-устройства с сетевым управлением и любые проекты, где задержки недопустимы.
- Полностью неблокирующая: Вся логика, включая сложные встроенные эффекты, работает по асинхронному принципу, не "замораживая" loop().
- Высокая производительность: Использует аппаратный RMT-модуль ESP32 для генерации идеально стабильного сигнала, достигая максимально возможной частоты обновления ленты.
- Гибкие встроенные эффекты: Включает готовые к использованию, настраиваемые эффекты ("Радуга", "Кометы" и др.), которые можно комбинировать и применять к отдельным сегментам ленты.
- Удобное управление цветом: Поддерживает как RGB, так и интуитивно понятную модель HSV. Содержит богатую палитру из 24 предопределенных цветовых констант и функции для тонкого управления яркостью.
- Визуальное качество: Встроенная, оптимизированная гамма-коррекция обеспечивает более плавные и естественные градиенты и переходы яркости.
- Профессиональная архитектура: API спроектирован так, чтобы способствовать написанию чистого, эффективного и масштабируемого кода.
- Скачайте эту библиотеку в виде ZIP-архива.
- В Arduino IDE выберите Скетч -> Подключить библиотеку -> Добавить .ZIP библиотеку....
- Выберите скачанный ZIP-файл. Библиотека будет установлена.
- Примеры будут доступны в меню Файл -> Примеры -> SavaLED_ESP32.
- Архитектура правильного loop()
- Чтобы достичь максимальной производительности и плавности, вся работа с лентой должна строиться по единому принципу "Синхронизация кадра".
void loop() {
// Выполняем расчеты и отрисовку ТОЛЬКО тогда,
// когда лента физически готова принять новый кадр.
if (strip.canShow()) {
// 1. ПОДГОТОВКА в исключительных случаях если есть проблемы с наложение эфектов:
// При отчсутствии проблем не использовать. Рисуем фон (например, очищаем ленту).
// Это гарантирует отсутствие "фантомных" пикселей от прошлого кадра.
strip.clear();
// 2. РИСОВАНИЕ: Вызываем функции эффектов или setPixel/fill.
// Здесь можно комбинировать несколько вызовов для создания сложной сцены.
strip.rainbowCycle(0, 50, false, 50, 200);
strip.setPixel(75, WHITE);
// 3. ОТОБРАЖЕНИЕ: Отправляем готовый кадр на ленту.
strip.show();
}
// Здесь может быть любой другой ваш код (работа с датчиками, сетью и т.д.)
}- Этот паттерн — ключ к стабильной и эффективной работе со всеми функциями библиотеки.
-
bool begin(uint16_t numLeds, int pin) Инициализирует библиотеку. Вызывается один раз в setup()
-
void show() Инициирует асинхронную отправкуданных из буфера на ленту.
-
bool canShow() Ключевая функция! Проверяет, свободен ли RMT-модуль. Возвращает true, если можно рисовать и отправлять новый кадр
-
void setBrightness(uint8_t brightness) Устанавливает глобальную яркость для всей ленты (0-255). Применяется как финальный модификатор ко всем цветам в момент вызова show()
-
uint16_t getNumLeds() Возвращает количество светодиодов в ленте
Таблица предопределенных цветов (RGB)
| Категория | Название | HEX Код | Пример |
|---|---|---|---|
| Основные (яркие) | RED | 0xFF0000 |
🔴 Красный |
| LIME | 0x00FF00 |
🟢 Лайм | |
| BLUE | 0x0000FF |
🔵 Синий | |
| Вторичные (яркие) | YELLOW | 0xFFFF00 |
🟡 Желтый |
| CYAN | 0x00FFFF |
💧 Голубой (Циан) | |
| MAGENTA | 0xFF00FF |
🟣 Пурпурный (Маджента) | |
| Теплые оттенки | ORANGE | 0xFF7F00 |
🟠 Оранжевый |
| GOLD | 0xFFD700 |
✨ Золотой | |
| CRIMSON | 0xDC143C |
🩸 Малиновый | |
| PINK | 0xFF69B4 |
🌸 Розовый | |
| BROWN | 0xA52A2A |
🟤 Коричневый | |
| MAROON | 0x800000 |
🍷 Бордовый | |
| Холодные оттенки | GREEN | 0x008000 |
🌿 Зеленый (Лесной) |
| OLIVE | 0x808000 |
🫒 Оливковый | |
| TEAL | 0x008080 |
🌊 Бирюзовый | |
| SKYBLUE | 0x87CEEB |
☁️ Небесно-голубой | |
| NAVY | 0x000080 |
🌃 Темно-синий | |
| INDIGO | 0x4B0082 |
🫐 Индиго | |
| PURPLE | 0x800080 |
🔮 Пурпурный/Лиловый | |
| VIOLET | 0xEE82EE |
💜 Фиалковый | |
| Оттенки серого | WHITE | 0xFFFFFF |
⚪ Белый |
| SILVER | 0xC0C0C0 |
🪙 Серебряный | |
| GRAY | 0x808080 |
🔘 Серый | |
| BLACK | 0x000000 |
⚫ Черный (Выключено) |
- 0 Красный
- 42 Желтый
- 85 Зеленый (Лайм)
- 127 Голубой (Циан)
- 170 Синий
- 212 Пурпурный (Маджента)
- 255 Красный (цикл)
| функция | Описание |
|---|---|
| void setPixel(uint16_t n, uint8_t r, uint8_t g, uint8_t b) | Устанавливает цвет одного пикселя по RGB компонентам |
| void setPixel(uint16_t n, uint32_t color) | Устанавливает цвет одного пикселя из "упакованного" 32-битного значения (например, RED) |
| void setPixelColor(uint16_t n, uint32_t color, uint8_t brightness) | Устанавливает цвет пикселя, применяя к нему индивидуальную яркость |
| void setPixelHSV(uint16_t n, uint8_t h, uint8_t s, uint8_t v) | Устанавливает цвет пикселя по HSV (Тон, Насыщенность, Яркость) |
| void clear() | Быстро очищает весь буфер (заполняет черным цветом) |
| void fill(uint32_t color) | Заливает всю ленту одним цветом |
| void fillColor(uint32_t color, uint8_t brightness) | Заливает всю ленту цветом с применением указанной яркости |
| void fillHSV(uint8_t h, uint8_t s, uint8_t v) | Заливает всю ленту цветом, заданным в HSV |
| void rainbowStatic(...) | Рисует статичный градиент |
| Версия 1 (Радуга): rainbowStatic(start, num, reversed, brightness, start_hue) | |
| Версия 2 (Между тонами): rainbowStatic(start, num, reversed, brightness, start_hue, end_hue) |
- Важно: Все эти функции должны вызываться внутри if (strip.canShow()), непосредственно перед strip.show().
| Функция | Описание |
|---|---|
| void rainbowCycle(...) | Создает эффект "бегущей радуги" |
| Простая версия: rainbowCycle(speed, brightness) | |
| Расширенная версия: rainbowCycle(start, num, reversed, speed, brightness) | |
| void breathingRainbow(uint16_t speed, uint8_t brightness = 255) | Вся лента плавно переливается всеми цветами спектра |
| void runCometsEffect(...) | Запускает сложный эффект "Кометы" |
void runCometsEffect(
uint8_t num_comets,
uint8_t tail_length,
const uint32_t palette[],
int palette_size,
uint32_t background_color = BLACK,
uint16_t spawn_interval_ms = 1500
);- Пример использования:
const uint32_t my_palette[] = { GOLD, CYAN };
void loop() {
if (strip.canShow()) {
// Эта функция сама рисует фон, поэтому strip.clear() не нужен
strip.runCometsEffect(3, 15, my_palette, 2);
strip.show();
}
}| Функция | Описание |
|---|---|
| uint32_t Color(uint8_t r, uint8_t g, uint8_t b) | Вспомогательная функция для создания 32-битного значения цвета |
| void setGammaCorrection(bool enabled) | Включает (true) или выключает (false) гамма-коррекцию. По умолчанию включена |
Показать Таблицу Цветовых Констант
| Категория Цветов | Название | HEX Код | Пример |
|---|---|---|---|
| RGB Основные (насыщенные) | RED | 0xFF0000 | 🔴 Красный |
| LIME | 0x00FF00 | 🟢 Лайм | |
| BLUE | 0x0000FF | 🔵 Синий | |
| RGB Вторичные (комбинированные) | YELLOW | 0xFFFF00 | 🟡 Желтый |
| CYAN | 0x00FFFF | 💧 Голубой (Циан) | |
| MAGENTA | 0xFF00FF | 🟣 Пурпурный (Маджента) | |
| Теплые оттенки | ORANGE | 0xFF7F00 | 🟠 Оранжевый |
| GOLD | 0xFFD700 | ✨ Золотой | |
| CRIMSON | 0xDC143C | 🩸 Малиновый | |
| PINK | 0xFF69B4 | 🌸 Розовый | |
| BROWN | 0xA52A2A | 🟤 Коричневый | |
| MAROON | 0x800000 | 🍷 Бордовый | |
| Холодные оттенки | GREEN | 0x008000 | 🌿 Зеленый (Лесной) |
| OLIVE | 0x808000 | 🫒 Оливковый | |
| TEAL | 0x008080 | 🌊 Бирюзовый | |
| SKYBLUE | 0x87CEEB | ☁️ Небесно-голубой | |
| NAVY | 0x000080 | 🌃 Темно-синий | |
| INDIGO | 0x4B0082 | 🫐 Индиго | |
| PURPLE | 0x800080 | 🔮 Пурпурный/Лиловый | |
| VIOLET | 0xEE82EE | 💜 Фиалковый | |
| Оттенки серого | WHITE | 0xFFFFFF | ⚪ Белый |
| SILVER | 0xC0C0C0 | 🪙 Серебряный | |
| GRAY | 0x808080 | 🔘 Серый | |
| BLACK | 0x000000 | ⚫ Черный (Выключено) |