二、系统总体架构设计:端-边-云三层架构、通信协议选型(MQTT/CoAP)、数据流设计

好,咱们直接进入正题。这一章讲的是整个系统的骨架——架构设计。说白了,就是决定传感器数据从哪来、经过谁、最终去哪里的问题。

我个人习惯,做物联网项目第一步不是写代码,而是画架构图。你想想看,如果连数据怎么流都搞不清楚,后面调试起来会非常痛苦。我在项目中遇到过好几次,因为前期架构没想清楚,后期不得不推翻重来,那叫一个折腾。

2.1 端-边-云三层架构

农业空气质量站,我把它拆成三层:端侧、边侧、云侧。每一层各司其职,缺一不可。

层级 角色 典型硬件 核心任务
端侧(感知层) 数据采集者 传感器节点、RTU 采集PM2.5、温湿度、CO₂等
边侧(边缘层) 数据处理器 边缘网关、工业平板 协议转换、本地决策、缓存
云侧(平台层) 数据汇聚者 云服务器、数据库 存储、分析、可视化、告警

端侧,就是那些挂在田里、大棚里的传感器节点。它们负责采集原始数据,然后通过串口或无线方式传给边缘网关。嗯,这里要注意,端侧设备通常资源受限,MCU可能只有几十KB的RAM,所以数据格式一定要精简。

边侧,这是整个架构里我最看重的部分。为什么?因为农业场景网络不稳定是常态。我曾经在新疆的棉田里调试设备,4G信号时有时无,如果所有数据都直接上云,丢包率能让你崩溃。边缘网关的作用就是:先收数据、做本地处理、等网络好了再批量上传。

云侧,负责长期存储和复杂分析。比如历史趋势图、跨区域对比、AI预测模型,这些都得在云上跑。端侧和边侧算力有限,别指望它们做太复杂的事情。

我的经验之谈:三层架构不是死的。如果项目规模小,比如就几个大棚,你可以把边侧和云侧合并。但一旦超过50个节点,我强烈建议保留独立的边缘网关。否则云服务器压力会非常大,而且网络抖动时数据就全丢了。

2.2 通信协议选型:MQTT vs CoAP

这是物联网领域的老话题了。MQTT和CoAP,到底选哪个?我直接说结论:农业空气质量站,我选MQTT。原因有三。

第一,MQTT是长连接。 传感器数据需要持续上报,比如每5分钟一次。MQTT建立连接后一直保持,省去了反复握手的开销。CoAP虽然轻量,但它是基于UDP的请求-响应模式,每次通信都要重新协商,在频繁上报的场景下反而效率低。

第二,MQTT的QoS机制很实用。 农业数据虽然不像工业控制那么苛刻,但也不能丢。我一般用QoS 1,保证消息至少送达一次。CoAP虽然有确认机制,但实现起来比MQTT复杂,而且没有现成的Broker生态。

第三,生态成熟。 你随便找个云平台,阿里云、腾讯云、AWS IoT,都原生支持MQTT。CoAP的支持就差多了,很多平台需要自己搭网关转换。我当年在某个项目里硬要用CoAP,结果对接云平台时折腾了两周,后来换成MQTT,半天搞定。

对比项 MQTT CoAP
传输层 TCP(可靠) UDP(轻量)
连接方式 长连接(发布/订阅) 短连接(请求/响应)
适用场景 频繁上报、双向通信 低功耗、偶发查询
生态支持 非常成熟 一般
我推荐指数 ⭐⭐⭐⭐⭐ ⭐⭐⭐

避坑指南:如果你用的是NB-IoT模组,而且对功耗要求极其苛刻(比如电池供电用一年),那CoAP可能是更好的选择。因为NB-IoT本身带宽窄、流量贵,CoAP的UDP特性可以省流量。但大多数农业站都有市电或太阳能供电,MQTT完全够用。

2.3 数据流设计

数据怎么流?我画个简单的逻辑给你看。

传感器节点 → 串口/RS485 → 边缘网关 → MQTT Broker → 云平台 → 数据库 → 前端展示
                ↑                    ↓
           本地存储(SD卡)    本地决策(如超限告警)

具体来说,数据流分三个阶段:

第一阶段:端到边

传感器通过Modbus RTU协议把数据传给边缘网关。这里有个细节:传感器数据通常是原始值,比如电压、频率。边缘网关要做的第一件事就是解析和校准。比如PM2.5传感器输出的是电压值,你得根据厂家提供的公式换算成μg/m³。我见过有人直接把原始值上传到云平台,结果前端显示的全是乱码。

第二阶段:边到云

边缘网关把处理好的数据打包成JSON格式,通过MQTT发布到指定Topic。Topic命名我建议用层级结构,比如:

agri/{station_id}/{sensor_type}/{timestamp}

举个例子:

agri/STATION_001/pm25/2025-01-15T10:30:00Z

这样设计的好处是,云平台订阅时可以灵活过滤。比如你想看所有站点的PM2.5数据,直接订阅 agri/+/pm25/+ 就行。

第三阶段:云到端(下行)

有时候我们需要远程配置传感器,比如修改采集频率。这时候云平台会发布一条指令到特定Topic,边缘网关订阅后解析执行。注意,下行指令一定要有确认机制,否则你改了参数,设备没收到,那就尴尬了。

重要提醒:数据流设计时,一定要考虑断网续传。边缘网关本地要有一个环形缓冲区,比如存最近1000条数据。网络恢复后,按时间戳顺序补传。我当年在云南的茶园项目里,就是因为没做断网续传,雨季网络断了三天,数据全丢了,被客户骂得狗血淋头。

好了,这一章就讲到这里。架构设计是地基,地基不稳,后面全是空中楼阁。下一章我们聊聊具体的硬件选型,包括传感器、MCU和通信模组怎么搭配。到时候我会分享一些性价比很高的方案,都是我自己踩过坑后总结出来的。