作者:店长大人
0X00
这两天想利用HA (Homeassistant) 智能家居平台监控下猫砂喷子,把我家喵星人的拉屎习惯了解下,于是找@Spoony购入了一个人体热释电模块,偶然又发现了一个叫做LEDSTICK的DIY产品,感觉不错,遂同时入手。LEDSTICK到手后感觉太棒了,简直爱不释手,放在机箱里太浪费了,还是折腾下比较有意思。
LEDSTICK的RGB灯带其实是附属功能,它的主要功能在产品说明书里写的很详细,此处不再多说。这篇文章主要是采用ESP8266+ESPhome来零代码驱动LEDSTICK的8颗LED灯,同样原理完全可以移植到ARGB灯带中。当然ESPhome无缝衔接HA,同样也可以用HA控制。
LEDSTICK产品:
0X01
材料清单:
树莓派
ESP8266/NODEMCU
杜邦线
LEDSTICK
0X02
在树莓派中安装ESPhome:
安装方法极为简单,可参看我之前的帖子:
https://www.quwj.com/2020/01/20/ha-transforms-the-fish-tank-iii-upgrade-it-with-esp8266.html
我们按上面的文章中的教程新添加一个esp8266配置,如果已有在用的8266,那就可以直接修改。
电路驱动原理:
在进入代码书写阶段之前,我们要先了解下这个LED灯带到底是怎么驱动的。这样才能举一反三,将知识应用到其他同类产品上。
这8颗RGB灯珠其实是WS2812B. 这个帖子或许能帮助我们更容易理解这款灯珠的性能:
https://blog.csdn.net/tangxing1212/article/details/42964417
这里,我们要注意的是:
1:接口,这款产品预留的是D_RGB接口,三针,分别是VCC, DIN, GND。VCC接5V,GND接地,DIN口要接我们的MCU(ESP8266)的GPIO口。驱动时DIN输入一个由多段24位字符组成的信号。用来将颜色信号发送给灯带,灯带自带的IC会自动将信号解码为对应颜色并显示出来。
2:级联逻辑。由于该WS2812B支持单珠编程,当多颗灯珠级联时,我们在上位机代码中设置了对应的灯珠级联个数N,MCU每次发送出来的数据都是 N个24bit数据组合在一起的。当第一个灯珠接收到这个数据链以后,会自动将第一个24bit数据消耗,然后送到第二颗灯珠时数据链还剩N-1个24bit数据,然后第二颗灯珠再消耗1个24bit数据。以此循环。这样也就意味这个每个灯珠都可以自定义颜色。同样,级联的灯珠越多,随之带来的也是对MCU资源的消耗。我用Ardunio uno驱动过。大概8k的RAM,灯珠级联到3位数还勉强可以,再多了就要溢出了。
ESPhome 对应的驱动库:
1:基础版
因为是零代码。我们不需要写任何代码,直接在ESPhome中引入官方写好的库,做好配置即可。库地址:https://esphome.io/components/light/fastled.html
这里用到的是ESPhome中的FastLED库,用第一个模块Clockless
其中配置完全可以复制粘贴到你的ESP8266配置中,只需要修改下灯珠的IC类型 “chipest”参数,我们要采用WS2812B,并修改下GPIO端口,设置为你想使用的即可。此处我设置的是D1口。连接电路时,这个要接到LEDSTICK的DIN口。
这样的配置是个基础版,它可以实现让LEDSTICK的8颗灯按照你希望的颜色去点亮或关闭,但一点也不炫酷。接下里我们进阶一下,把各种炫彩效果也加上。
2:进阶版
此处,我们参看ESPhome的官方文档:https://esphome.io/components/light/index.html#light-effects
在这里我们可以看到很多可选的效果。如图:
这些配置里有随机效果,频闪,彩虹,流水,烟花等等。可以根据自己的喜欢添加。其中很多参数都是可以自己设置的,具体参看模块要求即可。其方法举例如下:
light: - platform: ... # ... effects: - addressable_random_twinkle: - addressable_random_twinkle: name: Random Twinkle Effect With Custom Values twinkle_probability: 5% progress_interval: 32ms
附上我的部分配置文件:
light: - platform: fastled_clockless chipset: WS2812B pin: D1 num_leds: 8 rgb_order: RGB name: "LEDSTICK" effects: - random: name: Random Effect With Custom Values transition_length: 5s update_interval: 7s - strobe: name: Strobe Effect With Custom Values colors: - state: True brightness: 100% red: 100% green: 90% blue: 0% duration: 500ms - state: False duration: 250ms - state: True brightness: 100% red: 0% green: 100% blue: 0% duration: 500ms - flicker: name: Flicker Effect With Custom Values alpha: 95% intensity: 1.5% - addressable_rainbow: name: Rainbow Effect With Custom Values speed: 10 width: 50 - addressable_color_wipe: name: Color Wipe Effect With Custom Values colors: - red: 100% green: 100% blue: 100% num_leds: 4 - red: 0% green: 0% blue: 0% num_leds: 4 add_led_interval: 100ms reverse: False - addressable_scan: name: Scan Effect With Custom Values move_interval: 100ms scan_width: 1 - addressable_twinkle: name: Twinkle Effect With Custom Values twinkle_probability: 5% progress_interval: 4ms - addressable_random_twinkle: name: Random Twinkle Effect With Custom Values twinkle_probability: 5% progress_interval: 32ms - addressable_fireworks: name: Fireworks Effect With Custom Values update_interval: 32ms spark_probability: 10% use_random_color: false fade_out_rate: 120 - addressable_flicker: name: Flickers Effect With Custom Values update_interval: 16ms intensity: 5%
0x03
烧录配置并连接电路
我们先在ESP8266上面看看效果,先不接入HA。在ESP8266的配置中,我们要加入web_server组件,以方便我们远程登录esp8266进行操作。因此,ESP8266的配置中需加入以下代码:
# Example configuration entry web_server: port: 80
详细文档请参看:https://esphome.io/components/web_server.html
配置烧录到ESP8266中,然后将ESP8266与LEDSTICK连接。配置烧录可以参考之前的帖子,此处不再赘述。MD顺便吐槽下我的树莓派zero w,我是把HA跑在zero里面的铁头娃,编译一个配置文件你猜zero需要多久?1个多小时!!!!哈哈哈!其他树莓派都有大的用处,Zero能跑起来就行。
如图:
0x04
使用ESPhome网页按钮操作LEDSTICK灯:
ESP8266上载好配置后,给他们供电。浏览器输入:ESP8266的内网ip地址后,然后可以进行操作:
0x05
好吧,我错了。因为Esphome自带的网页服务器CSS/JS的限制,在ESP8266网页中只能打开关闭这个灯,不能装B的炫彩,那只好我们把这个ESP8266配置到HA中。看看它在HA中的效果。具体配置方式请查看:https://www.quwj.com/2020/01/20/ha-transforms-the-fish-tank-iii-upgrade-it-with-esp8266.html
现在HA直接集成了,添加成功后,我们把这个灯的实体添加到UI前端。如图:
0x06
写在最后,LEDSTICK这款产品的设计还是不错的。我个人觉得,还完全有二次开发的潜质,这个主控芯片应该完全支持对RGB灯的编程,开发者可以考虑除了外接主板实现同步色彩外,也可以用自身带的MCU实现对板载8颗RGB的驱动,实现自发光,哈哈哈!
发表评论