【得捷电子Follow me第2期】分任务2:WS2812B效果控制
[复制链接]
任务要求:完成一个Neopixel(12灯珠或以上)控制器,通过按键和屏幕切换展示效果
正好有一个以 前购买的灯珠,以前刚学习 的时候,没弄出来,借此机会利用Circuitpython很轻松的驱动成功了。记录一下。
由于circuitpython 中有专门的类库来驱动这个WS2812B。所以直接拿来用,不用重复造轮子。我利用板载的按键去切换外接的16颗灯珠
硬件连接上,ESP32-S3的12管脚接数据输入DI,我这个灯珠是5V,所以直接接的是USB管脚,还有一个管脚接地就行。
相比于控制板载WS2812B,多了显示屏幕,驱动按键,利用按键去控制灯颜色的切换。
首先加载需要用到的库
import board
import digitalio
import time
import displayio
import neopixel
from adafruit_display_text import label
from adafruit_bitmap_font import bitmap_font
初始化屏幕的参数,这些以前都有弄过,比较简单
pixel = neopixel.NeoPixel(board.D12, 16)
pixel.brightness = 0.2
button = digitalio.DigitalInOut(board.BUTTON)
button.direction = digitalio.Direction.INPUT
button.pull = digitalio.Pull.UP
but_in=3
display = board.DISPLAY
board.DISPLAY.brightness = 0.5 #亮度
board.DISPLAY.rotation = 0 #旋转角度
font_file = "lib/wenquanyi_10pt.pcf"
font = bitmap_font.load_font(font_file)
下面我构建了2个函数,在循环里面去检测按键,进而改变输出,并显示在屏幕上。
# 按键控制LED
def colbutton():
global but_in
if(not button.value):
but_in=but_in+1
if (but_in>3):
but_in=0
def dispinfo(str):
if(str=="RED"):
color = 0xFF0000
text_area = label.Label(font, text="RED", color=color)
text_area.x = 50
text_area.y = 30
display.show(text_area)
pixel.fill(color)
elif(str=="GREEN"):
color = 0x00FF00
text_area = label.Label(font, text="GREEN", color=color)
text_area.x = 50
text_area.y = 30
pixel.fill(color)
elif(str=="BLUE"):
color = 0x0000FF
text_area = label.Label(font, text="BLUE", color=color)
text_area.x = 50
text_area.y = 30
pixel.fill(color)
else :
color = 0xFFFFFF
text_area = label.Label(font, text="WHITE", color=color)
text_area.x = 50
text_area.y = 30
pixel.fill(color)
display.show(text_area)
while True:
colbutton()
if(but_in==0):
dispinfo("RED")
elif(but_in==1):
dispinfo("BLUE")
elif(but_in==2):
dispinfo("GREEN")
else:
dispinfo("WHITE")
time.sleep(0.5)
实验现象:上面代码与视频不同的是会在屏幕显示当前灯珠的颜色。由于在写这篇帖子的时候,不小心将屏幕的排线弄坏了,目前没办法显示出来。
8e98cd0673e9de0473772cd287b7eb80
心得体会:感谢得捷举办这次活动,也是第一次参加。目前板子屏幕被按坏了,都快弄完了,发生这样的事挺糟心。建议以后参加的小伙伴,别像我一样 ,得注意力道。希望可以给一个好的结果吧。
|