Lily李 发表于 2025-9-29 21:03

FireBeetle 2 ESP32 P4 开发板的WS2812彩色灯带驱动控制

本帖最后由 Lily李 于 2025-9-29 21:08 编辑

申请原创
@21小跑堂


WS2812是一种将控制电路和RGB发光器件集成在一起的组件,其主要特点是采用单总线控制结构,仅需一根信号线就可将多个器件串联起来加以控制,其电路形式如图1所示。
图1 电路形式

WS2812的工作电压为3.5-5.3V ,其功耗约为0.3W。在每个WS2812中,内置了信号整形电路,因而其信号质量不会因传输距离的增加而出现衰减。
每个WS2812是独立编程的,可实现全彩显示。
由于其采用单总线工作方式,其采用的数据协议为单线归零码通讯,数据传输速率为800Kbps。其数据输入电压为:高电平≥0.7VDD,低电平≤0.3VDD,刷新频率≥400Hz。

WS2812B采用特殊的时序协议控制:
每个WS2812具有24位数据,即8位绿色,8位红色,8位蓝色,数据采用NRZ编码(非归零编码),其各位数据的排列顺序见图2所示。
图2 数据排列顺序

0码:高电平0.4µs + 低电平0.85µs1码:高电平0.8µs + 低电平0.45µs

图3 编码与信号时长占比

复位信号为低电平持续50µs以上 ,见图4所示。

图4 信号波形关系

图5 器件间信号传递关系

每个WS2812在全亮时,约消耗60mA电流,当使用多个WS2812时,需要足够功率的电源,建议每30个LED增加一个1000µF电容滤波。数据线较长时,建议增加100Ω电阻。在大电流工作时,会产生热量,由此在高密度、长时间工作时,需要考虑散热措施。
在使用python进行编程的情况下,通过调用相应的库函数即可便捷地实现控制目标。实现7个彩色灯位WS2812B控制的程序为:


经程序的上传,其彩色效果如图6至图11所示。
图6 红色效果

图7 绿色效果

图8 蓝色效果

图9 黄色效果

图10 粉色效果

图11青色效果

除实现静态的灯光效果外,还可实现动态的效果设计。这里提供3种动态效果的实现方法,即单个彩灯向前跳跃效果、彩灯渐进效果及组合产生各色灯光的效果。单个彩灯向前跳跃的函数为:def light_1():
   j=0
   while j<7:
         for i in range(0,_n):
             n=(0,0,0)
             if i==j:
                n=(100,0,0)
         n.write()   
         time.sleep(0.1)
         j=j+1
彩灯渐进效果的函数为:def light_2():
   j=0
   while j<7:
         for i in range(0,_n):
             n=(0,0,0)
             if i<=j:
                n=(0,100,0)
         n.write()   
         time.sleep(0.1)
         j=j+1
色彩组合效果的函数为:def light_3():
   j=0
   k=0
   p=0
   while j<7:
         for i in range(0,_n):
             n=(0,0,0)
             k=random.randint(1, 50)
             p=random.randint(1, 50)
             if i<=j:
                n=(k,p,0)
         n.write()   
         time.sleep(0.1)
         j=j+1
效果测试的主程序为:def main():
    #红色
    Light_clear()
    Light_it(100,0,0)
    #延时(秒)
    time.sleep(2)
    #绿色
    Light_clear()
    Light_it(0,100,0)
    #延时
    time.sleep(2)
    #蓝色
    Light_clear()
    Light_it(0,0,100)
    #延时
    time.sleep(2)
    #黄色
    Light_clear()
    Light_it(100,100,0)
    #延时
    time.sleep(2)
    #紫色
    Light_clear()
    Light_it(100,0,100)
    #延时
    time.sleep(2)
    #青色
    Light_clear()
    Light_it(0,100,100)
    #延时
    time.sleep(2)
    Light_clear()
    light_1()
    time.sleep(2)
    Light_clear()
    light_2()
    time.sleep(2)
    Light_clear()
    light_3()
    time.sleep(2)

if(__name__=='__main__'):
    while 1:
      main()
经程序上传,所实现的效果如图12至图14所示。
图12跳跃效果

图13 渐进效果

图14 变色效果

此外,如果继续增加WS2812的数量,则会更加增强显示的效果。

页: [1]
查看完整版本: FireBeetle 2 ESP32 P4 开发板的WS2812彩色灯带驱动控制