2. 农业物联网数据采集与传输协议选型

在农业远程监控系统中,传感器采集到的空气温湿度、土壤含水率、光照强度、CO₂浓度等数据,最终要跨越田间到云端这段"最后一公里"。这段链路的带宽往往并不宽裕:大棚里可能是运营商4G信号微弱,大田里可能靠LoRa网关回传,山区果园甚至只有NB-IoT可用。因此,协议选型不是"哪个流行用哪个",而是要在报文开销、连接保持、功耗和可靠性之间做权衡。本节围绕MQTT、HTTP、CoAP三种主流协议展开对比,并给出传感器数据上报格式与边缘网关到云端的数据流转路径设计。

三种协议在低带宽场景下的本质差异

HTTP是请求—响应模型,客户端每次上报都要重新建立TCP连接(或复用长连接),并携带完整的请求头。一个典型的HTTP POST请求头往往有200~500字节,而农业传感器一次上报的有效载荷可能只有几十字节,头部开销占比极高。HTTP适合低频、非实时的数据补传,比如每天一次的历史数据同步,但不适合分钟级的高频上报。

MQTT基于发布/订阅模型,运行在TCP之上,通过心跳机制维持长连接。它的固定报头最小仅2字节,主题名和载荷分离,非常适合"多设备、小报文、持续在线"的场景。农业监控中大量传感器节点需要周期性上报,MQTT的轻量报头和QoS等级(0/1/2)能灵活匹配不同数据的可靠性要求。缺点是长连接需要网关持续保活,对极端低功耗的电池节点不够友好。

CoAP运行在UDP之上,采用类HTTP的请求—响应语义,但报头压缩到最小4字节,并支持观察模式(Observe)和块传输(Block-wise)。它天然适合受限设备与丢包率较高的无线链路,在NB-IoT、LoRa这类非连接型网络上表现更好。CoAP的短板是UDP本身不保证可靠,需要应用层做重传和去重,且云端服务端支持不如MQTT成熟。

选型判断的核心不是协议"先进与否",而是数据上报频率、网络类型、设备供电方式和云端生态四者的匹配度。高频持续上报优先MQTT;超低功耗、间歇上报优先CoAP;低频批量补传可用HTTP。
农业传感器数据上报:协议特性与流转路径 协议特性对比 MQTT(TCP 发布/订阅) 最小报头 2 字节 · 长连接保活 QoS 0/1/2 可选 · 主题分级 适用:分钟级持续上报、4G/以太网 代价:需心跳保活,电池节点功耗偏高 CoAP(UDP 请求/响应) 最小报头 4 字节 · Observe 观察模式 支持块传输 · 适合丢包链路 适用:NB-IoT/LoRa、间歇上报 代价:UDP 不可靠,需应用层重传去重 HTTP(TCP 请求/响应) 报头 200~500 字节 · 语义通用 云端生态成熟 · 易调试 适用:低频补传、历史数据同步 代价:头部开销大,高频上报不经济 边缘网关 协议适配(MQTT/CoAP) 数据清洗与单位归一 本地缓存(断网续传) 编码转换(JSON/二进制) 云端平台 Broker / CoAP 服务端接入 消息解析与设备鉴权 时序数据库存储 Web 看板 / 告警推送 田间传感器节点 温湿度 / 土壤 / 光照 / CO₂ CoAP/MQTT 上报 MQTT/TLS 虚线表示协议选型映射:网关按节点网络类型与上报频率选择对应协议接入

传感器数据上报格式设计

协议只解决"怎么传",格式解决"传什么、怎么解析"。JSON可读性好、调试方便,适合开发阶段和低频上报;二进制格式紧凑,适合带宽紧张或节点数量大的场景。以土壤温湿度传感器为例,一条JSON上报报文可以设计为:

{
  "devId": "TH-0012",
  "ts": 1717488000,
  "seq": 1024,
  "data": {
    "soilTemp": 23.6,
    "soilMoist": 41.2,
    "airTemp": 26.1,
    "airHum": 68.5
  },
  "batt": 3.72,
  "rssi": -87
}

字段设计要点:devId用于设备寻址;ts为Unix时间戳(秒),避免时区歧义;seq为递增序号,用于去重和丢包检测;data内按物理量命名,单位在设备注册时约定(温度℃、湿度%RH);batt和rssi是运维关键字段,用于判断节点供电和信号质量。整条JSON约180字节,若每分钟上报一次,单节点日流量约260KB,在4G下可接受,但在LoRa上就偏重。

二进制格式则把上述字段按固定偏移打包。例如采用12字节定长帧:设备ID 2字节、时间戳4字节(相对网关基准时间的偏移)、土壤温度2字节(0.1℃精度)、土壤湿度2字节、电量1字节、序号1字节。同样一条数据压缩到12字节,报文体积下降约93%。代价是可读性差,需要维护字段字典和字节序约定(建议统一小端序)。实践中常见做法是:节点到网关用二进制节省无线带宽,网关到云端转成JSON便于平台解析和看板展示。

边缘网关到云端的数据流转路径

完整链路可以概括为四段:传感器节点经LoRa/RS-485将数据送到边缘网关;网关完成协议适配、单位归一、异常值过滤(如土壤含水率超过100%视为无效)和本地缓存;网关通过MQTT over TLS将数据发布到云端Broker,主题按farm/{farmId}/{devType}/{devId}分级;云端订阅后解析入库,Web看板从时序库查询展示。

断网续传是农业场景必须考虑的设计。网关本地用SQLite或环形缓冲区保存最近24~72小时数据,网络恢复后按seq顺序补发,云端依据devId+seq做幂等去重。QoS选择上,环境监测数据用QoS 1保证至少送达,重复由去重逻辑消化;电量告警等关键事件可用QoS 2。若节点采用NB-IoT且上报间隔超过15分钟,可改用CoAP Observe模式,由云端注册观察关系,节点仅在数据变化超阈值时推送,进一步降低功耗。

选型落地建议:棚内4G稳定、上报间隔1~5分钟的,选MQTT + JSON;大田LoRa组网、节点靠电池供电的,节点侧用二进制 + CoAP,网关侧转MQTT + JSON上云;仅做每日历史补传的,用HTTP批量接口即可。协议不是非此即彼,分层混用往往才是农业物联网的常态。

最后提醒一点:无论选哪种协议,都要在报文里保留时间戳、序号和设备标识这三类"元数据",它们是后续去重、补传和故障定位的基础。协议决定传输效率,格式决定数据可用性,两者配合才能在低带宽条件下把农业数据稳定、经济地送到看板上。