我的书桌上有个小东西,成本不到一杯咖啡钱,却让我半年没打开过音乐软件的桌面端。它不会说话,没有按钮,连触屏都没有——就一块8×32的LED点阵,轮流显示时间和正在播放的歌名。
这大概是我在ESP32(乐鑫科技推出的低成本Wi-Fi/蓝牙双模微控制器)上做过最"懒"的项目。懒到我自己都意外:以前做的智能家居,动不动就要调试自动化规则、修API变动、应付固件更新。这个时钟倒好,装完就再没碰过。
硬件简单到像乐高
四块MAX7219点阵模块串联,焊在ESP32开发板上,塞进自己画的3D打印外壳。总成本:ESP32约15元,点阵模块20元,打印耗材10元。供电靠一根Type-C线,数据走Wi-Fi。
固件用的是ESPHome,框架选ESP-IDF(乐鑫官方开发框架)。代码量?不到200行YAML配置。没有自定义C++,没有折腾FreeRTOS任务调度,就是把现成的组件拼起来:时间模块、显示模块、Wi-Fi模块。
功能也极简。两种显示模式:时钟,或者滚动文字。每20秒切换一次。就这些。
所有"智能"都扔给了Home Assistant(开源智能家居平台)。ESP32只管渲染——HA让它显示什么,它就显示什么。这种架构让我想起早期功能机:屏幕和键盘是终端,真正的计算在基站。
为什么复杂方案反而容易坏
我之前做过带触摸屏的ESP32项目。3.5寸TFT屏,LVGL图形库,自定义UI,能显示专辑封面、进度条、音量调节。做完那周我成就感爆棚,三个月后只想关机。
问题很典型:Spotify(流媒体音乐服务)的API变了,专辑封面URL格式改了;Home Assistant更新了媒体播放器实体结构;LVGL某个版本渲染中文有bug。每次修复都要重新编译、刷机、调试。触摸屏用久了还会漂移,校准麻烦。
那个项目现在躺在抽屉里。而这个LED时钟,从去年秋天到现在,固件一次没更新过。
秘密在于边界清晰。ESP32的YAML里只有显示逻辑,没有业务逻辑。它不"知道"Spotify是什么,不"理解"音乐播放状态,甚至不判断现在该显示时钟还是歌名——这些全是HA的自动化在管。
换句话说,设备端是纯粹的"哑终端"。HA推送一个字符串,它就滚动显示;HA切换模式实体,它就切到时钟。这种解耦让两边都能独立演化:HA端加新功能,不需要刷设备;设备端要改显示效果,不影响HA逻辑。
夜间模式的设计细节
有个功能我花了不少心思:自动亮度调节。不是简单的光感,而是基于时间的"夜间模式"——晚上11点自动熄屏,早上7点恢复。
但时间表本身也是HA里的实体。这意味着我可以直接在手机App里改,不用重新编译固件。出差时调晚一小时,周末想熬夜就临时关闭。
更小的细节:时钟的冒号会闪烁。每刷新一次,冒号亮灭切换。这个效果在代码里就是一行lambda: "return id(colon).toggle();",但让整块屏幕有了传统闹钟的呼吸感。
滚动文字的算法也取巧。HA推送的歌名可能很长,点阵只有32像素宽。ESPHome的scroll组件自带跑马灯效果,速度、间隔、方向都能调。我设的是从右向左,每秒6像素,间隔2秒——刚好能读完大部分歌名,又不至于等太久。
被低估的"只读"交互
智能家居圈有个执念:万物可控。语音控制、触屏控制、手机控制、自动化控制……控制手段越多,系统越"智能"。
这个时钟反着来:它只输出,不输入。你不能用它切歌、调音量、暂停播放。想看时间?抬头就行。想知道在放什么?等20秒,或者瞥一眼滚动的文字。
这种"只读"设计反而降低了认知负担。我以前用Spotify桌面端,总忍不住去点"猜你喜欢"、调均衡器、看歌手资料,一首歌没听完就跳了。现在歌名在视野边缘缓慢滚动,像背景里的白噪音——知道它在那,但不必回应。
有个意外收获:它治好了我的"切歌焦虑"。以前随机播放时,遇到不喜欢的歌会立刻跳过;现在得等20秒才能看到下一首是什么,懒得等,反而听完了更多歌。
半年零维护的代价
3月HA有一次大版本更新,媒体播放器实体的属性结构变了。我收到通知时正在开会,心想"完了,时钟要罢工"。
结果没事。因为我的自动化只读取media_title和media_artist两个字段,HA的变更没动到这部分。真正受影响的是专辑封面URL,而我本来就没用这个。
这就是"功能极简"的冗余优势。不用的功能不会坏,不依赖的接口不会变。
唯一一次"故障"是Wi-Fi路由器重启,设备离线了5分钟。ESPHome的看门狗机制自动重连,恢复后时间通过SNTP(简单网络时间协议)校准,歌名从HA重新拉取——全程无需干预。
对比我那个带屏项目:同样的路由器重启后,SSL证书验证失败,因为NTP没同步导致时间错误,证书有效期校验不通过,陷入死循环。最后得手动刷机解决。
为什么"不自动化"成了最好的自动化
这个项目的核心悖论在于:它越是"不智能",用起来越省心。
我见过太多ESP32项目死在"功能 creep"上。最初只是想显示温湿度,后来加了触屏调阈值,又加了历史曲线,再接入AI预测模型……半年后作者自己都不想维护了。
我的时钟从立项就划死边界:只做两件事,显示时间,显示歌名。任何需要交互的功能都砍掉,任何能放在HA端的逻辑都不往固件里塞。
这种克制有代价。它不能当闹钟,因为没扬声器;不能显示天气,因为没图标字体;不能提醒日程,因为没推送通道。但正是这些"不能",让它成了书桌上最可靠的存在。
有个类比可能合适:它像机械手表对比智能手表。后者能测血氧、回消息、导航,但每天充电、系统更新、App兼容性问题不断;前者只管走时,上链就能跑几十年。
我的LED时钟当然跑不了几十年,ESP32的Flash寿命约10万次写入,以现在的更新频率,够用到我换书桌。
现在它每天工作约16小时,滚动显示平均40首歌名。HA的自动化日志显示,过去180天里设备离线时间为0,自动化触发成功率99.7%——那0.3%是某次HA重启时的正常中断。
上周同事来家里,盯着看了半天问:"这玩意能交互吗?"我说不能。他又问:"那有什么用?"我想了想说:"让你忘记它的存在。"
这大概是消费电子的终极形态。不是功能最多的那个,而是你意识不到它在工作的那个。你的书桌上有什么东西,是装完就再没管过的?
热门跟贴