事情是这样的,在 2021 年 9 月的时候,我就在 B 站上看到了朋友 @电动派大星 (另一个世界的我)的一个视频,分享了他关于飞利浦 Hue Play 氛围灯的使用感受。当时我就被那种可以与屏幕显示内容同步的流光溢彩效果和 HomeKit 支持种满了大片草原,结果到京东一看,将近 2000 元的价格直接就把我劝退了。
本来以为这事就这么过去了,结果后来大耳朵 TV 也分享了自己在电视上使用飞利浦声光同步器(Hue Sync Box)和 Hue 氛围灯带组成的流光溢彩套装体验,再次让我对这个东西燃起了欲望。
然而,一套高达 2000 元的价格着实让贫穷的我下不去手。因此我就在想,有没有一种便宜但也能实现类似效果的解决方案?于是,我便开始了长达一年的折腾过程。
首先在文章开始前,我们先要介绍一个概念:偏置照明(Bias lighting)。
偏置照明是一个视频剪辑和家庭影院领域中的概念,指的是位于屏幕或显示器背面,用于照亮显示器后方墙壁的微弱光源。布置偏执照明的目的是降低显示器的感知亮度,减少长时间在非常暗的环境下观看明亮的显示器时,由于显示器和背景区域亮度差异过大造成的眼睛疲劳。
不难理解,无论是飞利浦的 Hue 流光溢彩套装,还是其他显示器或电视背后的照明方案,都属于偏置照明的一种。有了这个概念,我们就可以继续往下走了。
需求是什么?
在打开淘宝前,第一步还是要明白自己想要的偏置照明需求是什么。对我来说,我的主要功能诉求有以下五点:
-
支持 HomeKit,可以在 iPhone、iPad 和 Mac 的家庭 app 上轻松操作;
-
-
-
平时可以充当显示器背后的氛围灯,照亮夜晚时工作的环境;
-
体积尽量小巧,避免类似飞利浦声光同步器那样需要接多条 HDMI 线,最好是能够无线;
价格控制在 100 以内。
现成的商品解决方案
明确好了自己需求之后,我还真在淘宝找到了类似的商品,尽管价格略高出了预算,但相比起飞利浦高达 2000 元的价格来说还是很实惠的。
在询问了卖家之后,卖家表示这套偏置照明方案可以满足我的绝大部分需求,不过 HomeKit 支持是没有的。彼时的我觉得这个问题倒也是不大,可以直接在灯带的电源处加上一个可以 HomeKit 控制的插座,也能曲线救国解决这个问题。
于是,我斥 143 元巨资购入了这款「廉价版流光溢彩灯带」。不久后,我便收到了卖家寄来的一个控制盒、一条 2 米的灯带和一个 5V 8A 的电源和一根与电脑连接的 USB-A 转 USB-B 数据线 —— 和 Hue Play 的套装类似。我按照教程贴好了灯带并连接好了电脑和控制盒,结果上电的时候却出了问题:我误把显示器的 24V 电源接到了灯带上,直接导致灯带报废。
无奈,我又花了一笔钱重新购买了 2 米的灯带。几天后灯带到手,认真检查了各处无误后,接通电源并在 Mac 上按照教程设置驱动和软件,终于成功点亮,开启了跟随屏幕显示内容动态改变颜色的流光溢彩效果。
但作为过来人的我要告诉你,以后最好还是不要再选择淘宝商家的这些方案了。价格高不说,他们的软硬件也都不是自己开发的,只是拿了开源社区的创意做成了自己的产品,因此他们并不懂原理,售后的服务水平也非常一般(到后来甚至我教商家怎么设置,他只能给我回复三个省略号)。有条件的话,建议要么直接上飞利浦 Hue,要么就自己 DIY 吧。
HomeKit 接入
一开始我确实是想直接增加一个 HomeKit 的插座,但这样确实是下下策的妥协方案:会把让电源插头凸出来一大块不说,还不能控制灯带的颜色和明暗,只有一个开关功能,显得不够优雅。
这时候,万能的互联网就发挥了巨大作用。在搜索之后我发现,我用来控制灯带的这款软件「Prismatik」,已经有人为它开发了一个 HomeAssistant 插件。如此一来,我就可以将灯带接入到 HomeAssistant 并通过 HomeKit 桥接器接入 HomeKit。
这款插件的使用也比较简单。安装好插件(可用在 HACS 商店用自定义存储库添加 home-assistant-prismatik 插件或直接手动安装)后重启,然后再在 HomeAssistant 的 configuration.yaml 文件中增加下面的配置即可:
light:
- platform: prismatik
host: Mac 的 IP 地址
name: "灯带的名字"
再次重启,灯带就被添加到了 HomeAssistant 中。尽管插件已经有一年多未更新,但核心功能已经具备,能够调节灯带的开关、颜色、色温和亮度。
存在的一系列问题
这套方案的价值,在于为当时我还没有了解相关技术原理的我提供了一个可以快速解决痛点的方法。然而初次之外,我却一直在忍受它带来的各种问题。
首先是 home-assistant-prismatik 与 Prismatik 软件的协作非常不稳定,有时候插件无法控制灯带,需要在电脑上重启软件,甚至还出现了灯带莫名其妙自己关闭的情况,需要重启插件和软件才能建立连接。
其次是移动受限。由于灯带的控制数据通过 USB 与电脑连接,而 home-assistant-prismatik 则通过局域网与电脑连接,因此在我需要外出或单独使用笔记本时,拔掉 MacBook 和扩展坞的雷雳线缆后插件便无法与灯带控制盒沟通,HomeAssistant 和家庭 app 中就会直接提示设备「无响应」。
最让我无法忍受的一点,是灯带控制盒中的 WCH 串口芯片在重新连接 Mac 后端口号会改变。由于 Prismatik 更改连接设备的串口号需要重新对灯带进行初始化设置,而当时我又由于工作原因每天需要带自己的电脑去上班,所以每次下班回家重新插上 Mac 的第一件事,就是从头跑一趟灯带初始化设置……
只不过今年 5 月辞职后,我便长时间旅居海南,灯带的这些问题便暂时被搁置了。直到 9 月底重新回到广州,搞定了 HomeKit 升降桌之后,终于可以着手解决这个问题。
想要解决上面的这些问题,就需要先弄清楚这套系统的工作原理,所以我对这套硬件进行了刨根问底式的拆解和搜索。
在拆开了控制盒之后我发现,这其实就是一套 Reddit 上曾经有人
分享过的 DIY 过的方案
,被国内的一些淘宝商家抄过来之后进行售卖。它的核心是一块 Arduino UNO 开发板,刷写了一个开源的 Ambilight 固件,而灯带采用的是大名鼎鼎的 WS2812B。透过这套外置的系统结合电脑上的 Prismatik 软件对屏幕进行实时录制,实现了流光溢彩的效果。
剧透图:Arduino UNO 和后续用到的模块大小对比
WS2812B 灯带?答案是不需要。WS2812B 灯带的自身素质还是很不错的,不但支持 1600 万色,而且只需要灯珠与灯珠之间通过串行级联接口相连,只需要一根信号线就能完成数据的接收与解码。
那么电源呢?卖家提供的电源规格是 5V 8A,电源模块是否可以缩小?也不行。查阅 WS2812B 灯带的数据手册可知,单个 WS2812B 的驱动电流是 60mA,而要将我的 32 寸屏幕四周围一圈至少需要两米的长度,共计 120 颗 WS2812B LED 灯。所以,我需要的电流最低门槛便是 0.06 × 120 = 7.2A,否则便无法提供足够的电流来点亮灯带。
选择哪种控制方案?
为了能让灯带直接接入 Apple HomeKit,并满足开关、亮度、色温和颜色的调节,我决定直接抛弃原来的 Arduino UNO 控制盒,为 WS2812B 定制一个全新的,不需要电脑中转数据就能支持 HomeKit 的控制方案。
参阅我派作者 @EstrellaXD 在《HomeKit 智能升降桌是怎样炼成的》这篇文章中可以知道,想要从零开始打造一个 HomeKit 模块,最常用有三种开源的 SDK 可以选择:
ESP Apple HomeKit SDK:是乐鑫公司(Espressif)基于 HAP 为其销售的 ESP32 与 ESP8266 定制的 SDK,优点是功能全,可定义参数多,但是需要有一定的嵌入式开发基础。
Arduino HomeKit ESP8266:这是第三方开发者在 Arduino 中为 ESP8266 新品定制的代码。相比于 ESP 官方的 SDK,Arduino 明显要容易上手很多,可自定义的东西也很多。
HomeKit Accessories Architect(HAA):也是一个第三方开发的基于 ESP8266 芯片的套件。相比于上面两种方案,HAA 的优势在于不需要自己写代码,通过 JSON 文件可以方便的配置 DIY 的 HomeKit 配件类型和功能,相对来说是最友好且方便的。
经过搜索和考虑我发现,很遗憾,目前并没有能够直接接入 HomeKit 的流光溢彩灯带控制方案。不过柳暗花明又一村,在寻找的过程中,我发现了另一个开源项目:WLED。
关于 WLED 项目
WLED 是德国开发者 Christian Schwinne 基于 ESP8266 或 ESP32 开发的一个开源项目,可以将 WS2812B、WS2811 等 LED 灯或灯带接入互联网控制,并提供了图形化操作界面、iOS 和 Android App 及丰富的自定义选项。
而最大的亮点,莫过于它还原生支持了 HomeAssistant 的集成。这意味着,我们完全可以不写一行代码,直接在图形化界面实现 WLED 接入 HomeAssistant 并桥接到 HomeKit 的操作。
然而 WLED 的惊喜之处还不止于此,它还支持与飞利浦 Hue 同步、Alexa 语音控制和 MQTT 等特性。如果你有兴趣去折腾另一个开源项目 DiyHue 的话,你甚至还可以让 WLED 映射为飞利浦 Hue Strip Plus 灯带,并和 Hue Sync(也就是飞利浦官方的流光溢彩套件)配合使用 —— 要知道,2 米的 WS2812B 灯带也就 30 元左右,而同长度 Hue Strip Plus 灯带的售价高达 729。
Hyperion:全新的无线录屏方案
光搞定了 LED 灯带的驱动和 HomeKit 连接只是实现了需求的一半,而最终于的流光溢彩部分仍然没有得到解决。不过在 WLED 项目中,它还提到了另一项功能支持:Hyperion。
Hyperion 和 Prismatik 类似,是一个开源的偏置照明软件解决方案,但相比 Prismatik 有着不少的优点。而下面这些正好就是我们这个项目所必须的:
选择合适的硬件并思考连接方式
有了软硬件的支持,那么接下来就是搭建测试环境来验证方案的可行性。
首先,我们需要选择一个 ESP8266 的开发板或模块。但是基于 ESP8266 开发的硬件这么多,应该怎么选择?不要着急,让我们回到 WLED 项目的官方页面,往下拉,就能看到作者给出的「已适配硬件」页面跳转链接,点击进入即可。在这个页面中,作者详细罗列了可连接的 LED 灯带类型和电压、支持 WLED 的控制模块或开发板,以及可能会用到的硬件等等。
因为 WS2812B 灯带只需要一路控制信号就能驱动,所以理论上来说只需要控制芯片有一个 IO 接口即可。而为了尽可能缩小体积,我舍弃了 NodeMCU 这类开发板,最终将选择落到了 ESP-01S 上。ESP-01S 是安信可基于 ESP8266 开发的一个物联网模块,只有半截拇指大小的体积,提供了两个 IO 接口,可以说是完美符合我们的需求。
不过要注意的是,WLED 的作者提醒我们,不推荐用 ESP-01S 用来做 WLED 的控制器,原因有三点:
但考虑到,我本身已经拥有一个 USB 转串口模块可以用于刷写固件,而且如果固件能稳定使用的话,其实没有很大更新的必要。其次,ESP-01S 的供电也可以用一颗 AMS1117-3.3 芯片来解决,因此作者提到的这些小缺点对我来说影响并不大。
而剩下的电源和灯带部分,我决定继续沿用原有的方案,不进行任何改造。这样我便可以不用重新粘贴显示器背后的 WS2812B 灯带,也不用再理一遍桌底的电线,只要更换掉原来的控制盒即可。
不过有一点不同的是,原有的淘宝方案是双供电,即 5V8A 的电源只供应灯带使用,Arduino 则使用电脑 USB 供电,同时传输录屏的数据,两个电源共地。而在重新思考的新版方案中,我决定砍掉这根 USB 线,让 ESP-01S 从 Hyperion 无线获取录屏数据,并直接从灯带电源取电,通过上面提到的 AMS1117-3.3 芯片来解决供电问题。
搭建系统并进行测试
等待一段时间后,需要的硬件都已寄到,我们就可以在面包板上搭建电路并进行测试了。
但在此之前,我们需要用 USB 转串口模块对 ESP-01S 进行固件刷写。固件可以在 WLED 的 Release 页面下载到,选择「WLED_0.13.3_ESP01.bin」这个文件即可。
接着,我们在电脑上安装 ESP 刷写程序 Tasmotizer 和 USB 转串口模块的驱动,然后按照下面的电路连接 USB 转串口模块和 ESP-01S,并将模块插入电脑的 USB 口:
注意,一定不能直接连接串口模块的 5V 电源,否则 ESP-01S 会烧坏。有些串口模块的 3.3V 电源是不工作的,这时候就需要接一个 AMS1117-3.3 的 LDO 模块,将电压降低到 3.3V
一定要注意的一点是,下载模式中 ESP-01S 的 IO0 需要下拉,因此需要一根额外的线将 IO0 接地,否则固件是无法刷入的。
最后,在 Tasmotizer 中选择对应的串口并导入相应的固件,点击左下方的「Tasmotize! 」按钮,固件就会自动被刷入 ESP-01S 中。
刷写好固件后,按照下面的原理图连接电路,然后给整个系统上电,就可以开始测试了。
第一次上电 HIA 需要设置 WLED 的 Wi-Fi 连接。在电脑或手机上连接 WLED-AP 的 Wi-Fi,密码是 wled1234,然后在弹出的页面中输入你的 Wi-Fi SSID 和密码,然后在最上方点击「Save」保存。
接下来,在路由器找到 WLED 的 IP 地址,直接将它输入到浏览器中就可以对它进行配置。在这里我们不对其他项目进行过多改动,直奔主题到「Config > LED Preferences」中将 LED 的数量改为 120 个(一般一米是 60 个)。
你可以看情况考虑是否要关掉亮度限制,我实测两米没有问题。如果电流过大,也可能会烧坏 ESP-01S
保存好设定后,如果没有其他错误,那么现在 120 颗 LED 就全部处于点亮的状态,并且可以用网页来进行控制。
下一步是通过自动集成把 LED 添加到 HomeAssistant。进入到 HomeAssistant 的「配置 > 设备与服务」页面,HomeAssistant 便会提示已发现新的 WLED 集成,按照提示将它添加到 HomeAssistant 即可。
到这一步,我们便可以用 HomeAssistant 来对 WLED 进行控制了。此外,你还可以在 HomeAssistant 中查看到很多控制选项和状态参数,如果你有兴趣的话可以继续研究下去,这里我们就暂时略过,继续我们的主线任务。
这时候,我们就可以把 WLED 通过 HASS Bridge 接入 HomeKit。点击 HASS Bridge 卡片的选项按钮(如果没有需要到右下角先添加一个 HASS Bridge 集成),然后进行对应的设定。不过由于每个人所用的桥接方式不同,你可以参考 这篇文章 里「接入 HomeKit」章节中对「域」、「包含模式」和「选择要排除的实体」等的介绍,根据你的需求来进行添加。完成后,点击卡片右下角的三个点,重载一下集成,稍后就能在家庭 app 中看到,WLED 已经成功被添加到了 HomeKit 中。
到这里,按照新思路搭建的系统已经成功跑通 WLED 和 HomeKit 的部分。下一步,我们就可以回到 Mac 上,来设置 Hyperion 了。
到 Hyperion 的 GitHub Release 页面,下载最新版的 Hyperion for Mac,安装好之后授予它屏幕录制的权限,然后就可以在菜单栏上点击「Hyperion > Setting」进入它的 Web 设置页面。
Windows 用户需要点击下面的「Show all 14 assets」才能看到
首先,我们可以点击右上角的扳手,将 Hyperion 的设置页面改为中文。然后来到「LED 配置 > LED 硬件」下,在控制器的类型中选择 WLED,让 Hyperion 自己发现设备(或是直接输入 WLED 的 IP 地址)。
随后,来到 LED 布局的设置页面,按照显示器背后的灯带粘贴路径来设置对应的 LED 布局,再回到 LED 控制器页面点击保存即可。
如果设置没有出错,那么现在就能够看到,WLED 已经开始能够显示流光溢彩的效果了。
至此,所有的测试均已成功跑通,并且成功实现了一开始我们预设的所有需求。
▍绘制 PCB 模块和稳定性测试
虽然我们的测试已经成功,但显然这套「盘丝洞」的系统并不能直接搬到显示器后面使用。我们需要设计一块合适的 PCB 板,来承载整个电路及 EPS-01S 模块。
绘制及打样 PCB
这里我选择的是嘉立创 EDA。作为一款国产 EDA 设计软件,我们可以直接将画好的 PCB 直接提交到嘉立创进行生产,每个月免费可以打样两个项目的 PCB(每个项目 5 片),实属良心。同时,如果你不想自己焊接贴片 SMT 的话,也可以交由嘉立创来搞定。
注册好账号并创建项目后,首先是要绘制原理图。这部分并不难,在左侧找到或搜索对应的元器件,将它们添加到绘图区,然后按照上面在面包板上跑通的方案进行连接。
搞定了原理图,点击保存,然后就可以点击「设计原理图转 PCB」。由于这个项目的 PCB 并没有多复杂,只需单面的连接线路即可搞定。
设计完成后,点击「制造 > 一键 PCB / SMT」下单,软件还会提示你进行 DRC 检查,核对线路设计是否有问题。通过 DRC 检查后,我们就可以到嘉立创进行 PCB 打样,并等待板子寄送到家里。
而我作为懒人,也没有回流焊的平台,实在是不想自己用烙铁焊接 SMT 贴片,所以这一步我也直接让嘉立创打包一条龙服务了。虽然 50 元的贴片费用确实不低,但考虑已经在嘉立创白嫖了这么多板子,也就不再过多吐槽了。
焊接直插件
板子到手后,我还需要焊接已经刷好 WLED 固件的 ESP-01S 模块,以及两侧用于连接电源和 WS2812B 灯带的连接端子。然而,两侧端子的体积是在有些大,所以我索性直接将线焊接在了对应的焊盘中,这样整个模块的体积便得到了进一步的缩小。
稳定性测试
成功瘦身且实现更多功能的流光溢彩控制模块已经完成了,但我依旧不建议立刻就装到显示器上使用。毕竟电源的功率达到了 40W,电流也高达 8A,因此我还专门做了一天的稳定性测试,试试看长时间点亮是否会出现问题。
实测发现,AMS1117-3.3 用手摸着还是挺烫的,温度应该能有 50-60 度左右。一方面是架在上方的 ESP-01S 模块阻挡了散热,另一方面是模块体积太小,没法假装散热设施,只能通过空气散热。好在 AMS1117-3.3 的工作最高温度可达 120 摄氏度,因此这个问题我并不需要担心。
但不管怎样,我还是需要实际装到显示器屏幕后方进行较长一段时间的试用,才能确定这个模块能否胜任。
算笔账
如果不考虑开发过程中的支出,那么实际上这个灯带成本(含运费)表格如下:
虽然稍微超出了预算,但不难看出,主要的支出都在嘉立创的 SMT 贴片元器件焊接中。如果你选择自己焊接,那么还可以省掉这笔钱。总的来说,这一套的成本并不算高,而且相比动辄上千元的飞利浦 Hue 流光溢彩套装来说已经算是「丐中丐」的价格了。
只不过相比起商业化的产品而言,这个版本的 WLED 流光溢彩驱动模块还有很多需要改进的地方。但对于自用的 DIY 产品来说,已经算是相当便宜且稳定易用了。
▍第二版改进
上面提到,由于我发现板子两侧用于连线的端子体积过大,而直接焊接线路则导致两侧凸出来很大一片,还是有些不够优雅,所以第一版的 WLED 流光溢彩灯光控制模块刚使用不到一周,便开始着手画第二版的 PCB 图。
相比于第一版的 PCB,第二版的 PCB 大幅缩减了模块两侧的长度,总体长度仅 3.4 厘米,压缩到了能容纳 ESP-01S 的极限长度。
此外,为了增加 AMS1117-3.3 的散热能力,第二版的 PCB 在其下方增加了一块裸露的铺铜区,方便它能将热量即使导到模块的周围,增大与空气的接触面积。
最后,这一版的 PCB 中还加入了用于后续给 ESP-01S 固件升级使用的接口。后续遇到 WLED 重大固件且无法使用无线更新时,就可以方便地通过这四个接口进行升级:只需要将 RXD 和 TXD 连接到 USB 转串口模块的对应线路,然后短接 IO0 和 GND 即可。
不过目前来看,第一版的 WLED 流光溢彩模块到现在依旧运行良好,因此没有需求的话,第二版的 PCB 或许暂时还先不会去打样,留待日后出现升级或新需求时继续添加新功能,例如增加与售价高达 2399 的飞利浦声光同步器类似的 HDMI 输入采集模块等。
对了,其实这个 WLED 流光溢彩模块也可以作为通用的 WS2812B 灯带控制模块。将它和灯带一起贴到需要的地方,接入电源并通过 HomeAssistant 桥接到 HomeKit,即可以极低的成本获得一个能在 Apple 家庭 app 控制的彩光灯带设备。
▍
HomeKit 及 HomeAssistant 自动化
有了不依赖电脑通信的 WLED 灯带,现在我们终于可以放心地将它接入到 HomeKit 及 HomeAssistan 来进行自动化操作了。
根据我自己的需求,其实大部分时间 WLED 还是作为夜晚显示器后方的常亮偏置照明使用,因此我设置了 WLED 与工作模式的联动:打开后,WLED 就会打开并切换到 4000K 左右的自然光,方便我集中精力。
此外,在游戏模式时,就可以通过 HomeAssistant 的自动化,将 WLED 设置成 RBG 幻彩模式,营造颇具网吧风格的环境。
要说这个全新的 WLED 流光溢彩模块有什么不足之处,主要还是在软件的层面。
在我看来最大的遗憾,莫过于无法在 HomeKit 里直接选择氛围灯光模式还是流光溢彩模式。但这个问题我并没有办法去改变,根本原因在于 HomeKit 并不支持灯光模式的选择,只能期待后续 Apple 可以加入这个功能了。
第二点当我想要结束流光溢彩模式后,需要手动在电脑上退出 Hyperion。而在退出了 Hyperion 后,灯带有很大概率会直接熄灭,而不是将控制权限交还给 WLED。这时候就需要手动到 WLED 的网页或 App 设置界面中点击「Override once」,才能重新建立对 WLED 的控制,稍微有些繁琐。而且,这个问题同样和上面一样,目前没有更好的解决办法。
这个项目一开始源自于对原版 Prismatik 流光溢彩方案的割裂使用体验的不满,但很长一段时间其实我也没有解决办法。直到再后来跟着我派作者 @EstrellaXD 学习了 HomeKit 升降桌的 DIY 思路之后,才萌生了大跨步改动的想法。
说实话这里其实运气成分挺大,我没想到竟然有这么多 DIY 先辈做出了这么好的方案 —— 而我只不过是个搬运工,将这些成功跑通的硬件固化成了一个自己的模块。因此,真的特别需要感谢 WLED 的开发者 Christian Schwinne 和 Hyperion 的开发者,感谢他们将自己的成果无私地开源到网络上。
WLED 流光溢彩驱动模块是我继升降桌之后,第二个靠自己查资料和爬数据手册 DIY 出来的 HomeKit 设备。这种探求未知并获得成功的过程,仿佛让我找回了 6 年前初次接触 HomeKit,并把 YeeLight 灯泡接入 HomeKit 的那个夜晚 —— 成功的那一刻,我发现好久都没有这么开心过了。
那么,下一个会被改造成「Work with Apple Home」的产品,又会是谁呢?敬请期待。
https://github.com/Aircoookie/WLED/releases
https://github.com/hyperion-project/hyperion.ng
https://github.com/tasmota/tasmotizer
https://sspai.com/post/76707?utm_source=wechat&utm_medium=social
/ 更多热门文章 /