637|3

539

帖子

3

TA的资源

纯净的硅(初级)

楼主
 

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

 

Adafruit ESP32-S3 TFT Feather开发板上集成了一颗WS2812B的RGB灯,可以很方便的点各种炫酷的灯,开启工程师的幸福人生。

adafruit_products_FS3TFT_NeoPixel_highlighted_green.jpg

同时,官网也有关于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

 

最新回复

应该是这样的,我特意查了一下WS2812的手册,一个芯片输出一组控制信号控制一个灯     详情 回复 发表于 2023-9-8 18:23
点赞 关注
 
 

回复
举报

1463

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 
做一个RGB灯条的话是不是每颗RGB灯都要配一颗WS2812B芯片来控制?
 
 
 

回复

539

帖子

3

TA的资源

纯净的硅(初级)

板凳
 
lkh747566933 发表于 2023-9-7 13:38 做一个RGB灯条的话是不是每颗RGB灯都要配一颗WS2812B芯片来控制?

我觉得是的


 
 
 

回复

1463

帖子

0

TA的资源

五彩晶圆(初级)

4
 

应该是这样的,我特意查了一下WS2812的手册,一个芯片输出一组控制信号控制一个灯

 

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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