做物联网终端数据上报的时候,你是不是经常在HTTP、MQTT、CoAP三个协议之间纠结,踩了功耗过高、接入上限不够的坑才后悔选错了方案?
实测数据先摆出来,不扯空概念
测试用的硬件是最常用的ESP32-C3模组,测试环境为同个2.4G WiFi(距路由器3米,信号强度-52dBm),每次上报32字节的温湿度+设备状态数据,连续测100次取均值:
- HTTP1.1短连接:单次上报平均功耗127mA,延迟210ms,单AP稳定接入上限117台,协议栈占用RAM 28KB
- MQTT3.1.1长连接(QoS1,30s心跳):单次上报平均功耗42mA,延迟68ms,单AP稳定接入上限780台,协议栈占用RAM 17KB
- CoAP(CON可靠消息,无长连接保活):单次上报平均功耗19mA,延迟92ms,单AP稳定接入上限1460台,协议栈占用RAM 8KB
适用边界划清楚,别盲目跟风
别听网上说"MQTT是物联网标配"就无脑选。
如果你的设备是常供电、上报间隔大于5分钟、需要直接对接第三方公开接口(比如快递柜、共享充电宝的状态上报),直接选HTTP就行,调试不用搭专门的消息broker,Postman就能发请求查问题,踩坑了搜解决方案一抓一大把。
如果是需要实时双向通信、上报间隔在10s以内的场景(比如智能开关、工业传感器采集节点),选MQTT最合适,QoS等级可灵活配置,国内云厂商的物联网套件默认都做了适配,不用自己写太多底层逻辑。
如果是电池供电、要求一次换电能撑1年以上的低功耗场景(比如智能水表、深山里的森林防火监测节点),别犹豫选CoAP。我之前踩过坑,给牧场牛羊项圈做监测的时候一开始图省事儿用了MQTT,原本设计1年续航实际3个月就耗完电,换成CoAP之后整体功耗直接降了62%。唯一的麻烦是公网透传支持少,大部分云平台需要自己做一层协议转换。
选型核心判断标准:先卡功耗阈值,再看是否需要双向实时通信,再算接入规模,三个维度筛完基本不会选错。
MicroPython下写CoAP上报核心代码不到10行,非常轻量:
from coap import CoAP
import socket
client = CoAP(socket, server="你的采集服务IP")
# CON模式下消息可靠送达,和MQTT QoS1效果接近
client.post(path="/device/upload", payload=b'{"temp":24.3,"battery":87}', confirmable=True)
评论一下?