基于STM32与华为云IoT的智能浇花系统设计

1. 项目概述

1.1 系统架构

本智能浇花系统采用STM32F1系列微控制器作为核心处理器,通过多传感器协同工作实现对植物生长环境的实时监测与智能调控。系统硬件架构包含以下关键组件:

  • 传感层 :DHT11温湿度传感器、BH1750光照传感器、模拟式土壤湿度传感器
  • 执行层 :继电器控制模块驱动水泵
  • 通信层 :ESP8266 WiFi模块实现云端连接
  • 交互层 :1.44寸LCD显示屏提供本地信息反馈

系统通过UART串口驱动ESP8266模块接入互联网,基于MQTT协议与华为云IoT平台建立双向通信。用户可通过Qt开发的跨平台应用(Android/Win)远程监控数据并控制水泵,实现手动/自动双模式浇灌。

1.2 设计背景

现代城市生活中,家庭和办公室绿植养护面临以下痛点:

  1. 时间成本高 :快节奏生活导致用户难以投入足够时间进行精细养护
  2. 经验依赖强 :传统浇水方式依赖人工观察和经验判断
  3. 资源浪费 :缺乏精确控制易导致浇水过量或不足
  4. 远程管理难 :出差或旅行期间无法及时照料植物

本系统通过物联网技术解决上述问题,实现植物养护的智能化与自动化。

2. 硬件设计

2.1 主控电路

系统采用STM32F103C8T6作为主控制器,其硬件资源配置如下:

外设 功能 接口类型
ADC1 土壤湿度传感器采集 模拟输入
I2C1 BH1750光照传感器 I2C总线
GPIO DHT11温湿度传感器 单总线
USART1 ESP8266通信 串口
GPIOB 继电器控制 推挽输出

主控电路设计要点:

  • 采用8MHz外部晶振提供系统时钟
  • 复位电路包含10kΩ上拉电阻和100nF电容
  • 调试接口采用SWD协议,占用PA13(SCK)和PA14(SDA)

2.2 传感器模块

2.2.1 DHT11温湿度传感器
  • 供电电压:3.3V-5.5V
  • 测量范围:温度0-50℃(±2℃精度),湿度20-90%RH(±5%精度)
  • 接口:单总线协议
  • 硬件连接:
    • VCC → 3.3V
    • DATA → PA1(配置为上拉输入)
    • GND → GND

数据采集流程:

  1. MCU拉低总线18ms启动信号
  2. 等待传感器响应信号
  3. 接收40bit数据(16bit湿度+16bit温度+8bit校验和)
  4. 校验数据有效性
2.2.2 BH1750光照传感器
  • 测量范围:1-65535 lux
  • 分辨率:1 lx
  • 接口:I2C(地址0x23)
  • 工作模式:
    • 连续高分辨率模式(0x10)
    • 一次高分辨率模式(0x20)

数据读取代码示例:

#define BH1750_ADDR 0x23
#define BH1750_MODE 0x10

void BH1750_Init(void) {
    uint8_t cmd = BH1750_MODE;
    HAL_I2C_Master_Transmit(&hi2c1, BH1750_ADDR, &cmd, 1, 100);
}

float BH1750_ReadLight(void) {
    uint8_t data[2];
    HAL_I2C_Master_Receive(&hi2c1, BH1750_ADDR, data, 2, 100);
    return (data[0]<<8 | data[1]) / 1.2;
}
2.2.3 土壤湿度传感器
  • 类型:电阻式模拟输出
  • 工作电压:3.3V-5V
  • 输出信号:0-3V模拟电压(湿度越大电压越低)
  • ADC配置:
    • 12位分辨率
    • 采样周期:239.5周期
    • 参考电压:3.3V

湿度转换公式:

湿度百分比 = (1 - (ADC值/4095)) × 100%

2.3 执行机构设计

水泵控制电路采用继电器驱动方案:

  1. 继电器选型

    • 型号:SRD-05VDC-SL-C
    • 线圈电压:5V
    • 触点容量:10A 250VAC
  2. 驱动电路

    • STM32 GPIO → 1kΩ电阻 → S8050 NPN三极管
    • 继电器线圈并联1N4007续流二极管
  3. 安全设计

    • 最大工作时间限制(10秒)
    • 两次灌溉最小间隔(30秒)
    • 过流保护(自恢复保险丝)

2.4 通信模块

ESP8266-01S WiFi模块配置:

引脚 连接 功能
VCC 3.3V 电源
GND GND
TX PA10 STM32 USART1 RX
RX PA9 STM32 USART1 TX
CH_PD 3.3V 使能
RST NC 复位

AT指令初始化序列:

AT+CWMODE=1 // STA模式
AT+CWJAP="SSID","password" // 连接WiFi
AT+CIPSTART="TCP","iot.huaweicloud.com",1883 // 建立TCP连接

2.5 电源设计

