在BPI-Pico-RP2040开发板上,配有一个基于WS2812的显示器件,它只有一个引脚,由GPIO3来控制,见图1所示。
图1 WS2812电路
WS2812的工作时序比较特殊,它是通过高低电平的时间差异来标识数据的,其输入码的时序波形见图2 所示。
图2 时序波形
具体的传输时间见表1所示,由此可见它对时间的要求还是比较高的。
表1 数据传输时间
在数据传输过程中,它是按照图3的时序来进行。
图3 数据传输顺序
此外,WS2812允许进行级联来使用,其连接方式见图4所示,具体的线路连接见图5所示。
图4 连接方式
图5 线路连接
在Arduino IDE的环境下,需添加相应的库NeoPixel来支持该器件的使用。
实现板载 WS2812控制的程序如下:
#include
<NeoPixelConnect.h>
#define
MAXIMUM_NUM_NEOPIXELS 1
NeoPixelConnect
p(3, MAXIMUM_NUM_NEOPIXELS, pio0, 0);
void setup(){
delay(2000);
}
void loop(){
p.neoPixelFill(255, 0, 0, true);
delay(1000);
p.neoPixelClear(true);[]()
delay(1000);
p.neoPixelFill(0, 255, 0, true);
delay(1000);
p.neoPixelClear(true);
delay(1000);
p.neoPixelFill(0, 0, 255, true);
delay(1000);
p.neoPixelClear(true);
delay(1000);
}
经程序下载,其显示效果如图6至图8所示。
图6点亮红色LED
图7 点亮绿色LED
图8 点亮蓝色LED
若修改语句“#define MAXIMUM_NUM_NEOPIXELS 1”
的定义值,则可点亮更多的灯位。
当定义语句为“#define MAXIMUM_NUM_NEOPIXELS 7”时,使用7个灯珠的WS2812灯带,则其显示效果如图9至图11所示。
图9点亮绿色LED
图10 点亮蓝色灯带
图11 点亮红色灯带
除了显示3基色红绿蓝,还可以色彩叠加的方式来显示出更丰富的色彩。当然通过亮度的调节,也可产生呼吸灯的效果。
当换上60个灯珠的WS2812灯带时,经灯珠个数的修改,其效果如图12和图13所示,其效果还是非常漂亮的!
图12 点亮黄色灯带
图13点亮蓝色灯带
演示视频:
更多回帖