4.2寸墨水屏温度计:一年续航,30天历史,蓝牙同步
1. 项目概述针对传统温湿度计无历史趋势、带曲线设备需持续供电或联网上云的问题,本项目4.2寸磁吸墨水屏温度计:本地存储 30 天温湿度曲线,两节 7 号电池供电,蓝牙按需导出;待机电流 8µA,标称续航 1 年,按实测功耗外推 1 年 153 天(5 分钟刷屏)到 10 年 324 天(6 小时刷屏)。
- 单键交互:单击清残影、双击切换 12 档曲线区间、长按 3s 开启蓝牙;环境舒适度表情指示
- 30 天历史:近 24h 为 1 分钟 / 点,历史时段压缩为 5 分钟 / 点(可切换为 7 天全程 1 分钟)
- 蓝牙导出:浏览器查看实时数据、曲线缩放、CSV 导出
- 本项目为首次公开的完全原创项目,未在其他赛事获奖、未在校内答辩,参赛提交为社区复刻版本。
2. 开源协议
可复刻性说明:硬件工程、墨水屏驱动、通信协议与上位机四者已开源,社区可据此完整复现「点亮屏幕 → 采集温湿度 → 蓝牙导出 → 画曲线 → 导出 CSV」这条主链路。未开源部分仅限产品应用层(曲线压缩策略、界面绘制、功耗调度),且本文已对上述逻辑的运作机制、关键参数与设计取舍作出详细说明(见 §4 低功耗设计、§5.1 两级缓存与 LTTB 压缩、§5.2 TMOS 状态机拆分、§5.4 刷新与睡眠恢复),读者可依据文档自行实现等效功能,不影响核心功能复刻。
3. 硬件设计
3.1 单芯片集成主控选用 CH584F(RISC-V,78MHz,内置 BLE5.4),片上 504KB Flash(448KB 用户可用)、96KB SRAM。单芯片统一完成墨水屏 SPI 驱动、I²C 传感器采集、电池电压 ADC 采样、RTC 定时唤醒与蓝牙通信;除传感器、屏幕外,核心外围仅需双晶振、DCDC 电感与射频匹配网络。通过减少器件数量同时优化 BOM 成本与静态功耗,实现 8µA 待机。
支持量产硬件裁剪:无蓝牙版本可省外部晶振改用内部时钟;也可移除 DCDC 电感切换线性供电,以功耗上升换取更低物料成本。
选型逻辑:CH584F 集成 BLE5.4 + 大容量 Flash,单芯片完成全部功能,相比"MCU + 蓝牙模块"方案减少器件数量,简化 PCB 布局与焊接工序;内置 RTC 与低功耗模式实现 8µA 待机,为长续航提供硬件基础。
3.2 天线与射频板载天线及净空区按官方参考设计布局,馈点预留 PI 型匹配网络。开源版本使用 0Ω 电阻直连,未进行 VNA 阻抗匹配调试,可满足近距离数据导出场景;若需进一步优化通信距离或通过射频认证,需配合矢量网络分析仪(VNA)完成匹配网络调试,调整 PI 型网络参数。BLE 依赖外部 32MHz 高速晶振。
量产考量:当前版本为功能验证原型,若后续进入量产需完成:射频匹配优化、EMC 测试、跌落/防水测试、外壳注塑模具开发、供应链稳定性验证等工作。开源社区版本暂时止步于功能原型阶段。
3.3 墨水屏驱动选用 4.2 寸 400×300 墨水屏,搭载 SSD1619A 控制器,24Pin 上接触 FPC 连接器(下接触版本无法装配)。
SPI 信号完整性设计:
- SCK 串联 22Ω 源端匹配电阻:与芯片输出阻抗共同逼近走线特征阻抗,吸收末端反射能量,抑制过冲与振铃;
- 时钟与数据信号线包地布线:为回流提供紧邻低阻抗路径,并屏蔽相邻走线间的电场耦合。
上电后波形正常、屏幕无花屏,无需额外整改。
3.4 传感器热隔离与误差抑制硬件兼容 AHT30、SHT40 两款温湿度传感器。如果不做隔离处理会怎样? 板载热源(主控芯片)工作时发热,热量经 PCB 铜箔与内部空气传到传感器,使温度读数高于真实环境温度;环境凝露在传感器表面形成水膜,湿度测量直接失真;焊接时的热冲击让传感器内部水合层受损,未充分静置 48 小时恢复的话,湿度会暂时性偏低。
三层隔离方案从硬件到结构逐级阻断干扰源:
1. PCB 布局:传感器放置于板边,开槽切断平面热传导路径,同时保留少量连接筋维持机械强度;
2. 铜皮处理:传感器周边不铺连续铜皮,降低铜箔蓄热效应,同时减少凝露附着面积;
3. 外壳结构:传感器独立隔仓 + 侧边通气孔,让传感器直接接触外界空气而非机箱内部热空气。
注意事项:传感器焊接后需静置 48 小时等待水合层恢复,否则湿度读数会暂时偏低。
自热漂移实测:整机在稳定环境中静置 30 分钟,待读数基本无变化后开启蓝牙并保持与上位机连接(此时主控维持在 60MHz 以上高频运行,是整机最热的工况),持续观察温度读数无明显变化,即板载热源经三层隔离后未窜到传感器侧。
3.5 外壳结构3D 打印分层堆叠外壳(屏幕 / PCB 托盘 / 按键 / 电池 / 后盖),建模阶段完成装配仿真与干涉检查,完整 3D 模型随附件交付。
| | | | 图01:全套零件全家福 | 图02:装配4.2寸墨水屏 | 图03:叠放PCB与内部托盘 | | | | | 图04:装入橙色按键 | 图05:装配PCB与7号电池 | 图06:合上外壳上盖 | | |
| | 图07:整机装配完成 | 图08:外壳结构仿真,无干涉 |
|
4. 低功耗设计与续航整机低功耗依托器件本身特性实现,未增加专用低功耗电路:墨水屏静态功耗接近零,主控待机在 2.5V 下实测 7.33µA(功耗模型保守取 8µA)。刷屏与采样波形在 3.3V 下实测(两节新碱性电池实际最高约 3.2V,低于该测试电压)。同一颗芯片在 3.3V 下的功耗比 2.5V 略高,电池用到后期电压往下走,实测功耗还会更低;待机取 2.5V、刷屏与采样取 3.3V,两端都按偏保守的电压取值。
电池选型与放电截止:推荐使用紫米 7 号碱性电池(LR03 / ZI7),本文续航测算与外推均基于该型号;不同品牌碱性电池在内阻、自放电与低压段可放出容量上存在差异,会影响实际续航。整机硬件最低工作电压为 2.1V,软件在电池电压降至 2.2V 时即判定电量耗尽并停止刷新,中间留出 0.1V 余量,避免低压下墨水屏刷新异常或 Flash 写入出错;续航计算按放电至 2.2V 时的有效容量取值。
| | | 休眠电流实测波形(2.5V,7.33 µA) | 单次温湿度采样功耗波形(3.3V,23.2 nAh) | | | | 墨水屏局部刷新功耗波形(3.3V,5.78 µAh) | 墨水屏全局刷新功耗波形(3.3V,7.16 µAh) |
| 动作 | 实测值 | 模型取值 | | 主控待机 | 7.33 µA | 8 µA | | 单次温湿度采样 | 23.2 nAh | 25 nAh | | 墨水屏局部刷新 | 5.78 µAh | — | | 墨水屏全局刷新 | 7.16 µAh | — | | 平均单次刷屏(11 局刷 + 1 全刷) | 5.89 µAh | 5.9 µAh |
刷屏采用 11 次局部刷新 + 1 次全局刷新循环消残影,按实测值算单次平均刷屏功耗:
(5.78 × 11 + 7.16) ÷ 12 = 5.89 → 计算器取 5.9 µAh / 次
| | | | 5 分钟刷新间隔,续航 1 年 153 天 | 15 分钟刷新间隔,续航 3 年 163 天 | 6 小时刷新间隔,续航 10 年 324 天 |
4.1 主频随负载类型切换功耗还取决于 CPU 干活时跑多快。问题来了:提高主频能加速任务,但也会增加功耗;降低主频省电,但任务完成变慢。怎么平衡?
答案是按任务类型分档变频:画图这种 CPU 密集型任务拉满主频快速干完,刷屏这种 IO 等待任务降频省电,蓝牙通信时保持高频避免断连。CH584F 的 SYSCLK 可选档位从 13MHz 到 78MHz,本机只用两档:
- CPU 密集型任务拉到 62.4MHz:画图要扫历史点、按屏幕误差容限连线,30 天窗口得铺满 320 列像素,属于拿算力换时间;渲染期间提频,画完立刻回落;
- IO 密集型任务降到 13MHz:刷屏是 DMA 分段搬运加等待控制器 BUSY,CPU 大部分时间在空转,提频换不来速度,只会白白压着高频功耗;这一段跑 13MHz;
- 蓝牙在广播或连接时保持 62.4MHz:协议栈要靠主循环及时响应连接事件,阻塞几百毫秒就会触发监督超时断连,链路在跑的时候不降频。
升频与降频的时机分别放在渲染流程的首尾:进入画图步骤前升到 62.4MHz,EPD 作业提交后再由主循环依据蓝牙链路状态决定回落 13MHz 还是维持 62.4MHz。当前版本已在多种组合中选定策略(渲染 62.4MHz / 刷屏 13MHz / 蓝牙保持 62.4MHz)。同类取舍在 STM32L496 上做过 19 组时钟树实测,覆盖时钟来源与主频的组合,可对照参考:低功耗时钟树怎么选?19 组实测告诉你。
5. 软件设计
5.1 内存规划与两级缓存片上 RAM 96KiB,实测固件占用 84,608B(约 82.6KiB),栈堆余量约 13.4KiB;Flash 占用约 183/448KiB。内存不够怎么办?30 天 × 1440 点/天 = 43200 个数据点,全存下来要占用大量 RAM。
两级缓存策略:固定总点数 10080,两种颗粒度模式:
- 模式 1(默认):30 天,近 24h 保 1 分钟精度
- 最近区:1440 点 × 1 分钟,滑动窗口;存满后每次仅将最旧的 5 点用 LTTB 压成 1 个 5 分钟点,1 分钟粒度始终贴合"最近一天",不会整小时或整天一次性降精度;
- 长期区(24h 之前):5 分钟粒度 × 8640 点,写满淘汰最旧。
- 模式 2:7 天全程 1 分钟:10080 点,无压缩,写满淘汰最旧。
相比全程 1 分钟存储 30 天(需 43200 点),模式 1 压缩约 4.3 倍;LTTB(Largest Triangle Three Buckets)算法保留曲线拐点与极值,避免简单均值降采样抹平温湿度波动峰值。显示端去掉独立画面基线,仅留一块 15,200B 的 U8G2 帧缓冲,同时充当局部刷新的旧值。
5.2 TMOS 协作式调度与状态机基于芯片配套 TMOS 协作式任务系统:任务由事件 / 定时器唤醒,无独立任务栈,RAM 占用低。协作内核禁止长时间阻塞主循环,约束单次任务时长 < 蓝牙连接间隔的 1/2;所有耗时操作均拆分为非阻塞状态机,每次主循环单步执行,防止蓝牙断连与任务饿死。单核 MCU 搭配内置蓝牙协议栈必须使用 TMOS,不支持阻塞式任务。
| 耗时操作 | 处理方式 | | 温湿度采样 | 传感器转换等待分步推进,不阻塞主循环 | | 墨水屏刷新 | 拆分为复位、等待 BUSY、DMA 分段传输、刷新、休眠五步状态 | | 历史导出 | 分多帧发送,支持进度上报、取消、超时保护 |
5.3 硬件无关的驱动抽象传感器与屏幕驱动均采用结构体 + 函数指针的抽象接口解耦(C 语言模拟面向对象):实例地址与状态由结构体保存,总线读写、延时逻辑通过回调外部注入,驱动不绑定具体 I²C / SPI 实现与主控芯片。 - 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;
复制代码运行时可注入软件 I²C;主机单元测试时替换为测试桩即可,驱动无需修改。开机自动探测传感器,AHT30 与 SHT40 共存时优先 SHT40;未识别到传感器时报错,不写入无效数据。
5.4 墨水屏刷新与睡眠恢复底层 SSD1619A 驱动支持局部 / 全局 / 窗口刷新,上层 U8G2 绘图,提交前转换缓冲区格式;刷新状态机分步执行,刷新期间蓝牙与按键正常响应。按数据时效自适应调整刷新间隔,仅刷新变化区域,11 次局刷触发一次全刷消残影。
睡眠恢复(关键设计):深度睡眠断电后墨水屏控制器丢失片内画面缓存,若直接刷新会被强制全局刷新。设备在主控侧保存上一帧基线,唤醒时先将基线回送控制器当旧值,再下发差分局部刷新,异常自动降级全刷。
5.5 数据持久化激活码、设备配置等少量关键数据使用自研轻量组件 FlashStore,避免引入键值库 / 文件系统的开销:
- 极轻量:Cortex-M0、-Os 下约 500B Flash,0 静态 RAM,栈开销约 20B,零外部依赖;
- 掉电安全:A/B 双页备份依次写入,任意时刻断电至少保留一份完整数据,开机校验并自动修复损坏页;
- 易移植:仅需实现读、擦、写三个底层回调,逻辑页可跨多个物理扇区,不限制单块大小。
5.6 蓝牙通信与上位机蓝牙默认关闭,长按开启限时广播窗口,采用三层架构:
- 底层:自定义 GATT 服务实现 SPP 类虚拟串口(RX 写入、TX 通知);
- 中间层:TinyFrame 负责字节流帧解析与校验;
- 上层:自定义业务协议,路由实时读数、历史导出等指令。
长按开启 60 秒广播,连接后维持链路、断开重新计时、超时自动关闭;设备名 TH-Plot_<UID前2字节>。Web Bluetooth 上位机免安装,支持实时读数、曲线缩放平移、CSV 导出与激活码读写,实测吞吐约 15~60KB/s;设备设置同样在网页中完成:屏幕时间范围、历史颗粒度(30 天 / 5 分钟或 7 天 / 1 分钟,切换会清空已有历史)、温湿度变化立即刷新(默认关闭,开启后增加耗电)。
上位机为纯静态前端:零后端、零安装依赖(three.js 走 CDN),历史数据全部在浏览器本地解密处理,不上传、不留本地缓存。除上述功能外还提供:测试历史导入(本地预览 + 蓝牙写回,用于验证屏幕绘图)、12 档屏幕范围切换、远程软件复位、固件编译时间显示、设备外观 3D 预览与墨水屏刷新序列动画。
5.7 历史数据导出30 天约 40KB 历史数据采用 ChaCha20 加密传输,搭配双向确认分包机制,不丢包、不重复:
- 导出前告知总点数与时间跨度,数据拆小包有序推送并实时上报进度,上位机完整接收后回传确认才结束传输;
- 传输期间冻结历史写入防止边发边改,采样、显示、按键保持可用;
- 支持用户取消、断连、无进度等异常恢复,30 天数据一般数秒内导出完成。
5.8 加密与授权激活码兼具功能解锁凭证与历史数据解密密钥。设计加密机制主要用于配合一机一码激活,为后续商业化预留授权管理能力。机制包含密钥派生、设备激活、加密传输三个环节:
- 密钥派生:利用芯片唯一 UID、预置盐与填充,通过 ChaCha20 确定性派生一机一码密钥;UID 相关地址与常量不硬编码,改为多步运算动态获取,增加静态分析与逆向代价;
- 激活流程:上位机读取 UID,开发者离线算号,用户写入后设备校验匹配即解锁;激活码可回读用于上位机解密;
- 加密传输:每帧生成独立随机 nonce:ChaCha20 流密码严禁复用同一密钥 + nonce 组合,否则相同明文产生重复密文,存在密码分析风险;密文与 nonce 一并下发,无有效激活码无法解密历史数据。
安全边界:固件逆向可获取派生算法与盐,商业版本依靠芯片读保护与固件加密升级防护,开源测试版公开盐与算法仅供学习。
5.9 固件烧录使用 WCH_MCU_ProgramTool 烧录:系列设为 "CH581/4/5",使用 WCH-LinkE 烧录器并处于 WCH-LinkRV (RISC-V) 模式,选择附件中最新固件 .hex 后点击烧录。
6. BOM 与成本30 套小批量嘉立创打样核算,单套均摊约 52 元(打样含 PCB 制版、贴片加工综合费用):
| 项目 | 单套成本 | | PCB 打样 + 物料 + SMT 加工(30 套合计 575 元:打样 71 + 物料 367 + 加工 137) | 约 19.2 元 | | 4.2 寸 SSD1619A 墨水屏 | 18 元 | | 两节紫米 7 号电池 + 卡簧 + 磁铁 | 5 元 | | 3D 打印外壳 | 10 元 | | 小批量打样合计 | 约 52 元 |
说明:上表为嘉立创平台整套打样报价。拆分外购器件参考行情:主控 CH584F 约 3.5 元;SHT40 温湿度传感器约 4.4 元;FPC 连接器 0.33 元;SSD1619A 墨水屏全新货源约 24 元,瑕疵屏幕可低至 5 元;其余阻容等零散小件合计约 3 元。
打样阶段 SMT 制版、工程服务会带来额外均摊开销;实现大批量采购与拼板生产后,单板电子部分具备较大降本空间,因此期待对接具备量产能力的伙伴开展量产合作,优化整机成本。
成本主要来自外购器件(墨水屏约 18 元、传感器约 5 元),主控成本较低;小批量均摊偏高属打样特性。量产拼板后不含屏幕、传感器的电子单板可降至 10 元以内,外购件与基础加工费为成本底线。
7. 大赛LOGO验证
8. 项目演示
附件(可能非最新):
嘉立创开源地址:https://oshwhub.com/createskyblue/project_itmmifuv
3D结构拓竹社区开源地址:https://makerworld.com.cn/zh/mod ... i#profileId-3645676
build 13 October 2026 21:45 (UTC+8)
|