这个基于STM32的WIFI远程温控风扇系统是我去年指导的一个优秀毕业设计案例,它完美结合了嵌入式系统开发、物联网通信和自动控制技术。系统采用STM32F103RCT6作为主控芯片,通过DHT11温湿度传感器采集环境数据,利用ESP8266模块实现远程控制,最终通过PWM技术驱动风扇实现智能调速。
在实际应用中,这个系统可以很好地解决传统风扇无法根据环境温度自动调节,以及无法远程控制的问题。特别是在实验室、机房等需要恒温环境的场所,这套系统展现出了很高的实用价值。从技术难度来看,它涵盖了嵌入式开发的多个核心知识点,但又不会过于复杂,非常适合作为本科毕业设计的选题。
整个系统的硬件架构可以分为五个主要模块:
主控模块:STM32F103RCT6开发板
传感器模块:
通信模块:ESP8266-01S
显示模块:1.44寸SPI接口LCD
执行机构:直流风扇+继电器模块
系统运行时主要遵循以下流程:
注意:DHT11传感器对时序要求严格,初始化时需要确保有至少18ms的低电平复位信号。
系统采用5V USB供电,通过AMS1117-3.3稳压芯片为MCU和部分模块提供3.3V电源。关键设计要点:
code复制[电源电路示意图]
5V USB -> AMS1117-3.3 -> 3.3V
│
├─ STM32
├─ ESP8266
└─ 传感器
DHT11连接示意图:
code复制VCC ---- 5V
DATA --- PA1 (开漏输出)
GND ---- GND
│
└── 4.7K上拉电阻
ESP8266连接方式:
code复制TXD -- PA3 (USART2_RX)
RXD -- PA2 (USART2_TX)
CH_PD -- 3.3V
RST -- 悬空
采用NPN三极管驱动方案:
code复制PB0 (PWM) -> 1K电阻 -> 2N3904基极
集电极 -> 风扇+
发射极 -> GND
风扇- -> 5V
实测发现:PWM频率在1kHz时风扇运行最平稳,低于500Hz会有明显噪音。
采用分层设计:
code复制应用层:main.c (模式切换、逻辑控制)
│
驱动层:dht11.c / esp8266.c / lcd.c
│
硬件层:STM32标准外设库
DHT11数据读取流程:
c复制// 示例代码片段
uint8_t DHT11_Read_Byte(void) {
uint8_t data = 0;
for(int i=0; i<8; i++) {
while(!GPIO_ReadInputDataBit(DHT11_PORT, DHT11_PIN)); // 等待低电平
Delay_us(30);
if(GPIO_ReadInputDataBit(DHT11_PORT, DHT11_PIN))
data |= (1<<(7-i));
while(GPIO_ReadInputDataBit(DHT11_PORT, DHT11_PIN)); // 等待高电平
}
return data;
}
采用分段线性控制策略:
30℃:100%全速
c复制void Fan_Control(float temp) {
if(temp < 20) {
PWM_SetDuty(0);
}
else if(temp < 25) {
PWM_SetDuty(30);
}
else if(temp < 30) {
PWM_SetDuty(60);
}
else {
PWM_SetDuty(100);
}
}
自定义简单协议格式:
code复制[HEAD][LEN][CMD][DATA][CRC]
典型通信流程:
DHT11无响应
ESP8266连接不稳定
PWM控制异常
数据采集优化
WIFI功耗优化
显示刷新优化
基于现有系统,还可以进行以下方向的扩展:
多节点组网
数据记录功能
智能联动
低功耗设计
在实际部署中,我发现系统的响应速度很大程度上取决于WIFI信号质量。建议在正式环境中:
这个项目虽然不算复杂,但完整涵盖了嵌入式系统开发的各个环节,从硬件选型到软件调试,从传感器驱动到网络通信,是一个非常不错的练手项目。对于初学者来说,我建议先重点掌握DHT11和ESP8266这两个模块的使用,它们是物联网项目中最常用的组件。