Необходимые компоненты для проекта
Для успешной реализации проекта по подключению светодиодной ленты или панели WS2812B вам понадобятся следующие компоненты:
- светодиодная панель или лента со светодиодами WS2812B;
- отладочная плата с микросхемой FT2232H;
- персональный компьютер или ноутбук.
Описание RGB светодиодов WS2812 и WS2812B
Светодиод WS2812 (или его модификация WS2812B, которая и будет использована в данной статье) представляет собой RGB светодиод. То есть в одном корпусе представлены сразу три светодиода разных цветов: красный, зелёный и синий.

Светодиод WS2812 имеет 6 выводов, в то время как WS2812B – лишь 4.
Номер вывода | Название | Назначение вывода |
---|---|---|
1 | Dout | Выход управляющего сигнала |
2 | Din | Вход управляющего сигнала |
3 | VCC | Питание управляющей цепи, 6…7 В |
4 | NC | Не подключен |
5 | VDD | Питание светодиода, 6…7 В |
6 | Gnd | Земля |
А вот назначение выводов светодиода WS2812B:

Номер вывода | Название | Назначение вывода |
---|---|---|
1 | VDD | Питание светодиода, 3,5…5,3 В |
2 | Dout | Выход управляющего сигнала |
3 | Gnd | Земля |
4 | Din | Вход управляющего сигнала |
Главное преимущество данных светодиодов в том, что они могут соединяться в цепочку последовательно друг за другом, их можно соединять в ленты или собирать из них панели. При этом управление осуществляется всего по одному проводу. Это возможно благодаря тому, что каждый светодиод содержит в своём составе контроллер, который и управляет цветом и яркостью трёх каналов RGB. Из-за того, что управлять можно отдельно каждым светодиодом WS2812 в цепочке, такие светодиоды называются «адресные». На сегодняшний день это самые «продвинутые» светодиоды для организации больших массивов светодиодов.
Принципы работы и последовательность подключения светодиодов WS2812
Для примера на схеме показано последовательное подключение трёх светодиодов. На вход DIN первого светодиода подаётся управляющий сигнал. Светодиод обрабатывает его и передаёт далее со своего выхода DOUT на вход следующего в цепочке светодиода. И так сигнал проходит по всей цепочке светодиодов, каждый из которых считывает свою управляющую последовательность и изменяет свой цвет и интенсивность в соответствии с пришедшей командой.

На фотографии представлена панель размером 10 на 10 светодиодов, с которой мы и будем экспериментировать. Как видно, на нижней части панели светодиоды соединены в единую цепочку.
![]() |
![]() |
Обратите внимание, что светодиодная панель весьма «прожорлива». На иллюстрации ниже это можно видеть по показаниям встроенного датчика тока источника питания: панель из ста светодиодов WS2812B потребляет ток более 3 ампер. Правда, почти все светодиоды в данном случае включены на максимальную яркость белым цветом (самый энергозатратный режим, т.к. для обеспечения белого свечения используются все три канала RGB на максимальной яркости).

Приблизительное потребление вашего устройства можно оценить следующим образом. Один канал светодиода на максимальной яркости потребляет около 20 мА. В одном корпусе располагаются 3 светодиода. Следовательно, один RGB светодиод в максимуме потребляет до 60 мА тока. Умножив это число на количество светодиодов в вашей матрице или ленте, вы получите максимально возможное потребление, и ваш источник питания должен иметь возможность выдать такой ток.
Управление светодиодами WS2812B (или WS2812)
Если просто подать на светодиодную ленту напряжение, ничего не произойдёт. Светодиоды ждут определённый сигнал, который будет ими управлять. Для управления используется последовательный однопроводный интерфейс. Биты «0» и «1» кодируются импульсами различной длины.

На диаграмме обозначены:
- T0H – время выдержки высокого уровня при передаче кода логического нуля;
- T0L – время выдержки низкого уровня при передаче кода логического нуля;
- T1H – время выдержки высокого уровня при передаче кода логической единицы;
- T1L – время выдержки низкого уровня при передаче кода логической единицы;
- Treset – время сигнала оповещения об окончании управляющей последовательности.
Причём временные допуски заданы весьма жёстко. Так, для WS2812B время T0H = T1L и составляет 0,35 мкс, а время T1H = T0L и составляет 0,9 мкс. Для светодиода WS2812 временные параметры более изощрённые: T0H = 0,35 мкс, T1H = 0,7 мкс, T0L = 0,8 мкс, T1L = 0,6 мкс. Но длительность передачи одного бита и там, и там составляет 1,25 мкс.
Формирование управляющего сигнала для светодиодов
Для указания цвета светодиода используется 24-битная схема RGB: под каждый из трёх каналов отводится по 8 бит. И расположены цвета в следующем порядке:

То есть для того чтобы выставить желаемый цвет на первом светодиоде в цепочке, необходимо сформировать 24-битный код и подать его на вход DIN цепочки. Если мы хотим выставить цвет на двух светодиодах, необходимо сформировать уже 48-битный сигнал и так же подать его на вход DIN цепочки. И так далее. Чем больше светодиодов в цепочке, тем более длинную последовательность мы должны подать на её вход. Получив управляющий сигнал, контроллер светодиода берёт из неё первые 24 бита и выставляет тот цвет, который указан в этих 24 битах. Затем он отбрасывает эти 24 бита, а оставшуюся часть последовательности передаёт дальше. Там ситуация повторяется. Когда вся последовательность обработана или когда приходит сигнал сброса Reset, светодиоды запоминают состояние и не меняют его, пока не придёт новый управляющий сигнал.
Формат BMP и его использование для запроса цвета
Осталось дело за малым: передать цепочке светодиодов WS2812B осмысленную управляющую последовательность. На этот счёт есть такая идея. По сути нам необходимо передавать 24-битные значения цвета в соответствии с положением светодиода в матрице 10 на 10. Аналогичным образом данные хранятся в графических файлах формата *.BMP. В начале файла также присутствует заголовок, который содержит дополнительную информацию о размере изображения, количестве бит на пиксель, и сжатии и т.д.

Можно в любом графическом редакторе нарисовать изображение размером 10 на 10 пикселей (или того, какой размерности у вас светодиодная панель), сохранить его в 24-битном формате, а затем взять массив байтов из раздела Image Data Pixel Array с данной схемы, и таким образом мы получим управляющий массив для загрузки светодиодной панели.
Обратите внимание, что в массиве данных о точках изображения BMP содержатся заполнители (Padding), которые дополняют строку байтов до числа, кратного 4. Т.е., например, в нашем случае строка содержит 10 пикселей по 24 бита на цвет (3 байта). Соответственно, строка будет содержать 3×10=30 байтов. Но 30 не кратно 4. Ближайшее число, кратное 4, это 32. Соответственно, в файле BMP будет на каждую строку изображения на 2 байта заполнителя больше. Байты-заполнители нужно пропускать и не включать в управляющий массив.
Ах, да, чуть не забыл. В файле изображения BMP данные о цвете хранятся в формате R-G-B, а светодиод WS2812 принимает цвет в формате G-R-B. Необходимо поменять местами цвета, иначе все изображения будут совсем не тех цветов, которые мы ожидаем.
+ There are no comments
Add yours