第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信号几乎没有,你会怎么调整通信方案?