STM32与华为云IoT的智能浇花系统设计
物联网技术通过传感器网络与云端协同,实现物理世界的数字化与智能化控制。其核心原理是将各类传感器数据通过无线通信模块上传至云平台,结合边缘计算与远程控制技术,构建闭环控制系统。在智能农业领域,这种技术可显著提升资源利用效率,解决传统种植养护中的经验依赖问题。以STM32微控制器与华为云IoT平台为例,通过集成温湿度、光照、土壤等多传感器数据,配合MQTT协议通信,可构建具备自动决策能力的智能浇灌系统
基于STM32与华为云IoT的智能浇花系统设计
1. 项目概述
1.1 系统架构
本智能浇花系统采用STM32F1系列微控制器作为核心处理器,通过多传感器协同工作实现对植物生长环境的实时监测与智能调控。系统硬件架构包含以下关键组件:
- 传感层 :DHT11温湿度传感器、BH1750光照传感器、模拟式土壤湿度传感器
- 执行层 :继电器控制模块驱动水泵
- 通信层 :ESP8266 WiFi模块实现云端连接
- 交互层 :1.44寸LCD显示屏提供本地信息反馈
系统通过UART串口驱动ESP8266模块接入互联网,基于MQTT协议与华为云IoT平台建立双向通信。用户可通过Qt开发的跨平台应用(Android/Win)远程监控数据并控制水泵,实现手动/自动双模式浇灌。
1.2 设计背景
现代城市生活中,家庭和办公室绿植养护面临以下痛点:
- 时间成本高 :快节奏生活导致用户难以投入足够时间进行精细养护
- 经验依赖强 :传统浇水方式依赖人工观察和经验判断
- 资源浪费 :缺乏精确控制易导致浇水过量或不足
- 远程管理难 :出差或旅行期间无法及时照料植物
本系统通过物联网技术解决上述问题,实现植物养护的智能化与自动化。
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
数据采集流程:
- MCU拉低总线18ms启动信号
- 等待传感器响应信号
- 接收40bit数据(16bit湿度+16bit温度+8bit校验和)
- 校验数据有效性
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 执行机构设计
水泵控制电路采用继电器驱动方案:
-
继电器选型 :
- 型号:SRD-05VDC-SL-C
- 线圈电压:5V
- 触点容量:10A 250VAC
-
驱动电路 :
- STM32 GPIO → 1kΩ电阻 → S8050 NPN三极管
- 继电器线圈并联1N4007续流二极管
-
安全设计 :
- 最大工作时间限制(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稳压芯片为各模块供电:
-
电源分配 :
- 3.3V:STM32、ESP8266、传感器
- 5V:继电器线圈、LCD背光
-
滤波设计 :
- 输入输出端均并联100μF电解电容和100nF陶瓷电容
- 每个IC电源引脚就近放置0.1μF去耦电容
-
功耗估算 :
- 待机电流:约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 性能优化
-
低功耗设计 :
- 空闲时STM32进入STOP模式
- 传感器间歇采样(光照每10秒一次)
- LCD背光自动关闭(30秒无操作)
-
通信优化 :
- 数据压缩传输(只发送变化值)
- 心跳包间隔动态调整(网络差时延长)
-
稳定性增强 :
- 看门狗定时器(独立硬件看门狗)
- 传感器故障自动检测与恢复
- 网络断开本地缓存数据
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元(小批量)
更多推荐



所有评论(0)