
做IoT节点的人迟早会撞上“换电池”这道坎。我两年前接手一个环境监测项目200多个温湿度采集节点分布在郊区林地平均两个月就得巡检一次光电池成本和人工成本就压得项目差点做不下去。后来我干脆推倒重来做了一个太阳能供电、用BLE上报数据的无电池传感器平台。现在这套东西已经在好几个测试点跑了近一年期间只处理过三次故障还都是安装层面的问题。这个方案简单说就是不装锂电池改用一块小面积光伏板加超级电容存储一天到几天的能量配合超低功耗的BLE SoC和一颗能扛住昏暗光照的PMIC让节点在微安级平均功耗下持续上报数据。它适合智能农业、市政绿化、冷链仓储一类“分布散、数量大、不想频繁维护”的场景也适合所有被电池续航搞得头疼的嵌入式开发者参考。如果你正打算做低功耗IoT要不要上太阳能怎么算这轮能量账看完这篇至少能少走两个月弯路。1. 项目概述为什么盯上“太阳能 BLE 无电池”这个组合1.1 先说说传统IoT节点最大的坎很多刚接触IoT的工程师把注意力全放在“能不能连上网、能不能传数据”上等产品部署完了才发现电池才是最大麻烦。硬件成本其实就那几十块钱但人工去现场换电池、巡检、处理异常成本是硬件成本的几十倍。尤其是农田、边坡、森林这类场景节点装好了没人愿意再跑一趟。我在实际项目里见过更头疼的一个冷链仓库的温湿度记录仪客户要求三年内不能断电断数据电池寿命计算必须覆盖最恶劣季节。供应链再一波动电池采购周期拉长整个交付节奏全被打乱。这类“生产级P0事故”多数不是信号问题而是电源问题——节点死了、网关收不到数据、业务方在凌晨三点打电话来问为什么监控中断。传统方案里的电池也带来一堆隐性麻烦锂电池低温掉压严重碱性电池高倍率放电下实际容量缩水电池漏液导致板子报废更常见。所以越来越多团队开始往“无电池”方向走太阳能供电就成了天然首选。1.2 无电池方案到底解决了什么问题无电池不是真的“不用电”而是把能量来源从电池换成了环境中的能量。太阳能、温差、振动、射频都能采集只不过功率密度差别很大。太阳能是其中最成熟、最可预测的白天有光就有能量只是时强时弱需要用储能介质把能量平滑下来。把电池拿掉之后最直接的收益是运维成本断崖式下降。节点部署完基本不用再管理论使用寿命由电子元器件决定而不是由电化学体系决定。超级电容循环寿命动辄几十万次比锂电池多两个数量级又不需要考虑化学电池的运输合规和回收问题整个系统更干净、更环保。代价也很明确能量是稀缺资源系统里每一微安都得精打细算。处理器不能随便跑满频数据不能时时上报甚至无线链路都得在“发一次数据花多少能量”和“多久发一次”之间做取舍。这就要求软硬件紧密配合不是随便拿个开发板就能拼出来。1.3 为什么能量源选太阳能无线协议选BLE环境能量四条路我全都调研过温差发电需要持续温差场景限制太大振动发电适合工业设备但部署环境和频率很难保证射频能量采集目前效率太低只能给传感器供电级别的工作用。剩下太阳能虽然受天气影响但绝大多数户外场景都能找到光照室内靠近窗户也有十几到几百勒克斯的照度可以支撑超低功耗节点运行。无线协议选BLE原因很直接。第一BLE的通信功耗模型最适合这类“每次只传几十字节、可以等很久”的节点广播或连接时的峰值电流只在毫安级持续时间十几个毫秒平均下来能把整机功耗拉到微安级。第二BLE生态太成熟了手机、网关、开发工具随手可得nRF Connect、CoreBluetooth、bleak这些工具链能省掉大量调试时间。第三BLE 5.0之后增加了长距离模式和更高广播数据容量配合PAwR这类新机制又能在不建连接的情况下做大规模组网正好补上传统BLE“只能一对一短距连接”的短板。LoRa和WiFi我也考虑过。LoRa适合超远距离但射频功耗高不少而且组网要搭私网对很多小团队不友好。WiFi能直接上云但待机功耗和发射功耗都不是无电池方案扛得住的。综合来看在“短距、室内外兼用、数据量小、生态成熟”这个区间BLE是当前的最优解。2. 硬件选型把能量链路里的每一环抠出来2.1 光伏板不是越大越好匹配负载才是关键很多人一听太阳能第一反应是“上一块大板子”。但对于微安级负载光伏板面积过大纯属浪费还占安装空间。我测试下来一个10分钟上报一次的温湿度光照节点平均功耗在2µA以内实际需要的光伏板面积只有几平方厘米。选光伏板要看三个参数开路电压、短路电流、工作点在什么照度下还能顶住电压。常见的单晶硅小面积板开路电压5V左右短路电流在标准日照下大概每平方厘米8到15mA弱光下电流会掉到百分之几。也就是说1cm²的板子在1000 lux室内光下可能只有几十微安的电流输出。这个量级虽然小但正好能匹配微瓦级负载。我选的是5cm×3cm的柔性单晶硅板开路电压约6V标准光照下短路电流约100mA。实际工作中大多通过PMIC把工作点钳在4V附近输出电流跟着光照波动。安装时要注意倾角和朝向固定好后尽量避免落叶、灰尘、鸟粪遮挡。我踩过最典型的坑是板子贴在节点外壳表面时间一长积灰严重输出直接腰斩后来加了个透明疏水保护层才好很多。2.2 PMIC把光伏那点“低电压小电流”变成可用的能量光伏板在不同光照下输出电压波动很大弱光时可能低于1V直接给超级电容充电效率极低所以中间一定要加能量管理芯片。PMIC负责三件事把光伏板的电压升起来给储能电容充电通过MPPT算法让光伏板尽量工作在最大功率点监控储能电压给后端提供一个稳定供电并控制开关。市面上适合无电池方案的PMIC主要有三款我全部买来测过型号冷启动电压静态功耗最大输入关键特点TI BQ25570约330mV约500nA高达500mV-5V范围集成LDO可配置MPPT资料多ADI ADP5091约380mV约350nA最高3.6V输入双路输出效率略高配置略复杂e-peas AEM10941约380mV约250nA最高5.5V输入静态功耗最低冷启动能力强多路输出用下来我更偏向AEM10941因为它静态功耗只有250nA对系统整体功耗预算压力最小而且冷启动电压低室内弱光条件下也能自己“醒”过来。BQ25570优点是文档和论坛资料多遇到问题容易查适合项目初期快速验证。无论选哪颗都要注意外围电阻的取值直接影响充电电压阈值和MPPT参考点这个要对着数据手册仔细算不能随便抄评估板的参数。2.3 储能介质超级电容怎么选为什么不用电池无电池系统里的“储能”我用的是超级电容不是可充电电池。超级电容能量密度低但胜在寿命长、不怕过放、低温性能好、没有毒害。以我这套节点为例一颗10F的超级电容能存约15.8mWh能量按2.5V到4.2V区间算足够让微安级负载撑十几天无光环境代价是体积只有硬币大小。选容量要看两个约束一个是最长无光时间能不能扛住一个是充电时间能不能接受。0.1F可能只能撑半天1F可以撑几天10F则体积偏大。我最终选了1F因为我的目标场景是户外绿地白天必然有光照窗口1F足够覆盖连续阴雨两到三天。如果做室内场景光照窗口更短可能反而要选更大容量。超级电容有个容易被忽略的缺点自放电率比电池高得多而且温度越高自放电越快。选型时尽量挑低漏电流的系列同时不要一味加大容量因为容量越大自放电的绝对损耗也越大。测试中我发现有些电容放在窗台被太阳晒热后静态电压掉得特别快这就是ESR和自放电这两个参数在作怪。2.4 MCU与BLE SoC选型最低功耗是第一设计约束主控这颗芯片是整个系统的“胃”撑起传感器采样、协议栈、无线收发、Flash存储四大功能选型上首要指标不是性能而是基准功耗。我实测对比过三款方案nRF52810/nRF52832北欧的低功耗BLE经典System ON RTC只有1.9µA左右广播发射峰值约5mA唤醒时间几微秒非常适合无电池节点。我的主方案选的nRF52810因为只做广播和简单采集用不上多出来的外设和Flash。EFR32BG22Silicon Labs的BLE SoCEM2模式下睡眠电流也做到1.4µA左右射频灵敏度很出色适合需要长距离或复杂环境的场景。ESP32-S3性能强、能跑WiFiBLE但待机和发射功耗都高一个量级如果节点既要BLE又要本地处理复杂的AI逻辑可以选但无电池纯传感器场景下我劝你慎用除非你能接受更大的光伏板和电容。选型时别只看睡眠电流还要看这几个参数唤醒时间决定唤醒窗口里消耗额外电流多久、射频峰值电流、RAM在不同保持模式下的功耗、ADC采集时的工作电流。有一次我差点选了一颗睡眠电流只有1µA的芯片结果它唤醒后必须等几个毫秒射频校准完才能发广播每次发送窗口的实际功耗比预想高了30%后来重新算了一轮预算才避免翻车。3. 功耗预算无电池项目立项前必须算的一笔账3.1 先算负载端平均电流这是整个设计地基无电池系统能不能成立不是看峰值电流而是看平均电流。平均电流乘上工作时间就是每天必须从光伏侧收回来的电量。我习惯把所有工作状态拆开来列一个电流-时间表再按周期占比求平均。以我的节点为例工作周期是600秒工作状态电流持续时间每个周期占空比平均电流睡眠RTC电容漏电1.8µA约598.2s99.7%1.795µA唤醒传感器采样约200µA10ms0.0017%0.003µABLE广播TX 0dBm5mA15ms0.0025%0.125µA周期合计-600s-约1.92µA这个1.92µA就是在3.3V供电下的平均电流折算成功率约6.3µW。一天下来大概是0.15mWh不算多但一旦从睡眠电流的1.8µA升到3µA每天需求就多了差不多50%光伏面积和电容容量又得加。注意事项是动态电流很容易被忽略比如调试LED、片内LDO待机漏电、外部传感器未断电时的漏流全部会算进睡眠电流。我第一次测整版睡眠电流高达8µA查到最后是三颗外部上拉电阻和一颗加速度计悄悄在耗电全部用GPIO控制供电和断开上拉后才降回1.9µA。3.2 再算能量侧能“收”多少考虑最恶劣连续阴雨天能量侧的计算我习惯按最恶劣天气而不是晴天来设计因为无电池系统最怕的就是“连续几天没有光”。户外假设每天等效峰值日照3到4小时光伏板在MPPT状态下输出10mA4V一天就是40mAh按3V折算约40mAh这里按10mA×4h40mAh。听着挺多但如果碰到连续阴雨光照只有晴天的10%到20%一天可能只有4mAh勉强够。这里要引入“系统能量余量”的概念光伏侧每天供应的能量必须大于负载侧每天消耗的能量同时储能电容还要能覆盖连续无光时间。以我的系统为例每天消耗电流1.92µA×24h46µAh光伏板就算在室内窗台弱光下一天也能充进几百µAh有十倍以上的余量。即使连续三天完全无光1F超级电容里存的约2.6mWh按3.6V放到2.5V也足够扛好几天。3.3 一个完整测算实例10分钟温湿度光照上报我把完整算账过程贴出来方便你直接套自己的功耗数据。假设节点每10分钟唤醒一次依次完成温湿度采样SHT40、光照采样OPT3001、三次BLE广播、然后回到睡眠单周期平均电流按上面表是1.92µA一天消耗约46µAh。光伏侧选5cm×3cm单晶硅板正常晴天室内窗台约5000 luxPMIC转换效率约85%实测可用充电电流约60µA3.6V。一天按10小时光照算能充600µAh大约是负载日耗的13倍完全够用。即便碰到恶劣天气只有1小时弱光也能充进30µAh加上超级电容里存余量短时间断光不至于丢数据。所以结论是对于这个量级的节点光伏板并不需要多大真正要盯住的是PMIC静态电流和超级电容漏电。如果某个传感器或者协议栈配置导致单周期平均电流涨到5µA那就要开始焦虑了一天120µAh弱光下就会入不敷出。3.4 冷启动、能量间歇与掉电保护策略无电池系统存在一个传统电池方案没有的问题能量会掉到零系统会彻底关机。这就是冷启动。PMIC通常需要先在输入端累积一定能量等启动电路把电压抬升到阈值后端才能上电。这期间不能指望MCU工作所以外围电路里要保证启动路径独立、可靠。我建议的启动策略是在PMIC的冷启动电容旁边并联一颗小容量陶瓷电容让系统能在几十秒内完成启动并在储能电容上建立基础电压。MCU上电后第一件事不是去采传感器而是读PMIC的状态引脚和储能电压寄存器判断当前能量是否足够完成一次完整上报。如果电压临近掉电阈值就尽快把当前传感值写进Flash然后主动关闭射频和相关模块进入深度关机。写入Flash时要防止“低电压写坏Flash”的情况我专门加了掉电检测中断触发后先把关键标志置好再执行Flash写操作。掉电阈值要设迟滞比如低于2.5V就关机高于2.9V才重新启动否则在临界光照下会反复上下电轻则数据错乱重则把存储区写坏。4. BLE协议与固件实现让数据在µA级预算下跑起来4.1 广播/连接模式的取舍无电池节点的无线通信有两种常见姿势广播模式或连接模式。广播模式最简单节点周期性把自己打包成广播帧发出去不建立连接网关或手机在旁边扫描接收。优点是节点侧功耗最低、代码量小数据是单向的网关永远不会主动给节点发数据缺点是无法可靠确认数据到底有没有被收到也做不了配置下发。连接模式则让节点作为Peripheral与Central网关维持一个BLE连接。可以通过配置连接事件来双向通信支持OTA、参数下发、可靠确认机制。缺点是连接维持本身需要周期性收发功耗高一些而且Central端必须保持工作。如果中心端掉线节点会一直尝试重连功耗会骤然上升。我实际选择的是“广播为主、连接为辅”的混合模式默认节点只发广播如果网关注入特殊信标或者节点收到扫描请求后判定需要配置才短暂切换到连接模式。大规模部署时节点的绝大多数生命期都在广播状态功耗最省。近期我也在测试PAwRBLE 5.4的周期广播响应机制它能在大规模网络中同时做到“超低功耗”和“双向可达”比传统连接模式更适合千级节点组网但目前手机端兼容性还一般。4.2 连接参数调优连接间隔、Slave Latency、监督超时如果你决定用连接模式协议栈里的参数一定要细调。我见过太多人直接拿评估板的默认连接参数节点功耗高得离谱还不自知。连接间隔默认是30ms对无电池节点来说太密了我一般调到500ms到1s。连接间隔拉大后Central到Peripheral的数据延迟会升高但功耗能降一截。Slave Latency是另一个关键参数它允许节点跳过N个连接事件不必每次都回复。我把Slave Latency设成9配合1s连接间隔意味着节点最多每10秒才真正处理一次射频事件其余时间全在睡眠。监督超时Supervision Timeout要大于连接间隔×(1Slave Latency)否则Central会判定连接丢失我设的是30秒。广播参数同样重要广播间隔越大越省电但扫描端拿到数据越慢。对于环境监测这类容忍分钟级延迟的数据广播间隔设1秒到5秒完全够用。发射功率从4dBm降到0dBm能省差不多30%的发射电流但覆盖半径可能从百米缩到三四十米这个就得按部署密度来权衡了。4.3 传感器采样与数据处理别被传感器漏电坑了传感器选型很多人只看“工作电流低”结果忘了看漏电流。比如某款加速度计工作电流只有几十微安但数据手册注释里写着“内部上拉在睡眠时可残留1µA漏电”这颗漏电直接吃掉系统一半预算。所以我的原则是所有传感器都要能独立断电GPIO控制一个MOS管或负载开关采样前供电采样完成后完全断开。采样流程也有讲究。传感器上电后电压稳定需要时间有些数字传感器要等几毫秒才响应I2C我写固件时会先等一个固定的上电稳定窗口再做读取。数据读到后我会先做一次简单的有效性判断比如温湿度是否在合理范围再决定是否进一次平均算法。多数环境下上一次和下一次测量值相差很小加个阈值判断就能避免无意义上报。数据存储同样要省着用。Flash写入一次要几毫秒电流也不低频繁写会拖累功耗还磨损Flash。我采用的方式是先在RAM里累积最近几次测量值满足“变化超过阈值”或者“达到最大间隔”两个条件之一才写一次Flash再决定是否上报。4.4 固件OTA与远程维护无电池节点做OTA是最麻烦的。传统设备升级就是把新固件整个拉下来可能得几十KB到几百KB一次连接传输消耗的能量可能是正常上报的几百倍。能量不够时升级到一半就掉电节点变成砖。我目前的做法是进OTA前先检查储能电压低于阈值就直接拒绝升级并在响应包里告诉网关“能量不足请稍后”。升级采用双区方案新固件先写入第二个Flash区域写完校验通过后再切换启动地址中途断电只是丢弃新固件旧固件还能继续跑。传输协议上用单连接连续下发每包之间间隔自己控制避免网关速度太快导致节点缓冲区溢出。如果实在没有精力做OTA我给你个偏方设计一个“恢复模式”长按配置引脚或收到特定广播命令后节点进入连续连接状态等待接收命令。这个模式平时不启用只在需要现场调试或定制配置时打开能省掉大量OTA复杂度。5. 实测部署与排查实录5.1 部署场景与实测数据我把两套节点分别放在两个典型位置做了两周测试一个放办公室窗台一个放在户外花坛灌木丛边都装了太阳能板和1F超级电容采集间隔10分钟BLE广播间隔1秒。窗台节点因为靠近玻璃幕墙每天能接收到约3小时的直射光和4小时的散射光储能电容电压基本在3.9V到4.2V区间波动从来没触发过低电压告警。户外节点白天晒得到太阳最高充到4.12V但遇到傍晚和凌晨时段电压会缓慢降到3.5V左右仍然足够。最惊险的是有一天下暴雨户外节点连续8小时几乎没有光照我通过远程读取看到电容电压一度降到2.8V。因为有掉电阈值保护节点在2.7V左右停止上报第二天光照恢复后自动重新启动数据没有丢失Flash里存着断电前最后一条采样。这次经历让我确认了阈值迟滞设计真的有用——如果没设置迟滞节点会在雨天反复开关机Flash大概率几天就写坏。5.2 常见问题速查表症状可能原因解决方式节点反复重启电压跳变掉电阈值和启动阈值太近设置至少0.3V迟滞比如2.5V关机、2.8V开机白天充电后一上报就掉电超级电容容量偏小或ESR过大换成低ESR系列电容核算上报能量消耗睡眠电流比标称高一倍外部上拉电阻传感器漏电PMIC分压电阻用GPIO控制上拉电源传感器独立断电分压电阻加开关光伏板输出不少但充不进电PMIC的MPPT电阻配置错误按数据手册重新计算MPPT电阻用照度计校准BLE广播偶尔收不到广播间隔过长、天线匹配差、发射功率过低缩小广播间隔到1s检查天线匹配并校准网络分析仪数据到达网关乱码广播数据包格式没按规范编码或字节序混乱对照BLE广播数据结构规范检查Manufacturer Specific DataFlash数据丢失低电压写入导致写入失败增加掉电检测和电压迟滞Flash写入前检查电压高温环境上报周期变长超级电容自放电增大或PMIC热降额加强散热遮挡选用低自放电电容降低上报频率5.3 几个值得单独说的坑第一是分压电阻。ADC量储能电压必须用电阻分压但分压电阻如果是固定接在电源和地之间两三百千欧的阻值就会持续漏电算下来好几微安。我的解决办法是用一颗MOSFET串在分压电阻的地侧只有测量电压时才打开睡姿期间完全断开。第二是传感器上电浪涌。有些传感器尤其是光照传感器和带内部充电泵的芯片上电瞬间会产生比较大的冲击电流如果PMIC输出能力不足会把储能电容电压瞬间拉低甚至触发掉电保护。我的做法是在PMIC输出和传感器VDD之间加一个软启动限流电阻或者小负载开关并在传感器供电脚上并联100nF陶瓷电容。第三是PCB清洁问题。做低功耗产品板上如果有助焊剂残留或水汽表面漏电流可能达到微安级别在湿度大的季节尤其明显。我现在洗完板后都会加一道水洗和烘干工序再涂三防漆。板级漏电流这事用高阻计测最靠谱别用万用表直接量量出来经常是零。第四是天线匹配。BLE SoC的天线端口通常需要匹配网络如果匹配不好反射功率变大实际上会加大射频前端电流。我调试时用网络分析仪看过S11参数匹配良好的板子反射损耗在-15dB以下而随手打样的板子只有-6dB发射电流差了约20%。在无电池系统里这20%可能就是压死骆驼的最后一根稻草。最后说一句个人体会无电池IoT难的不是把某个节点跑通而是让整个系统在一年四季、晴雨交替里都稳定。太阳能方案最大的敌人不是硬件本身是设计师对功耗细节的“差不多”心态。你既然已经开始关注这套方案说明你大概率已经踩过电池的坑了那就把功耗预算这张表算细多留一点余量让节点在无人关注的日子里自己活着。