本帖最后由 tobot 于 2021-12-24 00:35 编辑
#申请原创# @21小跑堂
又是一年一度的圣诞节,某购物平台上推出WS2812灯带,144灯每米40元,感觉可以买个几米来玩玩。 我们知道WS2812点灯原理很简单,就是逐个灯写入24bit的颜色。
其中T0H≈0.35us,T0L≈0.8us,T1H≈0.7us,T1L≈0.6us,对于一颗灯珠来说,至少需要0.2~0.3ms,灯珠之间不需要信号延迟,但两组信号量之间需要不小于50us的延迟。如下: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps63CD.tmp.jpg 对于有几百颗装饰灯的灯带来说,每次刷新颜色需要秒级的延迟,是可以忽略的。
虽然出差在外,但不影响规划圣诞树的装饰。距离圣诞没几天,先把代码写好,到货直接用,手边有块树莓派,拿块8灯的WS2812B-8先充数,做一个树莓派点灯的demo。 首先是安装python库 pip3 install rpi_ws281x 写一小段代码 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps63ED.tmp.jpg 把WS2812的控制线接到GPIO1上,连接电源(只有少量几个灯珠,板上的3.3V或者5V都行,实际接灯带的话估计得使用外置电源)和地,就可以看到灯珠在不断变换色彩了,效果图(手机拍摄的效果还真是难看,不过不管怎么说,显示变颜色的功能还是实现得很好的) file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps63FE.tmp.jpg 原理其实很简单,就是吧随机颜色写到每个灯珠上,值得注意的是在代码 /usr/local/lib/python3.7/dist-packages/rpi_ws281x/rpi_ws281x.py中,已经明确提示只有支持PWM的GPIO口才能运行这段代码。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps63FF.tmp.jpg 从树莓派的资料上查到,唯一硬件PWM口为Pin12(GPIO.1),也就是上图中的LED_PIN=18。 但实际测试,可以发现设置LED_PIN的取值还可以是10(Pin19,MOSI)、12(Pin32,GPIO.26)、21(Pin40,GPIO.29)。而且还居然都可以用。然而其它某些我之前试过支持软PWM的接口反而是不能用的,不太明白其原因。 目前看来,圣诞节是没法回去过了,把代码共享给出来,祝大家圣诞夜成双成对。。。
|