【得捷电子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个函数,在循环里面去检测按键,进而改变输出,并显示在屏幕上。
-
-
- 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)
-
实验现象:上面代码与视频不同的是会在屏幕显示当前灯珠的颜色。由于在写这篇帖子的时候,不小心将屏幕的排线弄坏了,目前没办法显示出来。
播放器加载失败: 未检测到Flash Player,请到 安装
8e98cd0673e9de0473772cd287b7eb80
心得体会:感谢得捷举办这次活动,也是第一次参加。目前板子屏幕被按坏了,都快弄完了,发生这样的事挺糟心。建议以后参加的小伙伴,别像我一样 ,得注意力道。希望可以给一个好的结果吧。
|