第2章:系统架构设计

好,咱们接着聊。上一章我们把农业空气站的需求理清楚了,这一章就要动真格的了——系统架构设计。说白了,就是画图纸、定规矩、选路子。

我做了这么多年嵌入式,最深的体会就是:架构设计决定了项目能走多远。你想想看,如果一开始架构就歪了,后面改起来那叫一个痛苦。我曾经有个项目,就因为通信协议选错了,后期不得不加一个协议转换网关,多花了两个月时间。

2.1 整体硬件框图

先看硬件。农业空气站的核心硬件模块,我习惯分成这么几块:

  • 传感器模组:温度、湿度、PM2.5、CO₂、风速风向、光照强度
  • 主控单元:MCU(我推荐STM32L4系列,低功耗性能稳)
  • 通信模块:4G Cat.1 / NB-IoT / LoRa(根据场景选)
  • 电源管理:太阳能+锂电池+MPPT充电管理
  • 存储单元:外挂Flash + SD卡(本地数据备份)
  • 接口扩展:RS485、I²C、SPI、UART

嗯,这里要注意:传感器和主控之间,我建议加一级隔离。为什么?农业现场环境复杂,雷击、浪涌、地环路干扰,搞不好就把MCU烧了。我吃过这个亏,后来所有设计都加了光耦隔离。

硬件框图核心要点:

  • 传感器采集 → 信号调理 → ADC采样 → MCU处理
  • MCU → 本地存储 → 通信模块 → 云平台
  • 太阳能板 → MPPT → 锂电池 → 系统供电

2.2 软件分层架构

软件这块,我坚持分层设计。你想想看,不分层的话,代码就像一团乱麻,改一个地方可能牵动全身。

我的分层习惯是这样的:

层级 职责 举例
应用层 业务逻辑、数据上报策略、告警判断 温度超限触发告警
协议层 MQTT/CoAP协议栈、数据封装/解析 JSON格式打包
驱动层 传感器驱动、外设驱动 SHT30温湿度驱动
硬件抽象层 MCU外设封装、中断管理 GPIO、UART、I²C
RTOS层 任务调度、资源管理 FreeRTOS任务划分

我个人习惯用FreeRTOS做任务调度。为什么?因为农业空气站需要同时处理传感器采集、数据上传、本地存储、低功耗管理等多个任务,裸机跑起来太累。

小技巧:任务优先级别设太多,3-4级就够了。我曾经见过有人设了8级优先级,结果调试的时候自己都搞不清哪个任务先跑。

2.3 数据流走向

数据流,说白了就是数据从哪来、到哪去、中间经过谁。我画了个简化的流程:

传感器 → MCU(ADC/DMA) → 数据处理(滤波/校准) → 本地存储(SD卡)
    ↓
协议封装(MQTT/CoAP)
    ↓
通信模块(4G/LoRa)
    ↓
云平台(数据解析/存储/展示)
    ↓
用户终端(手机/PC)

这里有个关键点:数据一定要本地存一份。为什么?网络不稳定是常态。我曾经在新疆的农场部署设备,4G信号时有时无,如果没有本地存储,数据就全丢了。

数据采集频率我建议这样设:

  • 常规采集:每5分钟一次
  • 告警触发:立即采集并上报
  • 低功耗模式:每30分钟一次

2.4 通信协议选型

通信协议选型,这是个大话题。我直接说结论:农业空气站首选MQTT。为什么?

协议 优点 缺点 适用场景
MQTT 轻量、双向通信、QoS保证、持久连接 依赖Broker、协议开销略大 实时监测、远程控制
HTTP 简单、通用、防火墙友好 请求/响应模式、实时性差、功耗高 配置下发、固件升级
CoAP 极轻量、UDP传输、适合资源受限设备 可靠性不如MQTT、生态不成熟 NB-IoT、低功耗传感器

我个人建议这样组合:

  • 主通信:MQTT over TCP,QoS设为1(至少一次),保证数据不丢
  • 辅助通信:HTTP,用于OTA固件升级和配置下发
  • 极端场景:CoAP,如果设备资源极度受限(比如8位MCU)

避坑指南:我曾经在项目里直接用MQTT QoS 2(恰好一次),结果网络抖动时Broker频繁重传,把设备搞死机了。后来改成QoS 1,配合本地去重,问题解决。

嗯,这里还要提一句:数据格式。我推荐用JSON,虽然比二进制大一点,但可读性好、调试方便。如果带宽实在紧张,可以压缩后再传。

2.5 架构设计总结

好了,这一章的内容就这些。总结一下核心要点:

  • 硬件框图要模块化,传感器和主控之间加隔离
  • 软件分层要清晰,RTOS是标配
  • 数据流要本地备份,别全依赖网络
  • 通信协议选MQTT,辅以HTTP和CoAP

下一章,我们开始动手画原理图。到时候我会把每个模块的选型思路、电路设计细节都讲清楚。咱们下章见。

课后思考:如果你的农业空气站部署在深山老林里,4G信号几乎没有,你会怎么调整通信方案?