墨水屏温度计:1年超长待机,蓝牙同步+趋势曲线

封面

1. 项目功能介绍

普通温湿度计只能实时读数,没法看温湿度变化趋势。带历史曲线的设备,大多需要持续插电,或是联网上传数据到云端。

本项目解决传统温湿度计无历史趋势、曲线设备需插电 / 联网痛点。基于墨水屏本地存储 30 天温湿度曲线,两节 7 号电池供电,蓝牙按需导出数据;待机电流 8µA,标称续航 1 年,实际可达 2~3 年。

2. 项目属性

本项目为首次公开的完全原创项目,未在其他赛事获奖,未在校内进行答辩。参赛提交为社区复刻版本。

3. 开源协议

4. 硬件部分

单芯片集成

主控选用 CH584F(RISC-V,78MHz,内置 BLE5.4),片上资源包含 504KB Flash(448KB 用户可用)、96KB SRAM。芯片统一完成墨水屏 SPI 驱动、I²C 传感器采集、电池电压 ADC 采样、RTC 定时唤醒与蓝牙通信;除传感器、屏幕外,核心外围仅需双晶振、DCDC 电感与射频匹配网络。

通过减少器件数量优化 BOM 成本与静态功耗,实现 8µA 待机,整机物料成本约 55 元。

支持量产硬件裁剪:无蓝牙版本可省外部晶振,改用内部时钟;也可移除 DCDC 电感切换线性供电,以功耗上升换取更低物料成本。

天线与射频匹配

2.4 GHz 天线按官方参考设计布局:正反面净空、馈线按 50 Ω 阻抗控制,馈点预留 PI 型匹配网络。

射频布板完成后,用矢量网络分析仪实测馈点阻抗,据此计算 PI 网络容感值并完成匹配(完整调试流程另成一篇)。BLE 需外部 32 MHz 高速晶振,低功耗采用片内 DCDC 加外接功率电感。

墨水屏驱动

选用 4.2 寸 400×300 墨水屏,搭载 SSD1619A 显示控制器,24Pin 上接触 FPC 连接器(注意:不可选用下接触版本,否则无法装配)。

屏幕通过 SPI 总线与主控通信。为保证信号完整性:SPI 时钟线串联 22Ω 源端匹配电阻;时钟、数据信号线采用包地布线,抑制高速信号过冲与串扰。

SPI_SCK串联22R 墨水屏驱动电路原理图 墨水屏驱动时钟线包地 屏幕驱动PCB

传感器热隔离与误差抑制

支持 AHT20 / SHT40 两种传感器硬件兼容。 板载热源发热、环境凝露均会造成温湿度测量偏差,从 PCB 布局到外壳结构做三层误差抑制设计:

  1. PCB 布局:传感器放置在板边,通过开槽切断 PCB 平面热传导;开槽位置保留少量连接筋维持板材强度,避免断裂。
  2. 铜皮处理:传感器区域不铺设连续铜皮,减少铜面蓄热,同时降低凝露附着概率。
  3. 外壳结构:传感器置于独立隔仓,侧边开设通气孔与外界空气连通;若有条件应增设第二通气孔形成自然对流,提升环境交换效率。

温湿度传感器原理图 温湿度传感器热隔离设计 结构内部

外壳结构与装配

01_零件全家福

零件全家福

图01:全套零件全家福

组装屏幕

图02:装配4.2寸墨水屏

叠加 PCB 托盘

图03:叠放PCB与内部托盘

安装橙色按钮

图05:装入橙色按键

安装 PCB 和电池

图06:装配PCB与7号电池

盖上盖子

图07:合上外壳上盖

组装完成

图08:整机装配完成

外盒结构未检测到干涉

图09:外壳结构仿真,无干涉

低功耗设计与续航

整机低功耗主要依托器件本身特性实现,未额外增加专用低功耗硬件电路。墨水屏在静态无刷新状态下功耗接近零,主控待机电流实测 8 µA。下表为各动作对应的功耗实测值;采样、刷新与蓝牙启停的软件调度策略详见后续软件章节。

动作 耗电
主控待机 8 µA
单次温湿度采样 0.3 µAh
墨水屏局部刷新 13 µAh
墨水屏全局刷新 16 µAh

基于上述实测功耗,搭配两节串联 7 号电池(满电 3.2V,容量 1000mAh)进行续航估算:保守标称续航 1 年,实际使用场景可达 2~3 年。

待补:低功耗分析仪实测电流截图。

5. 软件部分

内存规划与两级缓存

片上 RAM 共 96KiB,绘图与局部刷新基线缓存占用约 30KB;实测固件 RAM 占用 93164B,剩余仅约 5.1KB,Flash 占用 170KB/448KB。受限于存储容量,设计两级历史缓存:近 1 小时保留 1 分钟精度原始采样;每小时使用 LTTB 算法将原始数据压缩为 5 分钟粒度点,最多存储 30 天,存储空间满自动淘汰旧数据。相比全量存储压缩约 5 倍;LTTB 保留曲线拐点与极值,避免均值降采样抹平温湿度波动。

96 KiB 内存是怎么花掉的

60 个点压成 12 个,形状还在

TMOS 协作式操作系统与状态机

