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

圣诞节,某购物平台上推出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的接口反而是不能用的,不太明白其原因。
---------------------
作者:tobot
链接:https://bbs.21ic.com/icview-3188016-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
控制ws2812灯带,需要用到树莓派上的GPIO口,以及相关的软件库。以下是一个简单的操作流程: 1. 连接ws2812灯带树莓派上,可以使用杜邦线将灯带的DI引脚连接到树莓派的GPIO口(例如GPIO18)上。 2. 安装控制ws2812灯带的Python库,例如rpi_ws281x。可以使用pip install rpi_ws281x命令进行安装。 3. 编写控制ws2812灯带的Python脚本,使用rpi_ws281x库提供的函数进行控制。例如: ```python import time from rpi_ws281x import * # LED strip configuration: LED_COUNT = 8 # Number of LED pixels. LED_PIN = 18 # GPIO pin connected to the pixels (18 uses PWM!). LED_FREQ_HZ = 800000 # LED signal frequency in hertz (usually 800khz) LED_DMA = 10 # DMA channel to use for generating signal (try 10) LED_BRIGHTNESS = 255 # Set to 0 for darkest and 255 for brightest LED_INVERT = False # True to invert the signal (when using NPN transistor level shift) LED_CHANNEL = 0 # set to '1' for GPIOs 13, 19, 41, 45 or 53 # Define the colors of the LED pixels. colors = [ Color(255, 0, 0), # Red Color(0, 255, 0), # Green Color(0, 0, 255), # Blue ] # Create a LED strip object. strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT, LED_BRIGHTNESS, LED_CHANNEL) strip.begin() # Loop through the colors and display them on the LED strip. while True: for color in colors: for i in range(strip.numPixels()): strip.setPixelColor(i, color) strip.show() time.sleep(1) ``` 这个脚本使用了rpi_ws281x库提供的函数,通过循环控制LED灯带的颜色变化,可以通过修改colors列表中的颜色值来改变LED灯带的显示效果。 4. 运行Python脚本,控制LED灯带的显示效果。可以使用python命令运行脚本,例如: ```shell python led_control.py ``` 这样就可以实现通过树莓派控制ws2812灯带的效果了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值