Normal view
派早报:面对批评,OpenAI 重新向 Plus 用户开放 4o 模型
云巅之上——六天五晚川西之旅(上)
曾经远在天边,如今近在眼前:用 Mac 解锁本地 AI 新可能
本周看什么 | 最近值得一看的 9 部作品
用树莓派手搓家用伪 NAS(上):系统的安装与配置
立秋给不了的凉意它给你:2025 空调选购指南
派早报:OpenAI 发布新一代旗舰模型 GPT-5、Google 推出异步 AI 编程工具 Jules 等
超越信息收集:从认知科学角度看笔记
记账 3000 多天,我迭代出了哪些小心得?
一日一技|一图两吃、加密通讯:如何将两种内容塞进一张图片
派早报:大疆正式发布扫拖一体机器人、OpenAI 推出两款开源模型等
从零开始,改造一张可以用 Siri 控制的升降桌
其实在两年前,我就已经根据我派作者 @EstrellaXD 的文章《HomeKit 智能升降桌是怎样炼成的》,自己搓出来了适合我 HomeKit 升降桌的控制模块,并试产了几块。当时实现的功能很简单,就是通过模拟升降桌控制器模块的按键操作来实现将升降桌接入 HomeKit,进而可以使用 iPhone 和 Siri 来操作。

这个方案一用就是三年。直到 25 年,我和伴侣搬进了 188 平的大豪斯,原本只需要承载我一个人需求的桌子,需要负担的事情也更多了。比如一起在我的世界养猫吃饭、码字、缝纫、做开发、化妆……总之,原本四个档位的高度设定对我来说是绰绰有余,但应对两个人的需求就不太够。
于是我又想起了升降桌智能化这事。我想,为什么不能有一个升降桌能让我多设定几个高度模式呢,或者可以让我们直接在手机或者键盘上输入数字,然后就自动升降到指定高度呢?
一开始,我想着能花点钱解决的事情,就别自己费尽心思去搞了。毕竟,前不久才刚做完一个大手术,自己没那个心力,同时自己尝试过开发硬件之后,便也知道了其中的重重困难。所以,我便在网上搜索「智能升降桌」,想着干脆买张新的好了。
事情当然不出意外地——出意外了。(要是没出意外你们现在也看不到这边文章了对吧。)在我搜索的过程中发现,如今很多升降桌的宣传虽然都加上了「智能」俩字,但某种程度上来讲,他们这个「智能」是基于传统「不可升降」桌子来定义的,而非智能家居时代里「能够接入家居平台」。
当然,我也很早就知道有品牌做出了支持米家的智能升降桌,但 3000 块左右的售价多少让我有点难堪——这么多钱,都够我俩去海南自驾旅行一周了。

行吧,既然没有厂家愿意做,愿意做的我买不起,那就还是只能自己上了。
折腾前的准备与忠告
这里先给大家一个重要提醒:请在早上或中午开始探索,千万不要在傍晚开始。因为除了刷机和打《文明 6》,这个点开始探索,你很容易就见到凌晨四点五点六点或者刚刚天亮的城市了。
想要完成这个项目,你需要准备一些工具和环境:
- ESP32 开发板,我选择的是 ESP32-C3;
- 面包板和若干杜邦线;
- 若干 LED,用来测试电平和查看状态等;
- 如果是方案二,还需要准备红外测距模块 VL53L0x 或 VL53L1x;
- 电烙铁、焊锡、万用表;
- 一套好用的螺丝刀,用来拆开升降桌控制模块;
- 一个 USB 转 UART 模块,可能需要用来刷固件或抓取 UART 数据;
- 一个支持第三方加载项的 Home Assistant 环境(用于安装 ESPHome);以及
- 一个具有探索精神,且懂一些编程基础的你。
目标与核心思路
在开始改造之前,得想明白自己要什么。前情里已经透露了核心的需求,但我又想着做都做了,不如做个完整功能的升降桌,把控制模块上所有的功能都给接入智能化控制好了。因此,现在的目标就比较明确:在不换升降桌控制器的前提下,实现——
- 输入高度数值后,升降桌调整到指定高度;
- 能设定超过四个高度模式;
- 将所有升降桌的物理按键都变成可用手机或语音控制的按钮;
- 接入 Home Assistant,进而可以桥接到 HomeKit,或者通过 Matter 接入各种平台。
有了目标,就可以思考改造的思路了。
过去,我根据 @EstrellaXD 所写文章而制作的控制模块里,只是单纯模拟了升降桌按下高度档位的物理按钮来实现 HomeKit 控制。但要实现上面的目标,最核心的问题就是如何获取升降桌当前的高度,否则后面的功能全都无从谈起。
拿到了关键的升降桌高度数据之后,还要让升降桌可以和 Home Assistant 交互:将升降桌数据传入 Home Assistant 实现展示,并通过 Home Assistant 发出控制指令来对升降桌高度进行操作。
这样看来,总体的实现逻辑并不难,只要攻破这两个核心难点,问题就被解决了。
方案一:基于 Upsy Desky 的协议破解
市面上许多升降桌都是通过一根网线来连接升降桌控制盒和控制面板的。如果我们能逆向拿到控制面板和控制盒之间的沟通数据,便可以直接在中间接入一个无线控制模块,来实现读取高度数据并接入智能家居平台。基于这个原理,我很快就在摸索的过程中发现了一个项目:Upsy Desky。
看到这个项目的时候,我有种「哇原来人家早就在这里等着我了」的感觉,感叹现在互联网和开源社区真是越来越厉害了。我迫不及待地下载了 Upsy Desky 项目提供的源文件,打开了里面的电路图和 PCB,发现 Upsy Desky 的思路与我是完全一致了。
根据 Upsy Desky 提供的项目介绍文档和电路图,我了解到,许多升降桌的控制盒与控制面板都会通过 UART 协议来传输数据,只要在中间插入一个支持 UART 协议和能够接入 Home Assistant 的芯片,就能够实现所有的功能。
从电路图里可以看出,Upsy Desky 的核心就是一块 ESP32-WROOM-32 芯片。它是乐鑫科技推出的一款通用型 Wi-Fi 和蓝牙模块。

