WS2812 (WS2812B) - это микросхема с 3-ех канальным шим контроллером. Имеет встроенные диоды трех цветов - RGB. Прелесть этой микросхемы в том, что она может быть подключена цепочкой из 1024 таких микросхем, а управляться будут все одним проводом. Светодиодная лента из таких микросхем идеально подходит для Имбилайт подсветки телевизора, цветомузыки, для сборки цветного дисплея низкого разрешения и пр.

Наибольшую популярность на рынке получили диоды в корпусе SMD5050. WS2812 и WS2812B между собой отличаются только количеством ног. На первой - шесть, на второй четыре. Функционально абсолютено идентичны.

У микросхемы WS2812B есть вход и выход управляющего сигнала. На вход подается управляющий Шим сигнал 400/800 КГц. Сигнал кодирует биты информации о порядковом номере и цвете. Длинный нуливой уровень длительностью 50 мкс означает старт новой последовательности.
Первая микросхема в сборе считывает и отрезает первые 24 бита информации, зажигает диоды. Остальные биты передает на выход - вход следующей микросхемы. Лента из таких микросхем (светодиодов) 30 раз в секунду принимает новое значение для индикации.

Область применения таких диодов гораздо шире, чем может показаться. В интернет магазинах встречаются различные гирлянды, светодиодные ленты, матричные дисплеи, различные корпусные устройства. Это не удивительно, учитывая на сколько сильно упращяется схема подключения таких диодов.


Для использования WS2812B в своих проектах есть чудесная библиотека Adafruit_NeoPixel. Она генерирует шим сигнал нужной последовательностью и избавляет вас от необходимости изучать протокол. Достаточно подключить ее и заполнить несколько конфигов.
#include <Adafruit_NeoPixel.h> #define PIN 6 // номер порта к которому подключен модуль #define count_led 24 // количество светодиодов Adafruit_NeoPixel pixels = Adafruit_NeoPixel(count_led, PIN, NEO_GRB + NEO_KHZ800); void setup() { pixels.begin(); pixels.show(); // Устанавливаем все светодиоды в состояние "Выключено" } void loop() { pixels.setPixelColor(1, pixels.Color(0,150,0)); // Назначаем для первого светодиода цвет "Зеленый" pixels.setPixelColor(2, pixels.Color(250,150,0)); // Назначаем для первого светодиода цвет "Зеленый" pixels.setPixelColor(3, pixels.Color(0,0,250)); // Назначаем для первого светодиода цвет "Синий" pixels.show(); }