系统采用5V USB供电,通过AMS1117-3.3稳压芯片为各模块供电:

  1. 电源分配

    • 3.3V:STM32、ESP8266、传感器
    • 5V:继电器线圈、LCD背光
  2. 滤波设计

    • 输入输出端均并联100μF电解电容和100nF陶瓷电容
    • 每个IC电源引脚就近放置0.1μF去耦电容
  3. 功耗估算

    • 待机电流:约50mA
    • 水泵工作电流:约200mA

3. 软件设计

3.1 系统工作流程

graph TD
    A[系统初始化] --> B[传感器数据采集]
    B --> C[数据处理与显示]
    C --> D[云端通信]
    D --> E[控制决策]
    E -->|自动模式| F[阈值判断]
    E -->|手动模式| G[执行指令]
    F --> H[控制水泵]
    G --> H
    H --> B

3.2 主程序架构

int main(void) {
    // 硬件初始化
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_USART1_UART_Init();
    MX_I2C1_Init();
    MX_ADC1_Init();
    
    // 外设初始化
    LCD_Init();
    DHT11_Init();
    BH1750_Init();
    ESP8266_Init();
    
    // 主循环
    while (1) {
        Sensor_Update();  // 传感器数据采集
        Display_Update(); // LCD显示更新
        Cloud_Process();  // 云端通信处理
        Control_Logic();  // 控制逻辑执行
        HAL_Delay(1000);  // 1秒周期
    }
}

3.3 关键算法实现

3.3.1 自动灌溉逻辑
void Auto_Watering(void) {
    if(System.Mode == AUTO) {
        // 土壤湿度低于阈值且光照充足
        if(Soil_Humidity < Soil_Threshold && Light_Intensity > 500) {
            Pump_On();
            HAL_Delay(Watering_Time);
            Pump_Off();
        }
    }
}
3.3.2 数据滤波算法

采用滑动平均滤波处理传感器数据:

#define FILTER_LEN 5

float Moving_Average(float new_data) {
    static float buffer[FILTER_LEN] = {0};
    static uint8_t index = 0;
    static float sum = 0;
    
    sum -= buffer[index];
    buffer[index] = new_data;
    sum += buffer[index];
    index = (index + 1) % FILTER_LEN;
    
    return sum / FILTER_LEN;
}

3.4 华为云IoT接入

3.4.1 MQTT协议实现
void MQTT_Publish_Data(void) {
    char payload[100];
    sprintf(payload, 
        "{\"temp\":%.1f,\"humi\":%.1f,\"light\":%.0f,\"soil\":%.0f,\"pump\":%d}",
        Temperature, Humidity, Light_Intensity, Soil_Humidity, Pump_Status);
    
    char topic[50] = "/sys/a1b2c3d4/device1/thing/event/property/post";
    
    ESP8266_MQTT_Publish(topic, payload);
}
3.4.2 设备影子同步
{
  "state": {
    "reported": {
      "temperature": 25.3,
      "humidity": 45,
      "light": 1200,
      "soil": 63,
      "pump": 0
    },
    "desired": {
      "pump": 1
    }
  }
}

3.5 跨平台应用设计

Qt应用核心类结构:

class MainWindow : public QMainWindow {
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = nullptr);
    
private slots:
    void updateSensorData(const QJsonObject &data);
    void on_pumpButton_clicked();
    
private:
    QMqttClient *m_client;
    QChartView *m_chartView;
    QLabel *m_tempLabel;
    QLabel *m_humiLabel;
    QPushButton *m_pumpButton;
};

4. 系统测试与优化

4.1 功能测试

测试项 测试方法 预期结果 实际结果
温湿度采集 用标准温湿度计对比 误差±2℃/±5%RH 符合
光照采集 用照度计对比 误差±5% 符合
土壤湿度 用标准土壤湿度仪对比 误差±3% 符合
自动灌溉 设置阈值触发 达到阈值自动启停水泵 符合
远程控制 通过APP发送指令 水泵即时响应 延迟<1s

4.2 性能优化

  1. 低功耗设计

    • 空闲时STM32进入STOP模式
    • 传感器间歇采样(光照每10秒一次)
    • LCD背光自动关闭(30秒无操作)
  2. 通信优化

    • 数据压缩传输(只发送变化值)
    • 心跳包间隔动态调整(网络差时延长)
  3. 稳定性增强

    • 看门狗定时器(独立硬件看门狗)
    • 传感器故障自动检测与恢复
    • 网络断开本地缓存数据

4.3 实测数据

不同环境下的系统响应:

环境条件 土壤湿度变化 响应时间
25℃/50%RH 40%→30% 2秒
35℃/30%RH 45%→25% 1秒
15℃/70%RH 50%→40% 3秒

5. BOM清单与成本分析

器件 型号 数量 单价(元)
MCU STM32F103C8T6 1 12.5
WiFi模块 ESP8266-01S 1 8.0
温湿度传感器 DHT11 1 2.5
光照传感器 BH1750 1 3.8
土壤传感器 模拟式 1 5.5
LCD 1.44寸SPI 1 15.0
继电器 SRD-05VDC 1 2.0
PCB 双面板 1 5.0
其他 电阻电容等 - 3.0

总成本 :约57.3元(小批量)

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