首页
/ 基于STM32F103C8T6的DHT11温湿度显示在OLED屏幕上

基于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. 资源使用教程

步骤一:硬件连接

  1. 将DHT11传感器的VCC引脚连接到3.3V电源
  2. 将DHT11的GND引脚连接到地线
  3. 将DHT11的数据引脚连接到STM32的GPIO引脚(配置为上拉输入模式)
  4. OLED显示屏的VCC和GND分别连接到3.3V和地线
  5. OLED的SCL和SDA引脚连接到STM32的I2C接口引脚

步骤二:软件开发环境搭建

  1. 安装STM32开发环境(Keil或STM32CubeIDE)
  2. 创建新的STM32工程,选择STM32F103C8T6作为目标芯片
  3. 配置系统时钟为72MHz
  4. 启用I2C1外设(用于OLED通信)
  5. 配置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秒更新一次
}

步骤四:编译与烧录

  1. 编译工程,确保无错误
  2. 使用ST-Link连接开发板
  3. 烧录程序到STM32芯片
  4. 复位运行,观察OLED显示效果

4. 常见问题及解决办法

问题一:DHT11读取数据失败

症状:始终读取不到正确的温湿度数据,返回值错误 解决方法

  • 检查DHT11电源电压是否为3.3V-5V
  • 确认数据引脚配置为上拉输入模式
  • 检查时序控制,确保起始信号和读取时序准确
  • 增加重试机制,多次读取取平均值

问题二:OLED显示屏不亮或无显示

症状:OLED屏幕无显示或显示异常 解决方法

  • 检查I2C地址是否正确(通常为0x78或0x7A)
  • 确认SCL和SDA引脚连接正确
  • 检查电源电压是否为3.3V
  • 验证I2C初始化配置是否正确

问题三:显示数据跳动或不稳定

症状:温湿度数值频繁跳动,显示不稳定 解决方法

  • 增加软件滤波算法(如滑动平均滤波)
  • 检查电源稳定性,避免电压波动
  • 确保DHT11传感器远离热源和气流
  • 适当增加读取间隔时间

问题四:编译错误或链接错误

症状:工程编译时出现未定义引用或链接错误 解决方法

  • 检查所有必要的源文件是否添加到工程中
  • 确认头文件路径设置正确
  • 检查库函数版本兼容性
  • 清理工程后重新编译

问题五:功耗过高

症状:系统运行电流较大,电池续航时间短 解决方法

  • 在数据读取间隔进入低功耗模式
  • 优化显示刷新频率
  • 关闭未使用的外设时钟
  • 使用STM32的睡眠模式

通过以上详细的配置和使用指南,您可以快速搭建一个稳定可靠的温湿度监测系统。该项目不仅具有实用价值,更是学习STM32嵌入式开发的优秀实践案例。