1. 项目背景与核心功能
智慧农业是当前农业现代化的重要方向,通过物联网技术实现环境参数的精准监测与调控。我们基于小熊派开发板和华为LiteOS操作系统,构建了一套完整的智慧农业环境调控系统。这个系统能够实时采集温室内的温度、湿度和光照强度数据,通过NB-IoT网络上传到云端平台,并根据预设条件自动控制通风设备和补光装置。
在实际测试中,系统每5秒采集一次环境数据,通过NB35-A通信模块上传到华为云IoT平台。当温度超过30℃时自动启动通风电机,当光照强度低于10000lux时自动开启补光灯。整套系统采用低功耗设计,在4G网络环境下实测待机电流仅15mA,非常适合野外无市电供应的农业场景。
2. 硬件架构设计
2.1 核心硬件选型
我们选择小熊派开发板作为主控制器,其核心是STM32L431RCT6低功耗MCU。这款芯片具有以下优势:
- 80MHz主频的Cortex-M4内核
- 256KB Flash + 64KB SRAM
- 多种低功耗模式(最低0.3μA)
传感器扩展板采用E53_IA1模块,集成了:
- BH1750数字光照传感器(0-65535lux)
- SHT30高精度温湿度传感器(±2%RH,±0.3℃)
- 直流电机驱动电路
- 高亮度LED补光灯
通信模块选用NB35-A NB-IoT模组,支持:
- B5/B8频段
- 最大下行速率127kbps
- PSM模式功耗仅5μA
2.2 硬件连接示意图
开发板与各模块的连接方式如下:
[STM32L431RCT6] ├── I2C1 │ ├── SCL → BH1750_SCL │ └── SDA → BH1750_SDA ├── USART2 │ ├── TX → NB35-A_RX │ └── RX → NB35-A_TX ├── GPIOB6 → 电机控制线 └── GPIOB7 → 补光灯控制线特别注意I2C总线上需要接4.7kΩ上拉电阻,NB-IoT模块需要单独供电(3.7V锂电池最佳)。在实际部署时,建议将传感器与主控板分离安装,用杜邦线延长连接,避免电路板发热影响温湿度测量精度。
3. 软件系统实现
3.1 LiteOS任务调度
华为LiteOS作为实时操作系统,其任务管理是我们的软件核心。系统创建了三个主要任务:
数据采集任务(优先级3)
- 周期读取传感器数据
- 数据滤波处理(滑动平均算法)
- 触发临界值报警
通信任务(优先级2)
- 维护NB-IoT连接
- 数据打包上传
- 接收云端指令
控制任务(优先级3)
- 执行设备控制逻辑
- 状态指示灯管理
- 异常情况处理
任务创建代码如下:
int main() { osal_semp_create(&s_rcv_sync,1,0); osal_task_create("app_collect",app_collect_task_entry,NULL,0x400,NULL,3); osal_task_create("app_report",app_report_task_entry,NULL,0x1000,NULL,2); osal_task_create("app_command",app_cmd_task_entry,NULL,0x1000,NULL,3); return 0; }3.2 传感器驱动开发
BH1750光照传感器的驱动实现有几个关键点:
- 上电后需要发送0x01初始化指令
- 高分辨率模式(0x10)下需要180ms转换时间
- 原始数据需要除以1.2得到lux值
温湿度传感器SHT30的注意事项:
- 使用0x22,0x36指令进入周期测量模式
- 读取数据后必须校验CRC8
- 温度计算公式:T = -45 + 175 * raw/65535
驱动代码片段:
float SHT3x_CalcTemperatureC(unsigned short u16sT) { u16sT &= ~0x0003; //清除状态位 return (175 * (float)u16sT / 65535 - 45); } float Convert_BH1750(void) { uint8_t BUF[2]; HAL_I2C_Master_Receive(&hi2c1, BH1750_Addr+1,BUF,2,0xff); return (float)((BUF[0]<<8)+BUF[1])/1.2; }4. 云端对接与调试
4.1 华为云IoT平台配置
在IoT Studio中需要完成以下步骤:
创建产品"SmartAgriculture"
定义物模型:
- 温度(float,单位℃)
- 湿度(float,单位%)
- 光照(int,单位lux)
- 电机状态(bool)
- 补光灯状态(bool)
开发编解码插件:
{ "services": [ { "service_id": "Agriculture", "properties": { "temperature": {"type": "float"}, "humidity": {"type": "float"}, "light": {"type": "int"} } } ] }4.2 数据上报协议设计
我们采用TLV格式封装数据:
- 第1字节:数据类型(0x01温度,0x02湿度,0x03光照)
- 第2-3字节:数据长度
- 后续字节:实际数据
示例数据包:
01 0004 41F00000 // 温度30.0 02 0004 42340000 // 湿度45.0 03 0002 1388 // 光照5000lux云端规则引擎可以配置如下自动化规则:
SELECT temperature, humidity, light FROM Agriculture WHERE temperature > 30 OR light < 100005. 系统优化与问题排查
5.1 常见问题解决方案
问题1:NB-IoT连接不稳定
- 检查SIM卡是否开通NB-IoT服务
- 调整APN设置为"ctnb"
- 增加30秒心跳包机制
问题2:传感器数据异常
- 检查I2C总线是否接触良好
- SHT30需要定期执行复位(0x30A2)
- BH1750避免强光直射导致饱和
问题3:云端数据延迟
- 减小数据上报间隔(建议≥5秒)
- 关闭PSM模式(AT+PSM=0)
- 检查防火墙是否屏蔽5683端口
5.2 性能优化建议
电源管理优化:
- 空闲时进入STOP模式
- 传感器采用间歇工作模式
- 关闭未用外设时钟
通信优化:
- 采用COAP协议替代MQTT
- 启用数据压缩(LZ77算法)
- 批量上报数据(最大140字节)
控制算法改进:
- 增加PID控制逻辑
- 实现模糊控制规则
- 加入设备联动策略
实际部署中发现,在温室面积超过200平米时,建议增加多个温湿度监测点,采用Zigbee组网将数据汇总到主控节点。对于光照控制,需要考虑作物光补偿点,不同生长期设置差异化的光照阈值。