基于OpenHarmony的智慧农业控制系统-硬件部分【2】
本文介绍了基于小熊派BearPi-HMNano开发板的智慧农业监控系统硬件代码实现。系统通过E53_IA1扩展板驱动温湿度、光照、CO2等传感器,控制水泵、风扇等执行器,实现自动补光、灌溉和通风功能。主程序iot_cloud_oc_sample.c负责初始化硬件、连接WiFi、创建数据采集任务,并与华为云IoT平台通过MQTT协议通信。系统每5-10秒采集一次环境数据,执行自动控制逻辑后上报云端,
一、Gitee项目网址
https://gitee.com/zhengzhuoying/openharmony-smart-agriculture-hardware.git
基于OpenHarmony的智慧农业控制系统-硬件部分: 基于OpenHarmony的智慧农业控制系统-硬件部分-小熊派
二、环境搭建&项目运行
在小熊派官网首页 | 小熊派BearPi下载相应的软件和虚拟机镜像。
十分钟上手教程 | BearPi-HM Nano | 小熊派BearPi
打包编译

三、硬件代码梳理
官方初始化代码参考路径:
bearpi-hm_nano · zhengzhuoying/mvp - 码云 - 开源中国
智慧农业监控系统硬件代码梳理
一、项目结构
text
D12_iot_cloud_oc_agriculture/
├── include/
│ ├── E53_IA1.h # 智慧农业扩展板头文件(传感器/执行器驱动)
│ └── wifi_connect.h # WiFi连接头文件
├── src/
│ ├── E53_IA1.c # 智慧农业扩展板实现(硬件初始化、数据采集、控制)
│ ├── iot_cloud_oc_sample.c # 主程序(系统任务、云平台通信、智能控制逻辑)
│ └── wifi_connect.c # WiFi连接实现(扫描、连接、DHCP)
├── BUILD.gn # 鸿蒙构建配置文件
└── README.md
二、核心文件分析
2.1 E53_IA1.c / E53_IA1.h – 硬件驱动层
主要功能:封装所有板载与外接硬件操作,包括传感器读取和执行器控制。
关键接口函数:
| 函数名 | 功能 |
|---|---|
E53_IA1_Init() |
初始化 I2C、ADC、GPIO、PWM 等外设,设置引脚方向 |
E53_IA1_Read_Data() |
读取 SHT30 温湿度和 BH1750 光照数据 |
Read_CO2_Sensor() |
通过 ADC 读取 JW01-CO2 浓度 |
Read_Soil_Sensor() |
读取模拟土壤温湿度(本项目通过 SHT30 映射) |
Led_Set_Brightness(uint8_t duty) |
设置 LED 补光灯 PWM 占空比(0~100%) |
Motor_StatusSet(uint8_t status) |
控制风扇启停(GPIO_8) |
Pump_StatusSet(uint8_t status) |
控制水泵启停(GPIO_4) |
Valve_StatusSet(uint8_t status) |
控制水阀启停(GPIO_5) |
Servo_Set_Angle(uint8_t angle) |
设置舵机角度(0~180°,PWM 50Hz) |
硬件映射(根据系统设计文档):
| 外设 | 引脚/接口 | 驱动函数 |
|---|---|---|
| SHT30 | I2C (GPIO2/GPIO3) | E53_IA1_Read_Data() |
| BH1750 | I2C (GPIO2/GPIO3) | E53_IA1_Read_Data() |
| CO₂传感器 | ADC GPIO13 | Read_CO2_Sensor() |
| LED | PWM GPIO9 | Led_Set_Brightness() |
| 水泵 | GPIO4 | Pump_StatusSet() |
| 水阀 | GPIO5 | Valve_StatusSet() |
| 风扇 | GPIO8 | Motor_StatusSet() |
| 舵机 | PWM GPIO7 | Servo_Set_Angle() |
2.2 iot_cloud_oc_sample.c – 主程序与业务逻辑
主要功能:
-
系统初始化(硬件、WiFi、MQTT)
-
创建数据采集与控制任务
-
实现智能联动逻辑(自动补光、自动灌溉、自动通风)
-
与华为云 IoT 平台通信(MQTT 上报/订阅)
关键任务与函数:
| 函数/任务 | 功能 |
|---|---|
app_main() |
系统入口,初始化各模块,创建 WifiConnectTask 和 task_sensor_entry |
WifiConnectTask() |
连接指定的 WiFi 网络(SSID + PASSWORD) |
task_sensor_entry() |
主循环(每 5~10 秒执行一次):采集传感器 → 执行自动控制逻辑 → 上报数据到云平台 |
deal_cmd_msg() |
MQTT 命令回调,解析云平台下发的控制指令(如 SET_PUMP_ON)并调用相应硬件驱动 |
oc_mqtt_profile_propertyreport() |
将环境数据封装为 JSON,发布到 $oc/devices/{id}/sys/properties/report |
智能控制逻辑(在 task_sensor_entry 中实现):
| 控制项 | 触发条件 | 动作 |
|---|---|---|
| 自动补光 | 光照 < 200 lux | 调用 Led_Set_Brightness(),亮度与光照差值成比例 |
| 自动灌溉(土壤) | 模拟土壤湿度 < 40% | 调用 Valve_StatusSet(ON) |
| 自动灌溉(环境) | 环境湿度 < 40% | 调用 Pump_StatusSet(ON);>60% 则关闭 |
| 自动通风 | CO₂ > 1500 ppm | 风扇开启 + 舵机转 90° 打开通风口;CO₂ < 1400 ppm 时恢复 |
2.3 wifi_connect.c / wifi_connect.h – 网络连接层
主要功能:
-
初始化 WiFi 站模式
-
扫描并连接预配置的 AP
-
获取 IP 地址(DHCP)
关键函数:
| 函数名 | 功能 |
|---|---|
WifiInit() |
启动 WiFi 任务,注册回调 |
SelectWifi() |
从扫描结果中匹配目标 SSID |
WaitConnectResult() |
阻塞等待连接成功或超时 |
三、系统运行流程
text
开机
│
▼
硬件初始化(E53_IA1_Init)
│
├─ I2C 初始化(SHT30, BH1750)
├─ ADC 初始化(CO₂传感器)
├─ GPIO 初始化(水泵、水阀、风扇 → 默认关闭)
└─ PWM 初始化(LED、舵机)
│
▼
WiFi 连接(WifiInit → SelectWifi → WaitConnectResult)
│
▼
MQTT 连接华为云(订阅命令主题)
│
▼
创建任务 task_sensor_entry(死循环,周期 5~10 秒)
│
├─ 读取所有传感器(E53_IA1_Read_Data、Read_CO2_Sensor 等)
├─ 执行自动控制逻辑(补光、灌溉、通风)
├─ 打包 JSON 上报云平台
└─ 延时
│
▼
(中断)收到云平台命令 → deal_cmd_msg → 调用对应硬件控制函数
四、关键控制逻辑代码片段
c
// task_sensor_entry 中的自动控制部分
void auto_control(float light, float soil_humidity, float air_humidity, int co2) {
// 自动补光
if (light < 200) {
uint8_t duty = (200 - light) * 100 / 200;
Led_Set_Brightness(duty);
} else {
Led_Set_Brightness(0);
}
// 自动灌溉(土壤)
if (soil_humidity < 40) {
Valve_StatusSet(1); // 开启水阀
} else if (soil_humidity > 65) {
Valve_StatusSet(0); // 关闭水阀
}
// 自动加湿(环境)
if (air_humidity < 40) {
Pump_StatusSet(1);
} else if (air_humidity > 60) {
Pump_StatusSet(0);
}
// CO2 自动通风
if (co2 > 1500) {
Motor_StatusSet(1); // 风扇开
Servo_Set_Angle(90); // 通风口打开
} else if (co2 < 1400) {
Motor_StatusSet(0); // 风扇关
Servo_Set_Angle(0); // 通风口关闭
}
}
五、云平台通信参数
-
协议:MQTT v3.1.1 over TCP (1883) 或 TLS (8883)
-
服务器:
117.78.5.125 -
客户端 ID:
{device_id}_{timestamp} -
订阅主题:
$oc/devices/{device_id}/sys/commands/# -
发布主题:
$oc/devices/{device_id}/sys/properties/report -
上报 JSON 格式:
json
{
"services": [{
"service_id": "agriculture",
"properties": {
"temperature": 23.5,
"humidity": 58.2,
"light_intensity": 320,
"co2_ppm": 812,
"soil_moisture": 45,
"soil_temperature": 22.1
}
}]
}
更多推荐



所有评论(0)