基于STM32F103C8T6的DHT11温湿度显示在OLED屏幕上
2025-08-20 01:08:44作者:温艾琴Wonderful
1. 适用场景
基于STM32F103C8T6微控制器的DHT11温湿度OLED显示项目是一个极具实用价值的嵌入式系统应用。该项目主要适用于以下场景:
环境监测系统:适用于家庭、办公室、实验室等场所的温湿度实时监测,为用户提供舒适度参考。
教学实验平台:作为嵌入式系统学习的经典案例,涵盖了传感器数据采集、OLED显示驱动、串口通信等多个重要知识点。
智能家居应用:可作为智能温控系统的基础模块,为空调、加湿器等设备提供环境数据支持。
农业物联网:在温室大棚、养殖场等农业环境中进行环境参数监测。
工业监控:在需要温湿度监控的工业生产环境中作为低成本监测方案。
2. 适配系统与环境配置要求
硬件要求
- 主控芯片:STM32F103C8T6最小系统板(Blue Pill开发板)
- 温湿度传感器:DHT11数字温湿度传感器
- 显示设备:0.96寸或1.3寸OLED显示屏(SSD1306驱动芯片)
- 电源供应:5V USB供电或3.3V直流电源
- 连接线材:杜邦线若干
软件环境
- 开发环境:Keil MDK-ARM、STM32CubeIDE或PlatformIO
- 编程语言:C语言
- 库文件支持:
- STM32标准外设库或HAL库
- DHT11传感器驱动库
- SSD1306 OLED显示驱动库
- 烧录工具:ST-Link V2编程器或USB转串口工具
引脚连接配置
- DHT11数据线连接到STM32的GPIO引脚(如PA0)
- OLED显示屏使用I2C接口连接(SCL→PB6,SDA→PB7)
- 电源连接:VCC→3.3V,GND→GND
3. 资源使用教程
步骤一:硬件连接
- 将DHT11传感器的VCC引脚连接到3.3V电源
- 将DHT11的GND引脚连接到地线
- 将DHT11的数据引脚连接到STM32的GPIO引脚(配置为上拉输入模式)
- OLED显示屏的VCC和GND分别连接到3.3V和地线
- OLED的SCL和SDA引脚连接到STM32的I2C接口引脚
步骤二:软件开发环境搭建
- 安装STM32开发环境(Keil或STM32CubeIDE)
- 创建新的STM32工程,选择STM32F103C8T6作为目标芯片
- 配置系统时钟为72MHz
- 启用I2C1外设(用于OLED通信)
- 配置GPIO引脚(DHT11数据引脚和I2C引脚)
步骤三:代码实现
// DHT11数据读取函数
uint8_t DHT11_ReadData(float *temperature, float *humidity) {
// 实现DHT11通信协议
// 发送开始信号
// 读取40位数据
// 校验数据完整性
// 转换温湿度值
}
// OLED显示函数
void OLED_DisplayData(float temp, float humi) {
// 清屏
OLED_Clear();
// 显示标题
OLED_ShowString(0, 0, "Temp & Humidity");
// 显示温度值
OLED_ShowString(0, 2, "Temperature:");
OLED_ShowNum(80, 2, (int)temp, 2);
OLED_ShowString(100, 2, "C");
// 显示湿度值
OLED_ShowString(0, 4, "Humidity:");
OLED_ShowNum(60, 4, (int)humi, 2);
OLED_ShowString(80, 4, "%");
}
// 主循环
while(1) {
float temperature, humidity;
if(DHT11_ReadData(&temperature, &humidity) == SUCCESS) {
OLED_DisplayData(temperature, humidity);
}
HAL_Delay(2000); // 每2秒更新一次
}
步骤四:编译与烧录
- 编译工程,确保无错误
- 使用ST-Link连接开发板
- 烧录程序到STM32芯片
- 复位运行,观察OLED显示效果
4. 常见问题及解决办法
问题一:DHT11读取数据失败
症状:始终读取不到正确的温湿度数据,返回值错误 解决方法:
- 检查DHT11电源电压是否为3.3V-5V
- 确认数据引脚配置为上拉输入模式
- 检查时序控制,确保起始信号和读取时序准确
- 增加重试机制,多次读取取平均值
问题二:OLED显示屏不亮或无显示
症状:OLED屏幕无显示或显示异常 解决方法:
- 检查I2C地址是否正确(通常为0x78或0x7A)
- 确认SCL和SDA引脚连接正确
- 检查电源电压是否为3.3V
- 验证I2C初始化配置是否正确
问题三:显示数据跳动或不稳定
症状:温湿度数值频繁跳动,显示不稳定 解决方法:
- 增加软件滤波算法(如滑动平均滤波)
- 检查电源稳定性,避免电压波动
- 确保DHT11传感器远离热源和气流
- 适当增加读取间隔时间
问题四:编译错误或链接错误
症状:工程编译时出现未定义引用或链接错误 解决方法:
- 检查所有必要的源文件是否添加到工程中
- 确认头文件路径设置正确
- 检查库函数版本兼容性
- 清理工程后重新编译
问题五:功耗过高
症状:系统运行电流较大,电池续航时间短 解决方法:
- 在数据读取间隔进入低功耗模式
- 优化显示刷新频率
- 关闭未使用的外设时钟
- 使用STM32的睡眠模式
通过以上详细的配置和使用指南,您可以快速搭建一个稳定可靠的温湿度监测系统。该项目不仅具有实用价值,更是学习STM32嵌入式开发的优秀实践案例。