933|3

254

帖子

2

TA的资源

纯净的硅(初级)

楼主
 

【得捷电子Follow me第2期】任务3:控制WS2812B [复制链接]

  本帖最后由 walker2048 于 2023-10-2 13:44 编辑

CircuitPython点灯非常简单

adafruit_led_animation库是一个用于控制LED动态效果的库,它有以下优势:

  1. 易于使用:这个库旨在提供用户友好的接口,使开发人员能够轻松创建各种LED动态效果,而无需深入了解底层硬件细节。
  2. 跨平台兼容性:该库可以在多种CircuitPython支持的硬件平台上使用,包括微控制器和开发板。这种通用性使得可以在不同的项目和硬件上重用你的LED动画代码。
  3. 丰富的示例:Adafruit社区提供了大量的示例代码,展示了如何使用这个库来创建各种LED动画效果。这些示例可以作为学习和项目开发的起点。
  4. 灵活性:库支持多种LED控制方式,包括单色LED、RGB LED和Neopixel LED。这意味着你可以使用不同类型的LED灯条和矩阵来实现各种效果。
  5. 可定制性:你可以根据自己的需求轻松自定义LED动画效果,包括颜色、速度、亮度和模式等参数。

支持的动态效果

adafruit_led_animation库自带了以下的动态效果,大概介绍一下就是

  1. blink 闪烁
  2. chase(追逐) 实际上就是流水灯效果
  3. CustomColorChase 自定义流水灯
  4. Color 颜色渐变效果
  5. Comet 彗星效果
  6. MulticolorComet 多色彗星效果
  7. Rain 雨滴效果
  8. Pulse 脉动效果
  9. Rainbow 彩虹效果(彩虹流水灯、彩虹彗星、彩虹闪烁等拓展)
  10. Sparkle 闪烁效果(还有闪烁脉动拓展)
  11. Volume 音量效果

blink库实战

由于本次活动的开发板子上只有一个ws2812灯,作为入门学习,也没必要了解这么多的动效。所以本次也只学习如何使用blink库。 要使用库,就得先导入库。看一下代码:

  • # 导入board内置库
  • import board
  • # 导入time内置库
  • import time
  • # 从digitalio内置库导入DigitalInOut, Direction, Pull
  • from digitalio import DigitalInOut, Direction, Pull
  • # 导入neopixel内置库
  • import neopixel
  • # 从adafruit_led_animation.animation.blink库导入Blink
  • from adafruit_led_animation.animation.blink import Blink
  • # 从adafruit_led_animation.color库导入五种颜色定义
  • from adafruit_led_animation.color import JADE, BLACK, ORANGE, GOLD, OLD_LACE

这里有两种不同的导入方式,第一种就是import board, 意思是导入board模块,完整调用board这个模块,然后可以使用这个模块提供的所有功能。需要使用对应实例或者函数的时候,就得这样用,例如board.NEOPIXEL。 第二种from adafruit_led_animation.color import JADE, BLACK, ORANGE, GOLD, OLD_LACE,意思是从adafruit_led_animation.color模块里导入JADE, BLACK, ORANGE, GOLD, OLD_LACE这几个符号,其他的不导入,不导入的自然就不能使用了。 通过阅读adafruit_led_animation.color的源码,可以了解到,这几个符号都是不同颜色元组,也可以理解成led灯的颜色。 只导入部分内容,并不会节省内存或者提高执行效率,只是可以少打点字,让代码更清晰罢了。例如现在使用JADE颜色只需要打JADE就可以了。

库导入了,就接下来就应该初始化引脚和像素灯实例了

  • # 初始化像素灯引脚
  • pixel_pin = board.NEOPIXEL
  • # 设置像素灯数量,这样分开写方便以后修改代码,例如外接ws2812灯带或者矩阵
  • num_pixels = 1
  • # 初始化像素灯
  • pixels = neopixel.NeoPixel(
  • pixel_pin, num_pixels, brightness=0.2, auto_write=False, pixel_order=neopixel.GRB
  • )
  • # 初始化blink动态效果
  • blink = Blink(pixels, speed=0.5, color=BLACK)

由于这个板子是CircuitPython官方支持的板子,在固件里就固化了板载像素灯和屏幕实例。 我们的代码可以使用board.NEOPIXEL来给引脚赋值,由于板载只有1个像素灯,所以灯的数量也只设置成1。 初始化pixels,是使用了neopixel库的NeoPixel函数来初始化,亮度设置为20%。 NeoPixel函数的第一个参数pixel_pin是像素灯的数据引脚,第二个参数num_pixels是像素灯的数量,第三个参数brightness是像素灯的亮度,第四个参数auto_write是配置是否直接刷新数据,第五个 pixel_order是指定像素灯的RGB数据排列模式(目前是使用GRB模式)。 前面两个参数是必须的,位置也是固定的,后面三个参数使用了指定名称来传递,可以不用管(demo里抄过来的) 然后再给像素灯默认配置成黑色(不点亮)的状态。

