【得捷电子Follow me第2期】任务3:控制WS2812B
[复制链接]
Adafruit ESP32-S3 TFT Feather开发板上集成了一颗WS2812B的RGB灯,可以很方便的点各种炫酷的灯,开启工程师的幸福人生。
同时,官网也有关于RGB的非常详细的操作教程,使用起来非常简单,只需要几行代码就能RGB灯亮出你需要的颜色。
1、首先导入库:
import neopixel
2、定义RGB的引脚同时指定led的亮度:
pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)
pixel.brightness = 0.3
3、显示需要显示的颜色:
pixel.fill((255, 0, 0))
time.sleep(0.5)
pixel.fill((0, 255, 0))
time.sleep(0.5)
pixel.fill((0, 0, 255))
time.sleep(0.5)
以上代码按顺序显示三种颜色,分别为红,绿,蓝,颜色之间间隔0.5s.
基于以上官方的代码,我们可以稍作扩展,实现如下功能:
1、利用板载按键控制RGB的显示,也就是使用按键控制RGB颜色的切换
2、使用板载TFT屏显示RGB对应的颜色,也就是RGB颜色和TFT屏同步显示同一种颜色
说明:开发板虽然板载有2个按键,但其中有一个是reset按键,无法当作用户按键使用,只有boot按键可以当作用户按键使用,本次就直接使用boot按键作为颜色切换的按键。
另外,屏幕的控制,其实在上一篇中已经能够控制了,所以本次将直接拿过来使用。
TFT颜色显示需要用到的库:
import displayio
from adafruit_display_shapes.rect import Rect
TFT颜色显示:
# Make the display context
splash = displayio.Group()
board.DISPLAY.show(splash)
rect = Rect(0, 0, 240, 135, fill=0xff0000)
splash.append(rect)
完整代码:
import board
import time
import neopixel
import digitalio
import displayio
from adafruit_display_shapes.rect import Rect
CONSTANT_COLOR_NUM = 4 #定义颜色个数
pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)
pixel.brightness = 0.3 #定义亮度
# 定义按钮
button = digitalio.DigitalInOut(board.BUTTON)
button.switch_to_input(pull=digitalio.Pull.UP)
# 定义按键键值和按键计数
button_value = 0
button_cnt = 0
# Make the display context
splash = displayio.Group()
board.DISPLAY.show(splash)
while True:
if button.value is True:
button_cnt += 1
else:
if button_cnt > 10:
button_value += 1
if button_value > CONSTANT_COLOR_NUM:
button_value = 0
button_cnt = 0
if button_value is 1:
pixel.fill((255, 0, 0)) # 红
rect = Rect(0, 0, 240, 135, fill=0xff0000)
splash.append(rect)
elif button_value is 2:
pixel.fill((0, 255, 0)) # 绿
rect = Rect(0, 0, 240, 135, fill=0x00ff00)
splash.append(rect)
elif button_value is 3:
pixel.fill((0, 0, 255)) # 蓝
rect = Rect(0, 0, 240, 135, fill=0x0000ff)
splash.append(rect)
elif button_value is 4:
pixel.fill((255, 255, 0)) # 黄
rect = Rect(0, 0, 240, 135, fill=0xffff00)
splash.append(rect)
else:
pixel.fill((255, 255, 255)) # 白
rect = Rect(0, 0, 240, 135, fill=0xffffff)
splash.append(rect)
time.sleep(0.03)
演示视频:
VID_20230906_212027
|