1. 项目概述与环境搭建
大家好,今天我来分享一个非常实用的STM32实战项目——用STM32F103驱动DHT11温湿度传感器和OLED显示屏,打造一个完整的温湿度监测系统。这个项目特别适合刚接触STM32的开发者,既能学习硬件接线,又能掌握两种常用通信协议(单总线和I2C)的编程技巧。
我自己在做智能家居项目时经常用到这个组合,DHT11成本低、接线简单,OLED显示清晰又省电,加起来不到20块钱就能搭建一个环境监测终端。实际测试中,这个系统在室内环境下稳定性很好,数据刷新流畅,完全能满足日常监测需求。
需要准备的硬件材料:
- STM32F103C8T6核心板(性价比高,资源足够)
- DHT11温湿度传感器模块(建议选带板载上拉电阻的版本)
- 0.96英寸OLED显示屏(I2C接口,128×64分辨率)
- ST-Link V2下载器(烧录程序+供电)
- 杜邦线若干(建议用20cm长度的公对母线)
- 面包板(可选,方便接线调试)
软件工具准备:
- Keil MDK-ARM(V5或以上版本)
- STM32CubeMX(配置引脚和生成代码)
- ST-Link驱动(确保能识别下载器)
注意:OLED屏幕一定要接3.3V供电!我刚开始玩的时候不小心接到5V,瞬间烧坏了一块屏幕,这都是血的教训啊。
接线前最好先规划好引脚分配,我习惯把DHT11的数据线接到PA1,OLED的SDA和SCL分别接PB7和PB6,这样和后续代码配置保持一致。电源方面,所有模块的GND一定要共地,否则数据通信会出问题。
2. 硬件原理与接线详解
2.1 DHT11传感器工作原理
DHT11是一款数字温湿度复合传感器,采用单总线通信协议。所谓单总线,就是只用一根数据线就能实现双向通信,这大大简化了接线复杂度。传感器内部包含一个电阻式湿敏元件和一个NTC测温元件,通过单片机进行信号转换和数据输出。
DHT11的测量范围是湿度20%-90% RH,温度0-50℃,精度对于一般室内监测完全够用。如果你需要更高精度,可以考虑DHT22,但价格会贵一些。每次读取数据时,DHT11会输出40位数据,包含湿度整数、湿度小数、温度整数、温度小数和校验位。不过小数部分通常为0,所以我们主要读取整数部分即可。
通信时序是关键难点。DHT11的通信过程分为三步:主机发送复位脉冲→传感器回应应答脉冲→数据传输。每个步骤的时间要求都很严格,比如复位脉冲需要拉低总线至少18ms,应答脉冲等待时间80us,这些时序要求后面写代码时要特别注意。
2.2 OLED显示屏驱动原理
OLED是有机发光二极管显示屏,不需要背光,每个像素自发光,所以对比度特别高,显示效果很清晰。我用的0.96英寸版本分辨率是128×64,通过I2C接口与STM32通信。
I2C是两线制通信,只需要SDA(数据线)和SCL(时钟线)两根线。OLED的默认地址通常是0x78,但有些厂家的是0x3C,如果屏幕不显示,可以检查一下地址设置。屏幕内部没有控制器,需要我们自己发送命令和数据来控制显示内容。
显示逻辑方面,OLED屏幕在纵向上分为8页(Page),每页8个像素点。横向有128列,所以整个屏幕可以看作128×64的点阵。显示字符时,我们通常使用8×8的点阵字库,每个ASCII字符占用8×8个像素。
2.3 实际接线指南
根据我的实战经验,接线一定要仔细,很多问题都是接触不良或接错线导致的。下面是具体的接线表:
| 模块引脚 | STM32引脚 | 说明 |
|---|---|---|
| DHT11 VCC | 3.3V | 接3.3V电源 |
| DHT11 GND | GND | 必须共地 |
| DHT11 DATA | PA1 | 单总线数据线 |
| OLED VCC | 3.3V | 绝对不要接5V! |
| OLED GND | GND | 必须共地 |
| OLED SDA | PB7 | I2C数据线 |
| OLED SCL | PB6 | I2C时钟线 |
| ST-Link SWDIO | PA1 |

5万+

被折叠的 条评论
为什么被折叠?



