如何搭建一个太阳能驱动的物联网项目
我认为开发离网物联网产品最棘手的部分,可能是电源问题。电源的选型绝非小事。处理老旧的锂聚合物电池让我几乎想放弃(而且不是在派对上那种方式)。如果要在设备外壳中尽可能节省空间,集成备用或替代电源(例如一系列锂电池)也未必容易。
不过,为了解决这个问题,你总可以尝试加装太阳能板。只要安装合适尺寸的太阳能板来为电池充电,所有问题瞬间迎刃而解!好吧,它能工作一周,然后某个下午突然停止上报,你完全不知道原因是什么。
是太阳能板出了问题?是不是被遮挡了?还是电池耗尽了?又或者调制解调器在会话中途发生掉电,导致一切数据丢失?你有一个密封的杆式外壳,但数据却中断了,而这个中断就是唯一可用的“证据”。
关于这个话题,我最近写了一篇博客,讲的是如何设计物联网设备,使其在电量不足时能优雅地降级而非彻底关闭。而这个Hackster项目,正是我将嘴里的承诺付诸行动(甚至多付了一些)。没错,这是一款不怎么出彩的环境传感器,它会测量功耗,当电池电量下降时自动降低报告频率,并且从不沉默,也从不说明原因。
那么,接下来我要说些什么呢?这里就有点意思了:
我特意用了一个旧的锂聚合物电池,让它几乎立刻开始失效。
为什么?因为搭建一个太阳能驱动的环境物联网项目本身并不特别有趣。真正有趣的是数据上传到云端之后会发生什么——当我不再手动分析数据,而是直接通过我最喜爱的人工智能代理询问设备出了什么问题时。
实际问题
选择任何一个远程物联网部署项目,调试过程不可避免地会变成一场麻烦。低功耗的故障排查尤其艰难,因为能告诉你发生了什么的设备,同时也是停止通信的设备!
因此,这个项目的最终目标从来不是“构建一个环境监测器”,而是包含以下几点:
1)测量典型物联网部署中的真实能耗。
2)避免因断网而崩溃,降低蜂窝数据同步速度。
3)让整个项目都能通过人工智能代理进行查询。
其中第三点最为关键,我们将在后面详细讨论。
硬件部分
让我列出本次环境传感器原型所使用的全部硬件:
•Blues Notecard(NOTE-MBGLN):低功耗蜂窝连接模块
•Notecarrier A:Lipo 和太阳能 JST 输入接口,带内置充电器
•Blues Cygnet:STM32L433 主控MCU,小巧、廉价、低功耗
•Blue Mojo:内联库仑计数器
•BME280:温度、湿度、压力传感器
•BMA400:超低功耗加速度计(运动、冲击、方向检测)
•一块老旧的悲伤锂聚合物电池:主要电源
•一块6V级太阳能板:通过Notecarrier A系列SOLAR JST为锂电池充电
•RAK Solar Unify外壳:尺寸适中的外壳,内置上述太阳能板
初次接触Blue?Blue Notecard是一种系统级模块,可为您的项目提供蜂窝网络(或卫星、LoRa、WiFi)连接。无需SIM卡,也无月费。您可通过I2C或串口发送JSON请求与之通信,设备在5V电压下空闲时功耗约为8–18 µA。它会本地缓存您的数据,并根据您设定的时间表同步至Notehub——Blue云服务。剧透预警:Notehub IQ是本项目的核心,它是一个智能层,能够通过MCP服务器以通俗语言查询所有数据。这正是我们今天要迈向的方向……
固件
我将坦率地说明固件的构建方式,因为这在项目中至关重要——该项目最终由AI读取结果。我是个极其懒惰的人,固件是使用Blues Expert MCP开发出来的。
请注意,完整的构建说明、库版本和接线表都包含在固件的README文件中。
两个Notefile,两种紧急情况
如果你刚接触Notecard,那么Notefile就是存储在Notecard本身上的命名JSON事件队列(文件名中的.qo后缀表示“出站队列”),你可以根据项目需要创建任意数量的此类文件。
在这个项目中,我的常规传感器读数会写入environment.qo:
以JSON格式(在Notehub中)来看,内容大致如下:
主机MCU(基于STM32的Blues Cygnet)每15分钟采样一次读数,然后Notecard每120分钟上传一次到云端。
BMA400产生的运动、冲击和姿态事件会被保存到另一个名为motion.qo的Notefile中,并在检测到时立即保存(而不是按采样频率)。然而,这些更新是否触发带外同步,是固件中一个独立的电压门控决策问题:如果电池电量充足,则立即同步;否则则等待。
两个Notefiles都使用了Notefile模板,使得每条Note的environment.qo文件大小约为86字节,motion.qo文件大小为56字节!
进入休眠状态的主机
在采样之间,基于STM32的Cygnet会通过调用LowPower.deepSleep()进入“STM32 Stop 2”模式。这是最深的休眠模式,可保留SRAM并保持原地恢复运行。如果直接关机,虽然功耗更低,但系统将从复位重启,并丢失我们希望保留的状态。
Qwiic(I2C)总线在休眠期间仍会被有意保持供电。如果切断电源,Mojo的积分计数器将被重置,BMA400也将无法检测到运动。因此,在主机处于休眠状态时,Mojo继续计数,加速度传感器持续锁定。
Notehub IQ:询问设备出错原因
接下来是部署!设备正常运行并报告部分数据。让人惊叹的。但当电池故意损坏时,它就会像普通坏电池一样,当电压接近3V以下时,表现得异常。
但现在,我已拥有一个充满 environment.qo 和 motion.qo 事件、_session.qo 连接记录以及 Mojo 的 _log.qo 电源快照的 Notehub 项目,随时可以进行分析。
昨天的版本中,我将数据路由到云端应用,可能建立数据库,编写数据摄取函数,并发布仪表盘,只看一两次。这可不是我喜欢的方式。还记得我懒惰嘛。
而今天,Notehub IQ 就成了故事的关键。它是由 Blues 提供的一流存储服务,可将你的事件数据镜像到可分析的层级;此外还有 Notehub MCP,即模型上下文协议服务器,AI 代理会使用它。你用简单语言提问,MCP 就会检查你的数据集,生成(只读)SQL 查询语句,并对结果进行推理分析。
一分钟 Notehub IQ 设置
要开始使用 Notehub IQ,只需将你的 AI 代理指向托管的 MCP 服务器即可:
在 Claude 桌面/网页版中,可在“连接器”目录中搜索“Notehub”。或者直接告诉你的代理:
“添加一个新的 HTTP MCP 服务器,名称为 Notehub MCP”
它将打开一个浏览器窗口,用于登录 Notehub 并授权访问权限。
之后的所有内容都纯粹是对话形式。例如:
我可访问的 Notehub 项目列表。我想加入我的 Notehub IQ 环境传感器项目,为环境数据创建 qo 和 motion.qo 格式的笔记文件。
提示:不要跳过Blue提供的系统音符文件。数据集仅针对您请求的音符文件创建,而我真正关心的一半问题就存在于Notecard自身的元数据中:
同时,请为我的_session.qo、_health.qo 和 _log.qo 音符文件创建数据集。
参考一下,_session.qo 用于区分设备已失效和正常同步的状态;_health.qo 是显示断电情况的位置;_log.qo 则记录了Mojo周期性的电源快照,对于本项目而言至关重要。
请注意,数据集的填充可能需要几分钟到数小时,具体取决于Notehub中的事件数量,但之后的新事件会自动同步。
使用 Notehub IQ 回答关键问题
当我的产品因电池损坏而无法在野外使用时,是时候利用 Notehub IQ 来回答一些问题了。
1. 这个设备实际消耗了多少能量?
“使用 environment.qo 中的 mah 字段,每次会话的平均充电量是多少?这一数值的趋势如何?”
每次间隔的平均充电量:1.64 mAh(中位数为 1.10),共 174 个间隔,总计 285.74 mAh。
注意:使用像 Mojo 这样的库仑计数器,使得这个问题成为一流的精确问题,而不是仅凭电压曲线估算的结果。
2. 太阳能板的性能是否稳定?
“将环境中的电压与一天中的时间进行关联。设备在24小时周期内是净正电荷,还是正在失去接地?”
温度数据证实这是一个真实的太阳光周期,而非噪声:06:00时notecard_temp为18.8°C,11:00时为29.7°C,说明设备处于阳光照射下。锂聚合物电池每天约0.55 V的波动属于充放电循环,而非测量误差。窗口内的轨迹变化为:4.211 V → 3.411 V,净变化约为-0.8 V。八天中有五天为负值。
糟了!看来我们需要进一步调查面板尺寸和/或固件中的功耗情况。
3. 什么出了问题,什么时候?
本文编译自hackster.io





