用树莓派控制WS2812灯带装饰圣诞树

圣诞节,某购物平台上推出WS2812灯带,144灯每米40元,感觉可以买个几米来玩玩。
我们知道WS2812点灯原理很简单,就是逐个灯写入24bit的颜色。

用树莓派控制WS2812灯带装饰圣诞树_第1张图片

其中T0H≈0.35us,T0L≈0.8us,T1H≈0.7us,T1L≈0.6us,对于一颗灯珠来说,至少需要0.2~0.3ms,灯珠之间不需要信号延迟,但两组信号量之间需要不小于50us的延迟。如下:

用树莓派控制WS2812灯带装饰圣诞树_第2张图片

file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps63CD.tmp.jpg
对于有几百颗装饰灯的灯带来说,每次刷新颜色需要秒级的延迟,是可以忽略的。

虽然出差在外,但不影响规划圣诞树的装饰。距离圣诞没几天,先把代码写好,到货直接用,手边有块树莓派,拿块8灯的WS2812B-8先充数,做一个树莓派点灯的demo。
首先是安装python库
pip3 install rpi_ws281x
写一小段代码

用树莓派控制WS2812灯带装饰圣诞树_第3张图片

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

用树莓派控制WS2812灯带装饰圣诞树_第4张图片

原理其实很简单,就是吧随机颜色写到每个灯珠上,值得注意的是在代码 /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。 

用树莓派控制WS2812灯带装饰圣诞树_第5张图片

但实际测试,可以发现设置LED_PIN的取值还可以是10(Pin19,MOSI)、12(Pin32,GPIO.26)、21(Pin40,GPIO.29)。而且还居然都可以用。然而其它某些我之前试过支持软PWM的接口反而是不能用的,不太明白其原因。
---------------------
作者:tobot
链接:https://bbs.21ic.com/icview-3188016-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

你可能感兴趣的:(嵌入式基础知识,嵌入式硬件,单片机)