1. 项目概述
这个基于STM32的WIFI远程温控风扇系统是一个典型的嵌入式物联网应用项目,特别适合作为电子、自动化等相关专业的毕业设计选题。系统通过STM32F103RCT6微控制器作为核心处理器,结合DHT11温湿度传感器和ESP8266 WIFI模块,实现了环境温度的实时监测和风扇的智能控制。
这个项目的亮点在于它同时具备本地自动控制和远程手动控制两种模式,既体现了嵌入式系统的实时性特点,又融入了物联网的远程控制功能,是一个很好的嵌入式与物联网结合的实践案例。
从技术难度来看,这个项目涉及了嵌入式系统开发、传感器数据采集、无线通信等多个技术领域,但每个部分的技术门槛都不算太高,非常适合本科阶段的毕业设计。项目整体工作量适中,大约需要2-3周的开发时间,既不会太过简单而显得没有技术含量,也不会过于复杂导致难以完成。
2. 系统架构设计
2.1 硬件组成
系统硬件主要由以下几个核心模块组成:
-
主控模块:STM32F103RCT6开发板
- 采用ARM Cortex-M3内核,主频72MHz
- 具有丰富的GPIO、USART、SPI、I2C等外设接口
- 内置256KB Flash和48KB SRAM,资源充足
-
传感器模块:
- DHT11温湿度传感器(单总线接口)
- BH1750光照强度传感器(I2C接口)
-
通信模块:
- ESP-01S WIFI模块(基于ESP8266芯片)
- 支持802.11 b/g/n协议
- 内置TCP/IP协议栈
-
执行机构:
- 5V直流风扇
- 继电器模块(用于控制风扇开关)
-
人机交互:
- 1.44寸LCD显示屏(SPI接口)
- 按键输入
2.2 系统工作原理
系统工作流程可以分为以下几个主要环节:
-
数据采集:DHT11传感器定期采集环境温湿度数据,通过单总线协议传输给STM32。
-
数据处理:STM32对采集到的数据进行处理和分析,根据预设的温度阈值判断是否需要启动风扇。
-
控制执行:当温度超过设定阈值时,STM32通过GPIO控制继电器,从而控制风扇的启停。
-
远程通信:ESP8266模块建立WIFI连接,将系统状态上传到服务器,并接收来自客户端的控制指令。
-
人机交互:LCD显示屏实时显示当前环境参数和系统状态,用户也可以通过按键进行本地设置。
3. 硬件设计与选型
3.1 主控芯片选型
STM32F103RCT6是这个项目的理想选择,主要原因如下:
-
性能适中:72MHz的主频和充足的存储资源完全能够满足温控系统的需求。
-
外设丰富:
- 3个USART接口(连接WIFI模块和调试)
- 2个SPI接口(连接LCD显示屏)
- 2个I2C接口(连接光照传感器)
- 多达51个GPIO
-
开发资源丰富:STM32系列有完善的开发工具链和丰富的学习资料,降低了开发难度。
-
成本合理:相比更高端的STM32系列,F103系列价格更为亲民,适合学生项目。
3.2 传感器选型
3.2.1 DHT11温湿度传感器
DHT11是一款经典的温湿度一体数字传感器,其主要特点包括:
- 测量范围:温度0-50℃(±2℃精度),湿度20-90%RH(±5%RH精度)
- 单总线接口,只需一个GPIO即可通信
- 低功耗(工作电流0.5mA)
- 响应速度快(采样周期≥1s)
在实际使用中,DHT11的采样间隔建议设置为2秒以上,过快的采样会导致数据不准确。另外,DHT11对电源稳定性要求较高,建议在VCC引脚附近添加一个0.1μF的滤波电容。
3.2.2 BH1750光照传感器
BH1750是一款数字式光照强度传感器,主要特性:
- 测量范围:1-65535 lux
- I2C接口,通信简单
- 光谱灵敏度接近人眼
- 内置16位AD转换器
3.3 WIFI通信模块
ESP-01S是基于ESP8266芯片的WIFI模块,选择它的原因包括:
- 性价比高:价格低廉但功能强大
- 开发简单:支持AT指令控制,也可以直接编程
- 性能稳定:支持STA/AP/STA+AP三种模式
- 功耗低:深度睡眠模式下电流仅20μA
在实际应用中,ESP8266模块有几种常见的连接方式:
- AT指令模式:STM32通过串口发送AT指令控制模块
- Lua脚本编程:直接在模块上编写业务逻辑
- Arduino开发:使用Arduino IDE进行开发
对于这个项目,推荐使用AT指令模式,因为开发难度相对较低,且STM32可以完全控制通信流程。
4. 软件设计与实现
4.1 系统软件架构
系统软件采用模块化设计,主要分为以下几个功能模块:
- 主控模块:负责系统初始化和任务调度
- 传感器驱动:DHT11和BH1750的驱动程序
- WIFI通信:ESP8266的AT指令处理
- 人机交互:LCD显示和按键处理
- 控制逻辑:温度控制和风扇驱动
4.2 关键代码解析
4.2.1 主程序流程
c复制int main(void)
{
// 系统初始化
SystemInit();
SysTick_Init();
LCD_Init();
DHT11_Init();
ESP8266_Init();
// 主循环
while(1)
{
// 读取传感器数据
float temp = DHT11_Read_Temperature();
float humi = DHT11_Read_Humidity();
// 更新LCD显示
LCD_Display_Temp_Humi(temp, humi);
// 温度控制逻辑
if(temp > TEMP_THRESHOLD_HIGH)
{
Fan_On();
}
else if(temp < TEMP_THRESHOLD_LOW)
{
Fan_Off();
}
// WIFI通信处理
ESP8266_Process();
// 延时2秒
Delay_ms(2000);
}
}
4.2.2 DHT11驱动实现
DHT11的通信时序较为严格,下面是关键部分的代码:
c复制uint8_t DHT11_Read_Byte(void)
{
uint8_t i, data = 0;
for(i=0; i<8; i++)
{
// 等待低电平结束
while(DHT11_IO_IN() == RESET);
// 延时40us判断高低电平
Delay_us(40);
if(DHT11_IO_IN() == SET)
{
data |= (1 << (7-i)); // 高位在前
}
// 等待高电平结束
while(DHT11_IO_IN() == SET);
}
return data;
}
4.2.3 ESP8266通信处理
ESP8266的AT指令处理流程:
c复制void ESP8266_SendCmd(char *cmd, char *ack, uint16_t timeout)
{
USART_SendString(USART1, cmd);
// 等待响应
uint16_t t = 0;
while(t < timeout)
{
if(USART1_RX_STA & 0x8000) // 接收到数据
{
if(strstr((char*)USART1_RX_BUF, ack) != NULL)
{
USART1_RX_STA = 0;
return; // 收到预期响应
}
USART1_RX_STA = 0;
}
Delay_ms(10);
t += 10;
}
// 超时处理
printf("ESP8266 timeout: %s\r\n", cmd);
}
4.3 温度控制算法
系统采用简单的阈值控制算法:
-
设置两个温度阈值:
- 高温阈值(如30℃):超过此温度启动风扇
- 低温阈值(如25℃):低于此温度关闭风扇
-
为防止风扇频繁启停,设置5℃的回差(Hysteresis)
对于更精确的控制,可以考虑实现PID算法:
c复制// 简易PID控制实现
float PID_Control(float setpoint, float actual)
{
static float integral = 0;
static float last_error = 0;
float error = setpoint - actual;
integral += error;
float derivative = error - last_error;
last_error = error;
return KP * error + KI * integral + KD * derivative;
}
5. 系统调试与优化
5.1 常见问题及解决方法
-
DHT11数据读取失败
- 可能原因:时序不准确、电源不稳定、上拉电阻不合适
- 解决方法:
- 确保时序严格符合规格书要求
- 在VCC和GND之间添加0.1μF电容
- 使用4.7kΩ上拉电阻
-
ESP8266连接不稳定
- 可能原因:电源噪声、天线干扰、AT指令处理不当
- 解决方法:
- 为ESP8266单独供电或添加大容量滤波电容
- 确保天线周围没有金属遮挡
- 增加AT指令响应超时判断
-
继电器触点抖动
- 可能原因:感性负载引起的反电动势
- 解决方法:
- 在继电器线圈两端并联续流二极管
- 在触点两端并联RC吸收电路
5.2 性能优化建议
-
低功耗优化
- 在空闲时段让STM32进入睡眠模式
- 设置ESP8266在非通信时段进入深度睡眠
- 降低传感器采样频率
-
通信可靠性优化
- 实现数据重传机制
- 添加心跳包检测连接状态
- 使用JSON格式封装通信数据
-
用户界面优化
- 添加设置菜单,允许用户调整温度阈值
- 实现历史数据记录和显示功能
- 添加系统状态指示灯
6. 项目扩展与进阶
6.1 功能扩展方向
-
多节点组网
- 通过WIFI组建多个温控节点的监控网络
- 实现集中监控和管理
-
云端数据存储
- 将温度数据上传到云平台
- 实现历史数据查询和分析
-
智能联动控制
- 与空调、加湿器等设备联动
- 基于机器学习算法优化控制策略
6.2 硬件升级方案
-
传感器升级
- 使用更精确的SHT30温湿度传感器
- 添加空气质量传感器
-
通信模块升级
- 改用ESP32模块,支持蓝牙和WIFI双模
- 添加4G通信模块,实现广域网连接
-
人机交互升级
- 改用触摸屏替代按键和LCD
- 添加语音识别和语音提示功能
6.3 软件架构优化
-
引入RTOS
- 使用FreeRTOS实现多任务管理
- 提高系统实时性和可靠性
-
模块化设计
- 采用硬件抽象层(HAL)设计
- 便于移植到其他硬件平台
-
远程固件升级
- 实现OTA(Over-The-Air)升级功能
- 支持远程维护和功能更新
这个STM32 WIFI远程温控风扇系统项目虽然看似简单,但涵盖了嵌入式系统开发的多个关键技术点。通过这个项目的实践,学生可以掌握传感器数据采集、无线通信、控制算法等实用技能,为未来的职业发展打下良好基础。