一、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
    }
  }]
}
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