Давайте начнем с алгоритма работы нашей программы!
1. Подключим адресную светодиодную ленту WS2812 к микроконтроллеру ESP32.
2. Настроим порт D4 для управления лентой.
3. В программе укажем количество светодиодов в ленте.
4. Создадим несколько функций, которые будут отвечать за различные световые эффекты.
5. В бесконечном цикле будем последовательно включать световые эффекты.
Теперь можно приступать к написанию программы и сборке электрической схемы!
У нас есть схема, на которой изображены блок питания, микроконтроллер, а также контакты gnd и D4. К этим контактам подключена адресная светодиодная лента WS2812.
Ниже представлены распиновка и технические характеристики WS2812B.
Размер - 5х5 мм
Напряжение питания - 5В
Частота ШИМ - 400Гц
Потребление при максимальной яркости - 60 мА на светодиод
Цветность: RGB, 256 оттенков на канал, 16 миллионов цветов
Размер данных - 24 бита на светодиод
Скорость передачи данных - 800 кГц
Распиновка адресной ленты:
VCC – питание 5В.
GND – общий провод (земля).
DI – вход данных от микроконтроллера.
DO – выход данных на следующий модуль или светодиод.
Практически к каждому материалу есть видеоролик на YouTube и RUTUBE каналах, теорию можно прочитать в статье, а как работает устройство в железе, посмотреть в видеоролике!
Адресная светодиодная лента подключена к порту D4 через токоограничивающий резистор R1 с номиналом 1 кОм и блоку питания 5В, настроим в программе ножку порта D4 для работы с лентой PIN = 4, укажем количество подключенных светодиодов NUM_LEDS = 50, инициализируем NeoPixel np = neopixel.NeoPixel(machine.Pin(PIN), NUM_LEDS), выписываем цвета
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
YELLOW = (255, 255, 0)
CYAN = (0, 255, 255)
MAGENTA = (255, 0, 255)
Создаем функцию управления цветом и задаем всем светодиодам один цвет.
def set_all(color):
for i in range(NUM_LEDS):
np[i] = color
np.write()
Создаем функцию, которая будет отключать все светодиоды.
def clear():
set_all(BLACK)
С настройкой закончили, далее чтобы наша программа работала добавим в нее модуль import machine, который содержит необходимые функции, для работы платы, модуль который служит нам для формирования задержек from time, import neopixel драйвер для светодиодов Ws2812 и import urandom для генерации случайных чисел.
Затем в программе мы создадим несколько функций для световых эффектов.
Эффект "догонялки" с заданным цветом:
def theater_chase(color, wait):
for j in range(10):
for q in range(3):
for i in range(0, NUM_LEDS, 3):
if i + q < NUM_LEDS:
np[i+q] = color
np.write()
time.sleep_ms(wait)
for i in range(0, NUM_LEDS, 3):
if i + q < NUM_LEDS:
np[i+q] = BLACK
Заполняем светодиоды один за другим заданным цветом:
def color_wipe(color, wait):
for i in range(NUM_LEDS):
np[i] = color
np.write()
time.sleep_ms(wait)
Мигаем всеми светодиодами заданным цветом (в данной программе используется жёлтый цвет) определённое количество раз:
def blink(color, wait, num_blinks):
for _ in range(num_blinks):
set_all(color)
time.sleep_ms(wait)
clear()
time.sleep_ms(wait)
Заполняем светодиоды один за другим случайными цветами:
def random_color_wipe(wait):
for i in range(NUM_LEDS):
np[i] = (urandom.getrandbits(8), urandom.getrandbits(8), urandom.getrandbits(8))
np.write()
time.sleep_ms(wait)
В бесконечном цикле while True мы будем последовательно включать световые эффекты.
Заполняем красным color_wipe(RED, 50), заполняем зеленым color_wipe(GREEN, 50), заполняем синим color_wipe(BLUE, 50), догонялка красным theater_chase(RED, 50), догонялка зеленым theater_chase(GREEN, 50), догонялка синим theater_chase(BLUE, 50), мигаем желтым 3 раза blink(YELLOW, 200, 3), заполнение случайными цветами random_color_wipe(50).