ESP32 и MicroPython генериране на случайни цветове с NeoPixel WS2812

ESP32 и MicroPython генериране на случайни цветове с NeoPixel WS2812

Въведение

В тази статия ще ви покажем как да използвате ESP32 и MicroPython за създаване на цветни анимации върху NeoPixel (WS2812) осем сегментен LED бар. Ще създадем скрипт, който произволно променя цветовете на LED диодите с регулируема яркост. Това е отличен начален проект за всички, които искат да експериментират с RGB светлини и MicroPython.

Проектът е изключително подходящ за декоративно осветление, светлинни ефекти при събития или просто като демонстрация на възможностите на NeoPixel и ESP32.


Схематично решение

Необходими компоненти:

  • ESP32 Development Board. За целата на този проект ще използваме: ESP32-C3 PICO OLED 0.42″
  • NeoPixel лента (WS2812) с 8 RGB светодиода
  • Захранване 5V (или 3.3V, в зависимост от лентата)
  • Резистор 330Ω (по избор, за сигурност на сигнала)
  • Кондензатор 1000µF (по избор, за стабилизиране на захранването)
  • Свързващи проводници

Схема на свързване:

  • DIN на NeoPixel → GPIO 1 на ESP32
  • VCC на NeoPixel → 5V на ESP32
  • GND на NeoPixel → GND на ESP32

Забележка: Уверете се, че използвате външно захранване при повече от 8 светодиода.


Код на проекта

import neopixel
from machine import Pin
from time import sleep
import random

pixelPin = 1 # Инициализация на пин който ще иползваме за управление на LED GPIO1

led = neopixel.NeoPixel(Pin(pixelPin), 8)  # осем LED диоди

# Дефинирайте коефициент на яркост (brightness) между 0 и 1
brightness = 0.1  # Можете да промените тази стойност според вашите предпочитания

while True:
    Red = random.randrange(0, 255)    # генерира случайна яркост на Червения цвят
    Green = random.randrange(0, 255)  # генерира случайна яркост на Зеления цвят
    Blue = random.randrange(0, 255)   # генерира случайна яркост на Синия цвят
    leds = random.randrange(0, 8)     # Избира произволен пиксел о 0 до 8
    
    # Приложете яркостта към цветовете
    val = int(Red * brightness)
    val2 = int(Green * brightness)
    val3 = int(Blue * brightness)
    
    print(val, val2, val3)
                
    led[leds] = (val, val2, val3)

    led.write()
    sleep(0.1)

Обяснение на кода

Инициализация на библиотеките и NeoPixel

Зареждаме нужните библиотеки за работа с NeoPixel, GPIO, време (time) и (random) за генериране на случайни числа. Основите на библиотеката neopixel са описани в офицялния сайт на MicroPython.

import neopixel
from machine import Pin
from time import sleep
import random

Задаваме пин GPIO 1 като управляващ за NeoPixel лентата с 8 светодиода.

pixelPin = 1 # GPIO1 
led = neopixel.NeoPixel(Pin(pixelPin), 8)  # осем LED диода

Яркост на светене

# Дефинирайте коефициент на яркост (brightness) между 0 и 1
brightness = 0.1  # Можете да промените тази стойност според вашите предпочитания

Задаваме коефициент на яркост. Стойностите на RGB ще бъдат умножени по него, за да се намали интензитетът на светене. Този коефицент може да варира мецду 0 и 1.


Основен цикъл с произволни цветове

Избираме произволни стойности за червен, зелен и син канал, както и произволен LED от лентата.

while True:
    Red = random.randrange(0, 255)    # генерира случайна яркост на Червения цвят
    Green = random.randrange(0, 255)  # генерира случайна яркост на Зеления цвят
    Blue = random.randrange(0, 255)   # генерира случайна яркост на Синия цвят
    leds = random.randrange(0, 8)     # Избира произволен пиксел о 0 до 8

Умножаваме стойностите по яркостта, за да регулираме яркостта на лед диодите.

    val = int(val * brightness)
    val2 = int(val2 * brightness)
    val3 = int(val3 * brightness)

Отпечатваме стойностите в терминала.

print(val, val2, val3)

Присвояваме генерирания цвят на избрания светодиод и изчакваме 0.1 секунди преди следващата итерация.

    led[leds] = (val, val2, val3)
    led.write()
    sleep(0.1)

Видеодемонстрация на ESP32 и MicroPython генериране на случайни цветове с NeoPixel WS2812

Какво може да добавите

  • Циклично преминаване през всички светодиоди
  • Плавна смяна на цветове с fade ефект
  • Управление по MQTT или Wi-Fi
  • Възможност за управление чрез бутон или сензор

В следващите статии на тази тема ще добаяим и някои от функционалностите изброени по-горе, както и ще направим проект с който чрез пляскане на ръце ще задействаме “бягаща светлина” на 5 метрова лед лента.


Заключение

Проектът демонстрира лесна и ефективна употреба на ESP32 и MicroPython за контрол на WS2812 (NeoPixel) LED диоди. С няколко реда код можем да създадем красиви и динамични светлинни ефекти. Това е чудесна основа за по-сложни проекти като смарт осветление, уведомителни светлини и анимации.

Translate »