thibault.sh
← 博客

硬件之旅:打造 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 秒。

屏幕有“局刷(局部刷新)”和“全刷(全局刷新)”两种模式。局刷因为不需要重绘整个屏幕,速度快不少。我利用局刷搞了个“快速”刷新模式:

  1. 局部刷新一块全白画面,把当前图像盖掉
  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 穿戴式传感器的开发进展!