1. 项目缘起:当Siri遇上HAY旋转灯
“Hey Siri,打开HAY旋转灯。”
这句话听起来像是某个智能家居广告里的场景,但如果你手头恰好有一个HAY的经典旋转灯,又恰好对Arduino、ESP8266这类开源硬件有点兴趣,那么把它从一件普通的装饰品,变成一个能响应语音指令的智能设备,就成了一个极具诱惑力的想法。我就是被这个想法“击中”的人。HAY的旋转灯设计简约,通过旋转灯罩来开关和调节亮度,本身就有一种机械互动的美感。但每次都要走过去手动旋转,总觉得少了点“未来感”。既然苹果的Siri已经能控制家里的空调和窗帘,为什么不能控制这盏灯呢?
这个项目的核心,就是打破不同生态之间的壁垒。Siri生活在苹果的HomeKit生态里,而要让一盏普通的灯(哪怕是HAY这样的设计款)接入HomeKit,通常需要购买支持HomeKit的智能灯泡或智能插座,不仅成本增加,还可能破坏灯具原有的设计美感。我们的目标,是“无感”地赋予这盏灯智能——不改变其外观,不替换其光源,仅仅是在内部植入一个微小的“大脑”,让它既能保留原有的手动旋转操作,又能响应来自iPhone、Apple Watch甚至HomePod的Siri语音命令。
要实现这个目标,技术路径其实很清晰:我们需要一个能联网的微控制器(比如NodeMCU/ESP8266或ESP32)来充当灯的大脑,需要一套软件桥接服务(比如Home Assistant或Homebridge)来将非HomeKit设备“伪装”成HomeKit设备,最后通过苹果的“家庭”App和Siri完成控制。听起来步骤不少,但每一步都有成熟的社区方案支持。接下来,我就把自己从拆灯、接线、编程到最终实现“Hey Siri”控制的完整过程,以及中间踩过的坑和总结的经验,毫无保留地分享出来。
2. 硬件改造:深入HAY旋转灯内部
改造的第一步,也是最需要耐心和细心的一步,就是拆解灯具并理解其原有电路。HAY旋转灯的开关和调光逻辑完全通过物理旋转实现,这通常意味着内部有一个旋转编码器或者简单的电位器。我们的目标是保留这套优雅的物理交互,同时并联上我们的智能控制电路。
2.1 拆解与电路分析
准备一把合适的螺丝刀和撬棒,小心地打开灯罩。HAY旋转灯的结构通常比较简洁,核心部件包括:灯座、旋转机械结构、LED驱动板、LED灯珠。关键是要找到控制线路。用万用表的通断档或电阻档进行测量,很快就能发现,旋转动作实际上改变的是驱动板输入端的电压或PWM(脉冲宽度调制)信号。简单来说,旋转开关相当于一个可调电阻,分压后给驱动芯片一个0-5V或0-3.3V的模拟信号,驱动芯片根据这个电压值来输出相应的电流,控制LED的亮度。
注意:在拆解任何电器前,务必确保其已完全断电。对于这类插电使用的灯具,最好拔掉电源放置几分钟后再操作,避免电容残电。
我们的智能控制方案,不能简单粗暴地切断原有电路,而是要与它“并联”或“串联”一个控制节点。最理想的方案是,我们用一个微控制器生成的PWM信号,去“模拟”旋转开关所产生的电压信号。这样,当用户手动旋转时,灯由物理开关控制;当我们通过Siri发送指令时,则由微控制器生成的PWM信号接管控制。两者互不干扰,甚至可以叠加(但需要更复杂的逻辑处理,这里我们追求简单稳定,以智能控制优先)。
2.2 核心控制器选型:为什么是ESP8266?
在创客领域,能让设备联网的微控制器选择很多,最主流的就是ESP8266(例如NodeMCU开发板)和ESP32。对于这个项目,我强烈推荐使用 ESP8266 ,具体来说是NodeMCU V3这类开发板。理由如下:
- 成本与功能平衡 :ESP8266价格极其低廉,一片NodeMCU开发板通常不到20元。它集成了Wi-Fi功能,性能对于控制一盏灯的PWM输出绰绰有余。ESP32功能更强大(有蓝牙、更多IO口、性能更强),但价格也更高,对于这个单一任务来说性能过剩。
- 社区与生态 :ESP8266的Arduino核心支持非常成熟,有海量的库和教程。关于通过PWM控制灯光、连接MQTT、对接Home Assistant的代码示例遍地都是,遇到问题很容易找到解决方案。
- 功耗与供电 :HAY旋转灯本身是插电使用,不存在电池续航问题。NodeMCU开发板可以通过其Micro-USB口或VIN引脚,从灯具内部的5V电源(通常由LED驱动板上的降压模块提供)取电,实现一体化供电,无需额外电源适配器。
所以,我们的硬件清单精简如下:
- HAY旋转灯一盏。
- NodeMCU (ESP8266) 开发板一块。
- 杜邦线(母对母、公对母)若干。
- 1kΩ电阻(用于信号耦合,可选,但推荐使用以提高稳定性)。
- 电烙铁、焊锡、热缩管(用于可靠连接)。
- 万用表(用于电路探测和调试)。
2.3 电路连接方案详解
这是整个硬件改造的核心步骤,务必理解其原理。我们假设经过测量,HAY灯的驱动板接受一个0-3.3V的模拟电压(或PWM信号)来控制亮度。0V对应关灯,3.3V对应最亮。
- 寻找控制信号点 :在LED驱动板上,找到连接旋转开关的两个焊点(通常是三根线:电源、地、信号)。我们需要的是信号线。
- 断开原有信号线(可选但推荐) :为了确保智能控制的稳定性,最好将旋转开关的信号线从驱动板上焊下来。这样,旋转开关就与驱动板物理断开了。别担心,我们会用ESP8266来读取旋转开关的状态,从而实现手动控制功能的“回归”。
- ESP8266与驱动板的连接 :
- 将驱动板的“信号输入”引脚,通过一个1kΩ的电阻,连接到ESP8266的一个 GPIO引脚 (例如我们选用
D5,它对应GPIO14)。这个电阻起到限流和隔离作用,保护ESP8266的引脚。 - 将驱动板的“地”(GND),与ESP8266的
GND引脚相连。 - 重要 :确保驱动板和ESP8266使用 共地 ,这是所有电路正常工作的基础。
- 将驱动板的“信号输入”引脚,通过一个1kΩ的电阻,连接到ESP8266的一个 GPIO引脚 (例如我们选用
- ESP8266与旋转开关的连接 :
- 将旋转开关的信号线(刚才焊下来的那根),连接到ESP8266的另一个 GPIO引脚 (例如
D6,对应GPIO12),用于 读取 开关状态。 - 旋转开关的另一端(通常是电源端)需要连接一个参考电压。我们可以将其连接到ESP8266的
3.3V输出引脚。同时,在这个GPIO引脚(D6)和地(GND)之间
- 将旋转开关的信号线(刚才焊下来的那根),连接到ESP8266的另一个 GPIO引脚 (例如


384

被折叠的 条评论
为什么被折叠?



