ELECTRONICS

Библиотека Adafruit NeoPixel

менеджер: Adafruit NeoPixelAdafruitверсия 1.15.5

Простая библиотека для лент 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(), а не на каждом кадре.

Где используется на сайте

Что дальше