Давайте начнем с алгоритма работы нашей программы!

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).

 

Исходный код программы Скачать архив

Понравился проект? Не забудь поделиться им с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube и RUTUBE !

  • СПАСИБО ЗА ПРОСМОТР.
  • С уважением.
  • Электроника и Робототехника!