【硬件交互赛道】“芳莲” —— 硬件交互演示 demo

打个招呼

大家好,我是 Roy,一个习惯用「最小闭环」验证想法的独立开发者。之前用 TRAE 写过用户过万的小程序,也用 TRAE 做过一些小的 Demo 用于自己的工作流,但硬件烧录对我来说完全是空白的,也是我一直想尝试的领域。所以这一次 TRAE AI 创造力大赛,我想用 ESP32 单片机来做一些有意思的事,也尝试一下在软件之外,TRAE 对于硬件烧录以及跨端代码的支持度怎么样。

TRAE 在本次 demo 里有几个相较于传统软件开发不一样的地方

  1. 把模糊场景拆成接口:我说完故事,它直接帮我列出 POST /api/v1/events、GET /api/v1/today 这些 REST 接口,我不需要从零想命名;
  2. 跨端代码快速补齐:ESP32 固件、Next.js 后端、小程序页面、Web 后台可以并行推进,它帮我保持字段命名一致;
  3. 帮我跨过了 HTTPS 上报的坑:ESP32 对证书和请求格式比较敏感,TRAE 和我一起调了 WiFiClientSecure 的写法,省了我很多查文档的时间。

最让我觉得惊喜的还是 ESP32 第一次烧录之后开始正式上报“心跳”,一个连接线都没研究过,完全在 TRAE 的指导下一步步实现 硬件 - 服务端 - 数据库 - 微信小程序的互通,这件事自己琢磨可能要翻几天的文档和遇到无尽的报错,但在 TRAE 的帮助下,一切都迎刃而解。

Demo 简介

「芳莲」是一套面向独居老人的轻量居家安心系统,用轻量 IoT 传感器 + 微信小程序,让家属温柔地了解长辈今日是否安好。
demo 中演示的两个常见传感器自动记录用药、饮水与平安确认,家属在微信小程序里温柔地看见长辈今天事件状态。

硬件设备展示(demo 版)

TDengine 时序数据库

火山引擎后端

微信小程序

面向谁

核心用户:独居或与配偶同住的老人(尤其是不会使用智能手机等电子设备)。
查看者:远方的子女、孙辈或照护者(需要轻量级、低成本的传感器设备)。

主要功能

无感生活事件采集:药盒干簧管、水杯压力垫、床头平安按钮通过 ESP32 Hub 自动上报,老人不需要学新 App,照常生活即可。

微信小程序「芳莲」 :家属打开小程序就能看到:今日用药是否完成、饮水几次、平安确认是否完成,以及设备是否在线。

Web 管理后台:设备状态、事件时间线实时刷新,方便调试、演示和后期运营维护。

Demo 创作思路

项目叫「芳莲」,是我奶奶的名字。

这个项目想解决的问题,是独居长辈的日常平安确认。很多时候家里人只是想知道老人今天有没有正常活动、有没有吃药、有没有出门,但现实里经常只能靠打电话、发微信,或者在家里装摄像头。

我想到这个项目,是因为今年过年回家时,我看到我爸在给奶奶家里装摄像头。这个事情我能理解,因为奶奶年纪大了,也不太会用手机,有时候手机忘带了,或者出门了、睡着了,家里人联系不上就会很担心。但我自己心里其实有点不舒服,因为摄像头放在家里,对一个人来说多少有点像“被监控”。我可以给家里的猫装摄像头,但如果换成一个老人,我会觉得这件事应该更克制一点。

所以我想做一个更温和的硬件交互方案。它不依赖老人频繁操作手机,也不需要家属一直盯着摄像头看,而是通过一些很简单的动作来传递平安信息。比如拿起水杯、打开药盒、按下一键“我没事”、出门开门,这些都可以被传感器记录下来,再汇总成一个家属能看懂的状态。

同时可以根据传感器的特点进行自定义,比如磁吸传感器同时可以做药盒的开关以及门的开关检测,压力传感器可以用于杯垫或者坐垫等等

想解决的问题

独居老人家属的真实两难:

  1. 老人不会用智能手机,经常忘记充电,收集联系不上;
  2. 打电话怕打扰,有时候老人刚刚休息,又被电话吵醒;
  3. 是否按时吃药、是否出门,家属很难第一时间知道;
  4. 摄像头侵犯隐私:老人对视频监控心理抵触强。

为什么做这个方向

我的判断很简单:

场景真实:老龄化 + 独居是身边每个中年家庭都在面对的问题;
技术成熟:ESP32、压力传感器、干簧管都是低成本成熟模块,不需要自研硬件;
市场调研:市面上有相关的比如用药提醒的硬件,但只是单一模块;
闭环最短:三个传感器、一个 Hub、一个小程序,就能把"安心"这件事从物理世界传递到手机屏幕;
符合我的取舍:不追功能多,只追"家属看一眼就知道今天好不好"。

Demo 体验地址

由于芳莲是硬件交互 Demo,需要真实传感器和 ESP32 配合,线上无法直接体验完整闭环。因此我选择演示视频 + Web 后台可访问地址。

