在PetDrifts项目的早期开发阶段,作者团队遇到了一个主要问题:基于ESP32 C3 mini的自定义PCB电路,搭配传感器和锂离子电池,电池电量消耗过快。
该电路每5分钟收集一次传感器数据并通过网络发送,但由于使用了TCP协议的REST API,每次网络请求都会进行三次握手,导致功耗显著增加。
为了找到解决方法,作者使用了Nordic的电源分析工具,并根据ESP32的数据手册,提出了两个解决方案:
1. **减少网络请求频率:** 减少数据传输次数,从而降低功耗。
2. **降低模块的传输功率:** 降低传输功率可以减少功耗,但会影响设备的传输范围。
3. **优化网络请求:** 使用更节能的网络协议,例如UDP或MQTT。
**解决方案1:切换到UDP**
UDP相比TCP,省去了三次握手的过程,可以有效降低功耗。但这需要服务器端进行相应的调整,并且UDP的可靠性不如TCP,需要额外添加同步机制或重试逻辑保证数据传输的可靠性。
**解决方案2:切换到MQTT**
MQTT是一种轻量级的消息发布订阅协议,相比REST API,功耗更低,可靠性也更好。但需要引入MQTT代理作为额外的组件。
作者团队在项目中使用了这两种方法,并观察到了电池续航时间的提升。最终,为了实现更长的电池续航时间(数月),他们选择切换到基于蓝牙的MCU。
文章还提供了其他降低ESP32功耗的资源链接,供读者参考。