明白了原理之后,我便开始尝试将这个方案应用到我的桌子上。我选择了更新的 ESP32-C3 芯片,因为它内置了 USB 接口,刷写固件更方便,可以节省一个 USB 转 UART 模块。
ESPHome 介绍与安装
给 ESP32 编译固件用的是 ESPHome。ESPHome 是一个 Home Assistant 的官方加载项,可以让我们简单快速地为 ESP 系列芯片创建自定义固件。简单来说,步骤如下:
- 在 Home Assistant 里,一键安装官方加载项商店里的 ESPHome;
- 启动它,新建一个项目,选择对应的芯片;
- 将作者提供的 Upsy Desky YAML 代码复制进去;
- 修改适配 ESP32-C3 的部分;
- 将 ESP32-C3 用 USB 连接到 Home Assistant 的运行主机上;
- 保存,等待 ESPHome 自动编译固件和刷写。
要在 Home Assistant 里安装 ESPHome 也很简单,但前提是你运行的 Home Assistant 设置里有「加载项商店」这个选项(使用 Home Assistant OS 或 Supervised 安装方式即可,Docker 版较为复杂)。进入加载项商店里就能看到它,一键安装就行了。

Upsy Desky 固件导入及源代码解读
在 Upsy Desky 的 GitHub 里,作者已经提供了编译好的 bin 固件和源代码。如果和作者采用同款硬件,直接刷入他提供的固件即可。但由于我已经换了 ESP32-C3 作为主控芯片,就得自己编译一个适合 ESP32-C3 的固件。
将 Upsy Desky 的源代码从 GitHub 下载好之后,里面的 firmware
文件夹存放的就是固件源码。先将里面的 addons
文件夹整个复制到 Home Assistant 的 config/esphom
e 文件夹里(可通过 Samba 或 File Editor 插件访问),然后再将里面的 base.yaml
也复制过来。
现在回到 Home Assistant 里刷新一下 ESPHome,就能看到被导入的 Upsy Desky 源码 YAML 文件了。现在,我们就可以来修改这里面的代码,让它适配 ESP32-C3。
第一步,修改芯片和框架类型:
esp32:
board: esp32-c3-devkitm-1
framework:
type: esp-idf
接着,是定义合适的 GPIO 引脚。这一步至关重要,直接关系到后续能否成功。由于 ESP32-WROOM-32 和 ESP32-C3 的 GPIO 引脚不一致,你需要根据你购买的开发板的引脚图(Pinout Diagram),重新定义要使用的 GPIO 引脚。只要避开图中标记为特殊用途的引脚,一般都可以使用。

最后,添加 Wi-Fi 连接信息。建议使用 AP 热点模式,这样首次刷机后可以用手机连接设备创建的 Wi-Fi 来进行网络配置,避免密码输错导致无法联网。
wifi:
# ... (省略 ssid 和 password)
# 开启通过 ap 热点设定 Wi-Fi
ap:
ssid: "Upsy-Desky-Setup"
password: "12345678"
当所有的代码修改完成后,将 ESP32-C3 开发板用 USB 线连接到 Home Assistant 主机,然后点击 ESPHome 右上角的 INSTALL,选择 Plug into the computer running ESPHome...,再找到你连接的 USB 设备,ESPHome 就会开始编译固件并自动刷写了。

Upsy Desky 的局限性
一言以蔽之,Upsy Desky 方案并不支持我的升降桌类型。如果你的桌子恰好在官方兼容列表中,那么可以无痛使用。否则,就需要具备逆向工程的能力去分析和适配你桌子的 UART 数据,这对我来说难度过高。

方案二:外部传感器(激光测距)
在方案一卡住后,一次偶然的下厨经历给了我灵感:既然无法从桌子「内部」读取高度,为何不从「外部」直接测量呢?
这便引出了我们的最终方案:在桌板底部安装一个激光测距传感器,测量桌板到地面的实时高度。这个高度数据通过 ESP 芯片发送给 Home Assistant。同时,ESP 芯片的 GPIO 引脚连接到升降桌的物理按键上,通过程序模拟按键点击,从而实现精确控制。
这个方案的额外好处是数据更准确。比如我给桌子加装了轮子后,桌子整体抬高了几厘米,传感器能测出真实高度,而桌子内置的高度显示则不会改变。
芯片及传感器选型
芯片我决定继续沿用 ESP32-C3。至于距离传感器,经过一番研究,我锁定了两款 ToF 红外距离传感器:VL53L0x 和它的「进阶款」 VL53L1x。其中——
[......]
查看全文本文为会员文章,出自《单篇文章》,订阅后可阅读全文。