Библиотека Adafruit NeoPixel
Простая библиотека для лент WS2812B и SK6812: задать цвет пикселя, показать. Меньше возможностей, чем у FastLED, зато меньше памяти.
NeoPixel — торговое имя Adafruit для WS2812B, и библиотека под него самая простая из существующих: цвет каждого пикселя задаётся вызовом, потом show(). Никаких палитр и эффектов, зато понятно с первого взгляда и умеет RGBW-ленты SK6812 с белым кристаллом.
Если нужны эффекты, плавные переходы и ограничение мощности — берите FastLED. Если нужно зажечь десять светодиодов по кнопке — NeoPixel.
Установка и подключение
В менеджере библиотек ищите Adafruit NeoPixel автора Adafruit. Если менеджер предложит поставить зависимости — соглашайтесь. Как открыть менеджер и что делать, если библиотека не находится, — в общей статье про библиотеки.
#include <Adafruit_NeoPixel.h>Создание объекта — обычно до setup():
Adafruit_NeoPixel strip(30, 6, NEO_GRB + NEO_KHZ800); // пикселей, вывод, тип
strip.begin(); // в setup()Методы
Только то, что нужно в обычном скетче. Сигнатуры сверены с версией 1.15.5.
begin()- Настроить вывод. Обязательно в setup().
show()- Отправить цвета в ленту.
setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b)- Цвет пикселя n по компонентам. Для RGBW есть четвёртый параметр w.
setPixelColor(uint16_t n, uint32_t color)- Цвет одним числом, полученным из Color().
Color(uint8_t r, uint8_t g, uint8_t b)- Упаковать компоненты в 32-битный цвет.
ColorHSV(uint16_t hue, uint8_t sat, uint8_t val)- Цвет из оттенка 0–65535, насыщенности и яркости.
fill(uint32_t color, uint16_t first, uint16_t count)- Залить участок одним цветом; без аргументов — всё чёрным.
clear()- Все пиксели чёрные в буфере (show() всё равно нужен).
setBrightness(uint8_t b)- Общая яркость 0–255. Меняет сами данные в буфере — с потерями, не для плавных переходов.
numPixels()- Сколько пикселей задано в конструкторе.
rainbow(uint16_t firstHue)- Заполнить радугой, начиная с оттенка.
gamma32(uint32_t color)- Гамма-коррекция: цвета выглядят естественнее.
Пример
#include <Adafruit_NeoPixel.h>
#define PIN 6
#define COUNT 8
Adafruit_NeoPixel strip(COUNT, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
strip.begin();
strip.setBrightness(50);
strip.show(); // всё погасить на старте
}
void loop() {
for (int i = 0; i < COUNT; i++) {
strip.clear();
strip.setPixelColor(i, strip.Color(0, 120, 255));
strip.show();
delay(80);
}
}Тип NEO_GRB + NEO_KHZ800 подходит почти всем лентам WS2812B. Для SK6812 RGBW — NEO_GRBW.
На чём попадаются
Ничего не горит
Забыли begin() или show(). Второе — самая частая: setPixelColor() только меняет буфер.
Цвета не те
Порядок в третьем параметре конструктора: NEO_GRB, NEO_RGB, NEO_BRG. Подбирается опытным путём.
setBrightness портит цвета
Она необратимо ужимает значения в буфере. Ставьте один раз в setup(), а не на каждом кадре.