将一台‘傻瓜式’空调变智能(同时不损失我的押金)
摘要
一位软件工程师记录了如何使用ESP32、步进电机和Home Assistant,通过MQTT将出租公寓的模拟空调的‘傻瓜式’旋钮变成智能控制。
暂无内容
查看缓存全文
缓存时间: 2026/07/29 21:57
# 把一台“智障”空调变智能(还不损失押金)
**太长不看:**用步进电机、ESP32 和一颗容忍“凑合”的心,DIY 家庭自动化其实很简单。
---
我租的公寓空调只能用这种复古的**模拟旋钮**控制,直接装在空调上。没有墙上独立温控器,没有遥控……啥高级功能都没有。
这些旋钮能用……但总得站起来去拧,很快就烦了。
幸好,Prilik 家有句老话:“记住儿子,生活中最难的问题通常靠一个步进电机、一个 ESP32 和梦想就能解决”¹
果然,花了大概 15 美元买零件,等从中国发货,再花几个小时迭代硬件和固件……我就拼凑出了这堆美丽的玩意:
你看到的是一个**ESP32 控制的步进电机**,通过**联轴器**连到空调的一个旋钮上,再用一个**便宜的 L 型支架**和**活页夹**(外加工业级的**纸板衬垫**)固定在空调背板上。
这整个 MacGyver 式的装置通过 **MQTT** 与我的 **Home Assistant** 实例通信,根据同房间温度传感器的状态开关空调。
瞧,变魔术啦 🪄 ✨
就这样——我再也不用从沙发上爬起来去调空调了!
> 各位专业的嵌入式或机电工程师:我*强烈*建议你们就读到这里。这篇博文剩余部分是一个*软件*工程师做家庭自动化和自制硬件的记录,实话实说:最终成品*和*实现过程都*巨凑合*。不过……如果你不介意凑合:那就读下去,跟我一起看看我是怎么几乎零预算、零经验拼凑出全定制的家庭自动化硬件的。
## 🗽 背景介绍⌗
2025 年 4 月,我搬到了纽约市。短暂找房后,找到了一个挺满意的地方:位置方便,楼比较新,租金也超值。没什么好抱怨的!
……除了空调的问题。
你看,纽约的开发商不知道为什么*特别*喜欢用这种噪音大、耗电高、挂墙式的 **PTAC 单元**。有些楼会多花点钱把空调接到墙上温控器……但通常他们选最便宜的方式:完全**模拟的、装在空调上的旋钮**。
这就是我说的那种:
是啊——猜猜*我的*楼选了哪种 🙃
## 🤔 我有什么选择?⌗
像任何好租客一样,我首先礼貌地问房东能不能“升级”一下控制方式……现代点的。不出所料,回答大概是“哈哈不行,为啥要换?”,公平地说,这本来就是我预料的回应。
好吧,没关系,像任何好工程师一样——*肯定*有办法从这困境中 hack 出来?
折腾一番后,我成功拆下了空调盖,露出了它的软腹部/内部结构。让我吃惊的是,不仅找到了空调的一些信息,还找到了完整的接线图!
我不算看图专家,但顺着线路看,整个电路似乎都工作在**电源电压**级别,看不到任何我能接入的低压数字信号。
## ⏺️ 智能继电器?⌗
好吧,也许我可以在某个地方串个**智能继电器**?我不是电工,但这应该没那么难,对吧?
嗯,也许吧?
但老实说,我觉得这条路行不通。
先不说处理电源电压和暖通设备对一个毫无接线经验的人来说有点“吓人”(而且房东大概也不乐意我动这些东西),更大的问题是所有我想截获的“好”线都塞在空调**深处**。
据我所知,要碰到那些线就只能把整个空调从墙上拽出来……我可不想干这种事。2017 年的[这个帖子](https://www.doityourself.com/forum/air-conditioning-cooling-systems/577337-older-ice-cap-ptac-add-thermostat.html)也印证了我的感觉:这比它值当的麻烦多多了。
那……怎么办?
## 🔌 智能插座?⌗
好吧,有个主意:我用**智能插座**直接切断空调电源,行不行?
> 注意:网上很快有人警告我,给运行中的空调断电可能损坏设备,尤其是出问题导致快速开关机。虽然我不专业……但为了科学(也因为我有点固执),我还是继续研究这个选项。
可惜,令我懊恼的是——空调插头是那种特殊的 NEMA 5-20P 插头,基本找不到对应的智能开关!
靠!
如果接线不行,用智能插座也不简单……那我就没辙了?
当然不是!
显然该戴上我的工程帽,**凑合**出一个方案:不如做个机器人帮我转旋钮?
## 🎛️ *旋*出正确方法⌗
看看空调,有两个旋钮:
1. **模式控制:** 一个很紧的离散旋钮,在 6 个模式间咔嗒切换(关、低冷、高冷²、送风、排风、加热)
2. **温度控制:** 一个平滑的模拟旋钮,连着简单的双金属片温控器
幸运的是——两个塑料旋钮都能直接拔下来,露出一个不算太难的轴,可以用机械方式连接:
这样我就有两个选项来开关空调:
**选项 1:** 接入**模式控制**旋钮
- 把温度控制旋钮拧到“最冷”
- 买个扭矩足够克服旋钮阻力的步进电机——可能得用 12V DC(甚至更高)电源,需要额外电路供电——还需要更结实的固定件来抵消扭矩,确保步进电机位置不动
- 精确校准步进电机,让旋钮在“关”和“冷”之间转正确的角度
**选项 2:** 接入**温度控制**旋钮
- 把模式控制旋钮留在“低冷”³
- 买个便宜、低扭矩、低功率的步进电机,*刚够*转动这个比较松的旋钮——由于扭矩很小,不需要多少固定件来保持位置
- 不精确地把步进电机拧到最左/最右,把目标温度在“非常非常热”和“非常非常冷”之间切换
你应该猜到我选了哪个 🥰
> 选项 2 显然是两者中“更凑合”的,因为它依赖目标温度这个间接属性来开关空调……但嘿,怎么省事怎么来,对吧?
## 🔨 走向 V0⌗
我*基本*确定这会行得通,但显然,唯一验证方法就是拼凑一个概念证明(最好花最少的钱)。
长话短说——这是我 V0 的方案:
| 零件 | 成本 | 来源 |
|------|------|------|
| ESP32 开发板 | $6 | [Amazon](https://www.amazon.com/dp/B0DDPJQX3X) |
| 联轴器 | $6.69 | [Amazon](https://www.amazon.com/dp/B0D4YBM6HB) |
| 步进电机+驱动板 | $2.66($8/3个) | [Amazon](https://www.amazon.com/dp/B0BG4ZCFLQ) |
| L 型支架 | 免费 | 宜家 LAIVA 书架剩下的零件 |
| 螺丝 | 免费 | 显示器支架剩下的 |
| USB 线+充电器 | 免费 | 旧抽屉里翻出来的 |
| **总计:** | **~$16** | |
这是结果:
*(面包板和其他硬件在画面外)*
因为不能往空调外壳上拧螺丝(记住:押金!),我只能想办法。我翻了几个宜家 LAIVA 书架剩下的金属 L 型支架,还有显示器 VESA 支架的备用螺丝。
把它们拧到步进电机上,让电机组件物理上变“宽”。电机旋转时,支架会碰到控制腔的后墙,抵抗扭矩,把旋转能量传到联轴器上转动旋钮。真是**无心插柳**的巧妙设计!
> 旁注:我略过了中间几步才达成这个设计:
> - 第一次(第二次、第三次……)联轴器买错了,退了几次亚马逊才找到合适的。
> - 买 ESP32 开发板之前,我先用手头一个(非常非常老的)Arduino Leonardo 验证了步进电机+联轴器能工作,通过串口手动控制(用一根很长的 USB 线连到电脑)。
> - 第一次固定尝试用了木签、胶棒和裁过的亚马逊纸箱……失败透顶。
当然,光有硬件没有软件怎么行?
### 💻 写固件⌗
固件**超级简单**:连接 Wi-Fi,托管本地网页服务器,监听 HTTP/MQTT 命令来转动电机。
虽然我有点怀念过去花几个周末拼凑一次性固件的好日子……但说实话,我很高兴大语言模型能一口气写出这类项目的代码。我用 Claude 和 Gemini 的组合,它们干得“完全 OK”地拼凑出了能用的东西。
它还生成了一个简单的 Web UI,让我配置 Wi-Fi 密码和动态调整设置:
[代码在这里](https://gist.github.com/daniel5151/2d9950a27119e7e481db4446f2abcf13),但说实话——没什么意思。
## 🏠 用 Home Assistant 让它有用⌗
刷好固件、硬件凑合着装好后,我决定试试这玩意:舒服地坐在沙发上,用手机打开 Web UI,按下按钮转动电机。
跟你说——看到空调自己开关,而我还赖在沙发上?
绝对电影级体验。
不过,从 Web UI 控制虽然酷……要真正有用,还得集成到 Home Assistant。
如果你不熟悉,[Home Assistant](https://www.home-assistant.io/) 是一个开源家庭自动化平台,作为所有智能设备的本地大脑。它非常棒,如果你做任何稍微复杂的智能家居,**绝对**应该装上它。
### 第一步:把步进电机暴露为 MQTT Cover⌗
我没有写自定义 API 集成脚本,而是利用了 Home Assistant 对 **MQTT Discovery** 的优秀支持。
> 如果你不熟悉 MQTT,可以把它想象为一个超轻量的发布/订阅消息协议,专为资源受限的物联网设备设计。设备可以“发布”消息到特定路径(称为主题,比如 `living_room/ac/state`),其他设备(如 Home Assistant)可以“订阅”这些主题来监听更新或发送命令。
如果你配置一个设备向标准发现主题(例如 `homeassistant/cover/ac_stepper_cover/config`)发布特定的配置 JSON 负载,Home Assistant 将**自动**发现该设备并配置所有实体、传感器和控制器——完全不需要你写一行 YAML 配置!
对于这种旋钮控制器,我决定将其暴露为 [MQTT Cover](https://www.home-assistant.io/integrations/cover.mqtt/) 集成。虽然“cover”通常用于窗帘、电动卷帘或车库门……但其模式支持打开、关闭、停止,正好映射我们的旋转旋钮。
ESP32 启动时,自动连接 MQTT 代理并发送这个发现 JSON 负载:
```json
{
"name": "AC Stepper Cover",
"unique_id": "ac_stepper_esp32_01",
"object_id": "ac_stepper_cover",
"command_topic": "homeassistant/cover/ac_stepper_cover/set",
"state_topic": "homeassistant/cover/ac_stepper_cover/state",
"position_topic": "homeassistant/cover/ac_stepper_cover/position",
"set_position_topic": "homeassistant/cover/ac_stepper_cover/position/set",
"payload_open": "OPEN",
"payload_close": "CLOSE",
"payload_stop": "STOP",
"device_class": "damper",
"device": {
"identifiers": "ac_stepper_esp32",
"name": "AC Control Stepper"
}
}
```
Home Assistant 注册了 cover 后,监听 UI 上的用户交互,并向 `command_topic` 发布相应命令。ESP32 上的 MQTT 回调解析消息并驱动步进电机:
```cpp
void mqttCallback(char* topic, byte* payload, unsigned int length) {
String message = extractMessageFromPayload(payload, length);
if (String(topic) == COMMAND_TOPIC) {
handleCoverCommand(message);
}
}
void handleCoverCommand(const String& command) {
if (command == "OPEN") {
motorState.isOpening = true;
moveMotor(STEPS_PER_REVOLUTION, motorState.currentSpeed);
} else if (command == "CLOSE") {
motorState.isOpening = false;
moveMotor(-STEPS_PER_REVOLUTION, motorState.currentSpeed);
} else if (command == "STOP") {
stopMotor();
}
}
```
发送 `OPEN` 负载使步进电机向前旋转一整圈,把旋钮转到“最冷”,而 `CLOSE` 向后旋转步进电机关闭空调。
就这样——Home Assistant 就能控制电机了!
### 第二步:添加温控器⌗
旋钮可通过 Home Assistant 控制后,最后一步是告诉它**何时**开关。
幸运的是,Home Assistant 有一个内置集成叫 [Generic Thermostat](https://www.home-assistant.io/integrations/generic_thermostat/)。它超级简单——指向一个要切换的 switch/cover,加上一个要监测的温度传感器,它就会帮你处理所有滞后逻辑!
温度传感器我用的是 [AirGradient ONE](https://www.airgradient.com/indoor/),一个高质量的智能空气质量监测器,刚好也放在空调那个房间。
把两者连起来只需在我的 `configuration.yaml` 里加上这个:
```yaml
climate:
- platform: generic_thermostat
name: Living Ro
```
(注意:原文在这里截断,但翻译应保持原文内容。下面可能是继续的 YAML 配置,但原文未提供完整。我们按现有内容翻译。)
米
相似文章
一款由iroh驱动的智能风扇
本文演示了如何使用ESP32微控制器和iroh网络库构建智能风扇,实现无需云服务的点对点控制。
破解我的云控吊扇的射频遥控
一位开发者对Dreo云控吊扇的射频遥控器进行逆向工程,以实现通过Home Assistant的本地控制,从而绕过云依赖,并记录了解码和重放命令的过程。
1907年老宅智能化的精妙艺术
作者讲述了如何用Ecobee恒温器和自动化照明等智能设备升级他们建于1907年的历史悠久的工匠风格住宅,既追求现代化又不损害房屋的复古魅力。
AI 在家(第一部分):一箱零碎
作者分享了一个 DIY 项目,利用廉价的二手服务器 GPU 和旧 PC 零件搭建一个经济实惠的家庭 AI 设备,以避免使用云服务。
Show HN:我用1600美元的ESP32替换了价值12万美元的保龄球中心系统
一位开发者用ESP32微控制器构建了一个低成本替代方案,取代了价值12万美元的保龄球中心计分系统,总花费仅1600美元。