378|0

8

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

【得捷电子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)

 

实验现象:上面代码与视频不同的是会在屏幕显示当前灯珠的颜色。由于在写这篇帖子的时候,不小心将屏幕的排线弄坏了,目前没办法显示出来。

播放器加载失败: 未检测到Flash Player,请到安装
8e98cd0673e9de0473772cd287b7eb80

 

心得体会:感谢得捷举办这次活动,也是第一次参加。目前板子屏幕被按坏了,都快弄完了,发生这样的事挺糟心。建议以后参加的小伙伴,别像我一样,得注意力道。希望可以给一个好的结果吧。

 

 

点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
立即报名 | 2025 瑞萨电子工业以太网技术日即将开启!
3月-4月 深圳、广州、北京、苏州、西安、上海 走进全国6城
2025瑞萨电子工业以太网技术巡回沙龙聚焦工业4.0核心需求,为工程师与企业决策者提供实时通信技术最佳解决方案。
预报从速,好礼等您拿~

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表