接下来配置按键,代码如下

  • # 初始化btn按钮对象
  • btn = DigitalInOut(board.BOOT0)
  • # 设置btn引脚为输入
  • btn.direction = Direction.INPUT
  • # 设置btn引脚为上拉
  • btn.pull = Pull.UP

这里使用BOOT0作为按键输入按钮(RST是复位键,不可以当做常规按键使用),并配置IO为上拉模式。 BOOT0按钮按下时接地,IO为低电平,值是0。 最后就是主循环代码了

  • # 定义led_color变量,用于五种颜色切换
  • led_color = 0
  • # 进入while循环
  • while True:
  • # 判断按键是否按下
  • if not btn.value:
  • # 若按键按下,则对led_color求余数,根据余数指定led颜色
  • if led_color % 5 == 0:
  • blink = Blink(pixels, speed=0.5, color=JADE)
  • print("LED is JADE")
  • elif led_color % 5 == 1:
  • blink = Blink(pixels, speed=0.5, color=ORANGE)
  • print("LED is ORANGE")
  • elif led_color % 5 == 2:
  • blink = Blink(pixels, speed=0.5, color=GOLD)
  • print("LED is GOLD")
  • elif led_color % 5 == 3:
  • blink = Blink(pixels, speed=0.5, color=OLD_LACE)
  • print("LED is OLD_LACE")
  • elif led_color % 5 == 4:
  • blink = Blink(pixels, speed=0.5, color=BLACK)
  • print("LED is BLACK")
  • # led_color 增加1
  • led_color = led_color + 1
  • else:
  • # 按键未按下时啥也不干
  • pass
  • # 死睡0.2秒,这期间啥也不能干
  • time.sleep(0.2) # sleep for debounce
  • # 执行led闪烁动态效果
  • blink.animate()

这段代码里,先声明了一个led_color状态变量,并将该变量赋值为0。 在while True主循环里,我们每隔一段时间就判断BOOT0按键是否按下(btn.value等于0为按下),假如按下,则对led_color求余数,让led灯分别在绿色,橙色,金色,白色,黑色五个状态进行变化。 实际上就是使用了Blink(pixels, speed=0.5, color=OLD_LACE)这个函数,把blink重新初始化,让blink实例实现不同颜色的闪烁效果,第一个参数pixels是像素灯实例,第二个参数speed是闪烁的频率(0.5秒),第三个参数color是指定颜色。 blink实例初始化完毕并不会马上开始闪烁,直到用户调用了blink.animate()函数,才开始闪烁。

这个代码是不是非常简单呢?只要跟着学一下就懂了。留一个小作业,大家可以试试,将第二次按下按键时的灯效修改成红色,并且闪烁得更慢一些,例如3秒闪烁一次。可以在评论区置顶找到文章代码和color库源码来查找红色的颜色定义。

感谢大家的观看,下一期预告,控制屏幕显示图片、以及中文内容

最新回复

可以自定义LED动画效果,包括颜色、速度、亮度和模式,还是挺强大的   详情 回复 发表于 2023-10-5 10:04
点赞(1) 关注(1)
 
 

回复
举报

1717

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 

可以自定义LED动画效果,包括颜色、速度、亮度和模式,还是挺强大的

 
 
 

回复

254

帖子

2

TA的资源

纯净的硅(初级)

板凳
 
资源文件_直接解压缩到CIRCUITPY磁盘即可.zip (154.98 KB, 下载次数: 30)

将资源文件解压缩至U盘根目录即可,code.py代码需要自己写哦
 
 
 

回复

254

帖子

2

TA的资源

纯净的硅(初级)

4
 
  • # 导入board内置库
  • import board
  • # 导入time内置库
  • import time
  • # 从digitalio内置库导入DigitalInOut, Direction, Pull
  • from digitalio import DigitalInOut, Direction, Pull
  • # 导入neopixel外置库
  • import neopixel
  • # 从adafruit_led_animation.animation.blink库导入Blink
  • from adafruit_led_animation.animation.blink import Blink
  • # 从adafruit_led_animation.color库导入五种颜色定义
  • from adafruit_led_animation.color import JADE, BLACK, ORANGE, GOLD, OLD_LACE

前面做视频的时候比较赶,neopixel是外置库,不是内置库

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
艾睿电子& Silicon Labs 有奖直播 | 全新蓝牙信道探测:从技术创新到实际应用
直播时间:3月12日(周三)上午10:00
直播奖励:多功能榨汁机、蓝牙音箱、手机支架

查看 »

 
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
快速回复 返回顶部 返回列表