硬件之旅:打造 pikoAQI 原型机
· 10 分钟阅读
缘起
我一直想做个硬件项目,但说实话,我在硬件和电子领域完全是个小白。尽管如此,我还是决定动手,想着一边做一边学,毕竟现在有 AI 当外援嘛。
这个项目是做一个便携穿戴式的空气质量传感器。选它一来是因为我自己正好需要,二来难度刚刚好:现成的传感器很多,不用自己搞基础研发;但又不能说太简单,因为你得把一堆功能塞进一个小巧的外壳里,还得兼顾低功耗。
采购原型零件
刚开始,我把项目想法全盘托出给 Claude(也就是 AI),它帮我梳理了思路,还敲定了要用的电子元器件。
下面是我在电子元器件商城下的第一单:
| 元器件 | 描述 | 价格(不含税) |
|---|---|---|
| NodeMCU ESP32 | 核心微控制器板 | 11,92 € |
| 2.13 寸墨水屏 TF060 | 低功耗电子墨水屏 | 16,58 € |
| GPS 模块 TEL0094 | 定位追踪模块 | 15,50 € |
| 逻辑电平转换器 | 逻辑电平转换 | 3,29 € |
| 空气传感器 SDS011 | 空气质量传感器(PM2.5/PM10) | 29,12 € |
| 传感器 BME280 SKU27347 | 温湿度及气压传感器 | 10,42 € |
| 传感器 BME680 PIM357 | 带 VOC 检测的环境传感器 | 22,00 € |
选型理由
- ESP32:入门级但性能强劲的微控制器,自带 WiFi/蓝牙,体积小巧,算力也足以应付量产需求。
- 电子墨水屏:功耗极低。只在刷新时耗电,断电后画面依然保留。
- GPS 模块:提供基础的定位追踪功能。
- 空气质量传感器(SDS011):检测空气中的颗粒物(PM2.5、PM10)。
- BME280/BME680 传感器:测量温度、气压、湿度以及挥发性有机化合物(VOC)。
搞定墨水屏
我第一个开刀测试的就是墨水屏。买来的这块屏幕连份像样的技术文档都没有,只有一个 Arduino 的示例代码。我把代码丢给 Cursor 寻求解读,它还真帮我在自己的代码里把它跑通了。
这块屏幕是通过 SPI 通信的。ESP32 板子本来是有原生 SPI 实现的,但我怎么都调不通,所以最后还是用了文档示例里自定义的 SPI 代码。
墨水屏最大的痛点就是刷新率:太慢了,一次全屏刷新甚至得花上 2 秒。
屏幕有“局刷(局部刷新)”和“全刷(全局刷新)”两种模式。局刷因为不需要重绘整个屏幕,速度快不少。我利用局刷搞了个“快速”刷新模式:
- 局部刷新一块全白画面,把当前图像盖掉
- 局部刷新绘制新图像
这种做法偶尔会有残影,所以“快刷”模式只适合对残影不那么敏感的场景。
性能测试:
- 全局刷新:2 秒
- “快速”刷新:1.1 秒
经验总结
- 屏幕图像显示有不同模式(局刷 / 全刷)
- 墨水屏渲染内容确实慢
- 虽然这块屏幕能凑合用,但我应该能找到更便宜、响应更快的替代品
- 还是得查明白为什么原生 SPI 跟它不对付
调试 GPS
搞定 GPS 就轻松多了。Claude 懂怎么接线,文档里也直接给出了 TinyGPS++ 库。
GPS 芯片上的 LED 指示灯(POWER 和 PPS)简直是调试救星。第一次试的时候,因为线没接好,GPS 供电就不对。
起初我死活拿不到定位数据,一头雾水。后来才知道 GPS 得先同步卫星,第一次冷启动耗时很长(可能要 5 分钟以上)。我这边花的时间更久,估计是因为房间里信号太弱。
只要 GPS 定位成功,PPS 灯就会非常规律地一秒闪一次。这招太好用了,立马就能知道拿不到数据不是代码的锅:人家 GPS 只是还在寻星呢。
我买的这个 GPS 支持 10Hz 刷新率(普通模块通常是 1Hz),是专门给无人机用的。我压根用不上这么高的性能。我需要的是更强的信号接收能力(哪怕在室内)和更亲民的价格。下一个原型机我肯定换一款更合适的。
经验总结
- GPS 同步很耗时:冷启动得好几分钟,热启动也要 30 秒以上
- 我不需要 1 到 10Hz 的高频刷新,毕竟我不是在造飞机或者高速移动设备
- 我需要一个室内信号更好的 GPS
- 得找个体量更轻、性价比更高的平替方案
降伏 BME680(空气传感器)
跟这个传感器打交道可让我吃尽了苦头。Cursor 就算看了示例也写不出能用的代码。好在 Adafruit 专门为这块传感器开发了库,我就直接拿来用了。他们家给一堆传感器写过库,真的是宝藏团队。
这里的 VOC 传感器 需要校准,而且刚开机时数值会乱跳,得通电运行 48 小时后数据才靠谱。这就有点头疼了,因为做成产品的话,用户很难自己去校准。我得考虑搭配其他传感器来交叉验证数据。
经验总结
- VOC 传感器必须校准。我还拿不准怎么在用户端处理这事;也许最终我只拿它来监测数据波动趋势。
电池方案
我对比了锂聚合物电池(LiPo)和锂离子电池(Li-Ion)。LiPo 在外形上优势明显,像笔记本、手机这类对尺寸和重量要求极高的便携设备都在用。
但问题来了,市面上多数微型 LiPo 电池输出电压是 3.7V,而我用的 ESP32 板子要的是 5V。我当然可以加个升压模块,但那不仅增加了电路复杂度,还很损耗电能。
更别提电池本身就是个危险品:它们对物理损伤极度敏感,如果外壳破损、过热或者过度放电,LiPo 电芯甚至会起火。
综合考虑,我现在先用个普通的充电宝插 USB-C 线对付着。
经验总结
- 大多数微型 LiPo 电池输出都是 3.7V
- 捣鼓电池,安全规范和守则千万不能当儿戏
软件开发
这段时间我一直在折腾软件和数据同步。
我的设想是让 ESP32 充当蓝牙低功耗(BLE)服务端,然后在电脑上跑个客户端来拉取数据。
刚开始,我连代码都烧录不进微控制器,提示体积太大。查了半天才发现,默认的 BLE 库简直是个巨无霸,一口气吞掉了 75% 的可用闪存空间。我果断换成了 NimBLE 库。它体积小了一半,代价是不支持经典蓝牙,只支持 BLE。无所谓,反正我也没打算用经典蓝牙。
请继续关注,我还会带来更多 pikoAQI 穿戴式传感器的开发进展!