演示视频: 「芳莲」项目演示 demo

Web 后台:fanglian(ESP32 不会一直插电所以只做前端演示)

TRAE 实践过程

阶段 1:方案与架构设计(6 月 22 日)

核心目标:确定比赛 Demo 的最短闭环范围,输出可执行的开发计划与 Spec

Session ID:86228294965995:a76e38a69932df608ae18942132d641e_6a30200d0b1cafd9c1f49297.6a3941a340e00ff0b640be50.6a3941a3a397e94475cde35d:TRAE Work CN.0.1.29.no_sid.no_ppe.T(2026/6/22 22:07:31)



关键决策

  • 单 Hub 模型:ESP32 是唯一联网节点,传感器只通过 GPIO 接入。
  • P0 不做微信订阅消息、小爱音箱联动、PIR/门磁扩展,全部移到 P1/P2。
  • 数据模型:sensor_events 超级表以 hub_id/sensor_id/sensor_type 为 Tag。

阶段 2:数据库与后端基础接口(6 月 23 日)

Session ID:.86228294965995:97f8f631b22eb50ff8300b6cdeadb5c8_6a396410abaf04aeec0a4679.6a3966328446acf00f2a26ee.6a3966329733df3a4928478d:Trae CN.T(2026/6/23 00:43:30)

核心目标:搭建 TDengine 数据模型,实现设备认证、事件写入、用户登录。


关键决策

  • 事件写入使用 TDengine REST API(后续迁移到 WebSocket 客户端)。
  • 设备认证采用请求头 X-Hub-ID + X-Hub-Token,无 Token 返回 401。
  • 限流:每 hub 每秒最多 10 次请求。

阶段 3:固件与 TDengine 连接优化(6 月 24 日 – 6 月 27 日)

Session ID:.86228294965995:30a810325a6ceda894f3ba1e5943427a_6a396410abaf04aeec0a4679.6a3e92331c6912709c3d276b.6a3e923351b62ad86110e3b7:Trae CN.T(2026/6/26 22:52:35)

核心目标:完成 ESP32 固件,接入真实传感器逻辑;优化后端与 TDengine 的连接稳定性。








关键决策

  • Web 后台保持 Anthropic 温暖风格:米色大地色调、Lora + Poppins 字体、柔和阴影。
  • 固件从 config.h 读取配置,不在 platformio.ini 中硬编码,避免配置行为混乱。
  • FSR402B 采用 8 次滑动平均 + 200ms 稳定判断,ADC 阈值根据实际安装标定。
  • 根据 API_BASE_URL 协议自动选择 WiFiClient(http)或 WiFiClientSecure(https),避免 SSL 握手失败。

阶段 4:Web 后台页面与部署准备(6 月 27 日 – 6 月 28 日)

Session ID:.86228294965995:b9932fab00909d437ed7b8c393aa62e7_6a3e98bc1c6912709c3d285e.6a3fd54d1c6912709c3d2b7a.6a3fd54c51b62ad86110e3d6:Trae CN.T(2026/6/27 21:51:09)

核心目标:完成 Web 后台「设备状态」与「事件记录」页面,补齐部署配置。










关键决策

  • Web 后台使用 Next.js <Link> 自动携带 basePath /fanglian-admin
  • 开始规划「用户硬件绑定与无线化升级」Spec,但 Demo 阶段仍保持单 Hub 共享数据模型。

阶段 5:微信订阅消息与小程序收尾(7 月 5 日)

Session ID:.86228294965995:b3fe48cd61272742b1f90f3171a50d42_6a3e98bc1c6912709c3d285e.6a492fb95f26058e1ed9d7f7.6a492fb9ef1f8fd0035510b0:Trae CN.T(2026/7/5 00:07:21)

核心目标:新增一次性订阅消息能力,完善小程序页面。




关键决策

  • 订阅消息采用一次性订阅:小程序端 requestSubscribeMessage,后端按用户偏好发送。
  • 三个模板的关键词映射不同:medicine_opened 用 thing8/time2/thing3,safe_confirmed 用 thing1/time2/thing3,cup_lifted 用 time2/thing3。
  • 小程序轮询间隔从 3 秒调整为 10 秒,降低服务器与微信端压力。

踩过的坑

  1. 本来想省事接入蓝牙音箱作为通知设备,然后发现小米并没有开放接口;
  2. ESP 32 买大了,其实有更小的单片机,但 demo 也能凑活用;
  3. 小程序通知模板个人没办法自定义,总之个人小程序开发限制很多,项目立项前要了解清楚;
  4. ESP32 HTTPS 证书问题:一开始用 WiFiClientSecure 直接连域名会握手失败,TRAE 帮我改成根据 API_BASE_URL 自动选择 http/https,并整理了证书加载方式;
  5. 水杯压力误判:单纯阈值判断会抖动,后来加了 8 次滑动平均 + 200 ms 稳定判断,误报明显减少。

通过报名帖子链接