基于芯片配套 TMOS 协作式任务系统开发;任务由事件 / 定时器唤醒,无独立任务栈,RAM 占用低。协作内核禁止长时间阻塞主循环,约束单次任务时长上限<蓝牙连接间隔 1/2,为防止蓝牙断连和任务饿死,将耗时堵塞任务全部拆分为非阻塞状态机,每次主循环单步执行。

耗时操作 处理方式
温湿度采样 传感器转换等待分步推进,不阻塞主循环
墨水屏刷新 拆分为复位、等待 BUSY、DMA 分段传输、刷新、休眠五步状态
历史导出 8700 个数据点分多帧发送,支持进度上报、取消、超时保护

传感器采样

传感器驱动采用结构体 + 函数指针的抽象接口实现解耦(C 语言模拟面向对象思想)。每种传感器用结构体保存实例地址与状态;总线读写、延时逻辑不硬编码在驱动内部,通过回调函数外部注入。驱动仅依赖这套抽象接口,不绑定具体 I²C 总线实现与主控芯片。

typedef struct {
    void *context;
    void (*delay_ms)(void *context, uint32_t ms);
    int (*write)(void *context, uint8_t addr, const uint8_t *data, size_t len);
    int (*read)(void *context, uint8_t addr, uint8_t *data, size_t len);
} sht40_io_t;
typedef struct {
    const sht40_io_t *io;   // 总线从外部注入
    uint8_t address;
} sht40_t;
void SHT40_Init(sht40_t *sensor, const sht40_io_t *io, uint8_t address);
uint32_t SHT40_StartMeasurement(sht40_t *sensor);
uint32_t SHT40_FinishMeasurement(sht40_t *sensor, sht40_data_t *out);

运行阶段可注入软件 I²C 实现;主机单元测试时,替换为测试桩,驱动代码无需任何修改。固件开机自动探测传感器,当 AHT20 与 SHT40 同时存在时优先选用 SHT40;未识别到传感器时报错,不写入无效采样数据。周期采样交由 TMOS 调度系统非阻塞分步推进。

屏幕刷新

基于 4.2 寸 SSD1619A 墨水屏搭建分层显示架构,底层屏幕驱动搭配上层 U8G2 绘图;采用函数指针抽象 IO 接口,刷新逻辑拆分为非阻塞状态机。设备深度睡眠断电后墨水屏控制器丢失画面状态,依靠双缓存保存基线图像,唤醒时重灌基线再下发差分刷新,异常自动降级全刷,SSD1619A 驱动开源。

驱动已开源:https://github.com/createskyblue/ssd1619a-epd

刷新间隔随数据变老而拉长

棋盘测试

棋盘格刷新测试

抖动

图像抖动效果

4 阶灰度测试

4阶灰度显示测试

数据持久化

为保存激活码、设备配置等少量关键数据,自研轻量单块存储组件 FlashStore,避免引入键值库 / 文件系统带来的资源开销,组件已开源。

FlashStore FlashDB LittleFS
定位 单块可靠配置存储 键值数据库 文件系统
掉电保护 A/B 双页备份 事务日志 事务
适用场景 配置、密钥,低频写入 多键值独立更新 文件、日志、大数据

蓝牙通信与上位机

蓝牙通信采用三层协议栈,搭配 Web Bluetooth 网页上位机;蓝牙默认关闭,长按按键开启限时广播窗口,不阻塞主循环。

蓝牙排障经验

记录项目蓝牙调试过程中的典型问题与定位思路,单核 + TMOS 协作调度的约束决定所有业务必须拆分为非阻塞状态机。

现象 原因与排查
无法建立连接 先用官方蓝牙 Demo 验证硬件链路;蓝牙依赖外部 32MHz 晶振,内部 RC 时钟不可用
传输速率偏低 MTU 协商结果偏小,或是蓝牙连接间隔配置过大
随机断连、链路不稳定 大多是 TMOS 任务超时;采用二分法屏蔽任务定位故障点,通过定时器测量最坏执行时间,阻塞流程改造为状态机

核心约束:单核 MCU 搭配内置蓝牙协议栈必须使用 TMOS,不支持阻塞式任务,和多核 MCU 可隔离业务负载的方案不同。

历史数据导出

针对 30 天约 35KB 历史数据,采用 ChaCha20 加密传输,搭配类 MQTT QoS2 双向确认分包机制,保证蓝牙导出不丢包、不重复且数据安全。

加密与授权

激活码兼具功能解锁凭证与历史数据加密密钥双重作用,整套机制包含密钥派生、设备激活、加密传输三个环节,并明确安全边界。

低功耗调试流程

通过分步测量、IO 漏电排查与自动化测试完成低功耗调优;基于 TMOS 统一管理睡眠,在维持约 7µA 睡眠电流的同时保留完整 RAM 上下文。

6. BOM 清单

基于 30 套小批量打样核算单套均摊成本,同时分析成本构成与量产降本潜力。

项目 单套成本
PCB 打样 + 贴片物料 + SMT 加工(30 套合计 575 元:打样 71 + 物料 367 + 加工 137) 约 19.2 元
4.2 寸墨水屏 18 元
两节 7 号电池 + 电池卡簧 + 磁铁 8 元
3D 打印外壳 10 元
单套合计 约 55 元

7. 大赛LOGO验证

大赛LOGO验证_嘉立创电子设计大赛

8. 项目演示

待补:项目演示视频。