
Въведение
В тази статия ще разгледаме код, написан на MicroPython, който управлява NeoPixel светодиод с помощта на микроконтролер ESP32. NeoPixel е популярен тип RGB светодиод, който може да показва милиони цветове и се управлява чрез цифров сигнал. Кодът, който ще анализираме, демонстрира как да контролирате цвета и яркостта на един NeoPixel светодиод, като използвате ESP32.
Този код може да се използва в различни проекти, като например светлинни ефекти, индикатори за състояние или дори като основа за по-сложни светлинни системи. Може да бъде разширен чрез добавяне на повече светодиоди, имплементиране на различни светлинни модели или интегриране с други сензори и устройства.
В тази стаитя ще използваме един миниатюрен варянт на ESP32 а именно ESP32-C3 Pico. Въпреки, че е малък на размер той има NeoPixel лед диод на неговия борд. Той е свързан към пин 2 на тази платформа. Може да се запознаете с нейната архитектура в статитята ни с ревю за него: ESP32-C3 PICO OLED 0.42″. Там ще намерите всичо за нея както и нейната пин диаграма.
Код за управление на NeoPixel светодиод с ESP32-C3 Pico и MicroPython
# Импортиране на необходимите библиотеки
import neopixel # Библиотека за управление на NeoPixel светодиоди
from machine import Pin # Библиотека за управление на пиновете на ESP32
from time import sleep # Библиотека за добавяне на забавяния (паузи)
import random # Библиотека за генериране на случайни числа
# Дефиниране на пина, към който е свързан NeoPixel светодиода
pixel = 2 # Пин 2 на ESP32-C3 Pico
# Инициализация на NeoPixel светодиода
# NeoPixel(Pin(pixel), 1) означава, че използваме 1 светодиод, свързан към пин 2
led = neopixel.NeoPixel(Pin(pixel), 1)
# Задаване на яркостта на светодиода (0.3 = 30% от максималната яркост)
britness = 0.3
# Показване на различни цветове върху светодиода
led[0] = (255, 0, 0) # Червен цвят
led.write() # Прилагане на цвета
sleep(0.5) # Забавяне от 0.5 секунди
led[0] = (0, 255, 0) # Зелен цвят
led.write()
sleep(0.5)
led[0] = (0, 0, 255) # Син цвят
led.write()
sleep(0.5)
led[0] = (255, 255, 0) # Жълт цвят
led.write()
sleep(0.5)
led[0] = (0, 255, 255) # Циан цвят
led.write()
sleep(0.5)
led[0] = (255, 0, 255) # Маджента цвят
led.write()
sleep(0.5)
led[0] = (255, 255, 255) # Бял цвят
led.write()
sleep(0.5)
led[0] = (0, 0, 0) # Изключване на светодиода (черен цвят)
led.write()
sleep(0.5)
# Безкраен цикъл за генериране на случайни цветове
while True:
# Генериране на случайни стойности за червения, зеления и синия канал
red= random.randrange(0, 255)
green = random.randrange(0, 255)
blue = random.randrange(0, 255)
# Извеждане на генерираните стойности в конзолата
print("red=", red, "green=", green, "blue=", blue)
# Намаляване на яркостта на цветовете
red = int(red * britness)
green = int(green * britness)
blue = int(blue * britness)
# Задаване на новия цвят на светодиода
led[0] = (red , green , blue)
led.write() # Прилагане на цвета
sleep(0.5) # Забавяне от 0.5 секунди
Кратко видео от проекта
Обяснение на кода за контрол на NeoPixel светодиод с ESP32-C3 Pico и MicroPython
Импортиране на библиотеки
- neopixel: Тази библиотека се използва за управление на NeoPixel светодиодите. Тя предоставя методи за задаване на цветове и управление на яркостта.
- machine.Pin: Това е библиотека за управление на входно-изходните пинове на микроконтролера ESP32-C3 Pico. Тя ни позволява да дефинираме кой пин ще управлява светодиода.
- time.sleep: Тази функция се използва за добавяне на забавяния (паузи) в изпълнението на програмата.
- random: Библиотеката за генериране на случайни числа се използва за създаване на случайни цветове.
Инициализация на NeoPixel
- pixel = 2: Тук дефинираме пин 2 на ESP32-C3 Pico, към който е свързан светодиодът.
- led = neopixel.NeoPixel(Pin(pixel), 1): Инициализираме NeoPixel светодиода. Вторият аргумент (
1
) указва, че използваме само един светодиод.
Задаване на яркостта
- britness = 0.3: Това е коефициентът на яркост. Стойността
0.3
означава, че светодиодът ще свети с 30% от максималната си яркост.
Показване на цветове
- led[0] = (255, 0, 0): Задаваме червен цвят на светодиода. Тройката числа представлява стойностите за червения, зеления и синия канал (RGB).
- led.write(): Този метод прилага зададения цвят към светодиода.
- sleep(0.5): Добавяме забавяне от 0.5 секунди, за да може да се види цветът преди преминаването към следващия.
Безкраен цикъл за случайни цветове
- while True: Този цикъл се изпълнява безкрайно, като генерира случайни цветове.
- random.randrange(0, 255): Генерира случайна стойност между 0 и 255 за всеки цветов канал.
- red= int(red * britness): Намалява яркостта на цвета, като умножава стойността по коефициента
britness
. - led[0] = (red, green, blue): Задава новия цвят на светодиода.
- led.write(): Прилага цвета.
- sleep(0.5): Добавя забавяне от 0.5 секунди преди генерирането на следващия цвят.
Заключение
Този код демонстрира как да управлявате NeoPixel светодиод с помощта на MicroPython и ESP32-C3 Pico. Той е отличен старт за проекти, свързани със светлинни ефекти, и може лесно да бъде разширен за управление на множество светодиоди или за интегриране с други компоненти. С добавянето на сензори или бутони, можете да създадете интерактивни светлинни системи, които реагират на външни стимули. NeoPixel светодиодите са мощен инструмент за креативни проекти, а ESP32 предоставя необходимата изчислителна мощ и гъвкавост за тяхното управление.
Използвани источници: MicroPython – Controlling NeoPixels