这个基于STM32的WiFi远程温控风扇系统是我指导过的一个典型毕业设计项目,它完美结合了嵌入式系统开发、传感器技术和物联网应用。系统采用STM32F103RCT6作为主控芯片,通过DHT11温湿度传感器实时监测环境参数,利用ESP8266 WiFi模块实现远程控制功能。
在实际应用中,我发现这个系统特别适合需要远程环境监控的场景,比如实验室设备散热、小型温室调控等。相比传统温控方案,它最大的亮点在于实现了"自动+远程"的双重控制模式,既保证了基础功能的可靠性,又增加了远程干预的灵活性。
硬件选型是项目成功的关键,经过多次测试验证,最终确定的硬件配置如下:
主控芯片:STM32F103RCT6
温湿度传感器:DHT11
WiFi模块:ESP-01S
显示模块:1.44寸SPI接口LCD
提示:在PCB布局时,建议将DHT11传感器与主控板分离,通过排线连接,这样可以避免主板发热影响温度测量精度。
系统工作流程可以分为三个主要环节:
数据采集层:
控制决策层:
执行输出层:
DHT11传感器接口设计要点:
c复制// 典型连接方式
VCC ---- 3.3V
DATA --- PA1 (需接4.7K上拉电阻)
GND ---- GND
实际调试中发现,DATA线上拉电阻值对通信稳定性影响很大。经过多次测试,4.7KΩ是最佳选择,既能保证信号质量,又不会过度消耗电流。
ESP-01S连接方案:
code复制VCC ---- 3.3V (注意:必须使用独立LDO供电)
EN ---- 3.3V (通过10K电阻)
GPIO0 -- 悬空(下载模式时接地)
GPIO2 -- 悬空
RXD ---- PA9 (STM32的TX)
TXD ---- PA10 (STM32的RX)
GND ---- GND
注意:ESP8266模块在发送数据时瞬时电流可能达到200mA,建议使用AMS1117-3.3等独立稳压芯片供电,避免因电流不足导致模块重启。
采用NPN三极管驱动方案:
code复制STM32 PWM引脚 --> 1K电阻 --> NPN基极
NPN集电极 --> 风扇负极
风扇正极 --> 5V电源
NPN发射极 --> GND
在风扇两端并联一个1N4007续流二极管,防止断电时反向电动势损坏电路。
系统软件采用模块化设计,主程序流程图如下:

关键代码结构:
c复制int main(void)
{
// 硬件初始化
System_Init();
while(1)
{
// 读取传感器数据
Read_Sensors();
// 处理通信数据
Process_Communication();
// 模式判断与执行
if(auto_mode)
Auto_Control();
else
Manual_Control();
// 更新显示
Update_Display();
}
}
DHT11驱动代码要点:
c复制// 启动信号发送
void DHT11_Start(void)
{
SET_OUTPUT(); // 设置为输出模式
OUTPUT_LOW(); // 拉低总线
Delay_ms(18); // 保持至少18ms
OUTPUT_HIGH(); // 释放总线
Delay_us(30); // 等待20-40us
}
// 等待响应
uint8_t DHT11_Wait_Response(void)
{
uint8_t retry = 0;
SET_INPUT(); // 设置为输入模式
while(INPUT_READ() && retry<100)
{
retry++;
Delay_us(1);
}
if(retry>=100) return 1;
else return 0;
}
经验分享:DHT11的时序要求非常严格,在实际调试中发现,us级延时最好使用定时器实现,简单的for循环延时在不同优化等级下会产生较大偏差。
风扇转速控制采用分段式PWM调节:
c复制#define PWM_PERIOD 500 // PWM周期(单位:ms)
void Fan_Control(float temperature)
{
uint16_t duty_cycle = 0;
if(temperature < 20)
duty_cycle = 0; // 关闭风扇
else if(temperature < 25)
duty_cycle = 100; // 20%占空比
else if(temperature < 30)
duty_cycle = 250; // 50%占空比
else
duty_cycle = 500; // 全速运行
TIM_SetCompare1(TIM3, duty_cycle);
}
这种分段式控制简单可靠,避免了频繁调节带来的风扇抖动问题。
模块初始化步骤:
实际调试中发现,ESP8266对AT指令的响应时间有较大波动,建议每条指令后至少等待500ms再发送下一条。
自定义的简单通信协议格式:
code复制[起始符][数据长度][命令字][参数][校验和]
典型控制命令示例:
code复制// 设置手动模式
$04M1XX
// 设置自动模式
$04A0XX
// 调节风扇速度
$05S80XX (80%转速)
校验和采用简单的累加和校验,提高通信可靠性。
在项目开发过程中,我总结了以下常见问题及解决方案:
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| DHT11读数不稳定 | 电源干扰或时序不准 | 增加电源滤波电容,校准延时函数 |
| ESP8266频繁掉线 | 电源供电不足 | 使用独立3.3V稳压芯片,增加1000uF电容 |
| 风扇启动困难 | 启动电流不足 | 改用MOSFET驱动,增加预启动电路 |
| LCD显示乱码 | SPI时钟相位不对 | 调整SPI初始化参数,降低时钟频率 |
电源管理优化:
通信可靠性提升:
用户体验改进:
这个基础系统还有很大的扩展空间:
多传感器融合:
云平台对接:
智能算法升级:
这个项目从硬件选型到软件开发都经过精心设计,特别适合作为嵌入式系统学习的实践案例。在实际应用中,系统运行稳定,控制效果良好,完全达到了毕业设计的要求。