DHT22 Temperature-Humidity Sensor
| ||||||||||||||||||||
| ||||||||||||||||||||
产品概述
这是是已校准的数字温湿度传感器,用于检测环境温湿度,采用DHT22(AM2302),标准单总线接口。拥有比DHT11更高的精度和更大的量程。
产品参数
- 温度
- 湿度
- 工作电压 :3.3V ~ 5.5 V
- 推荐存储环境:
产品应用
气象站、温度调节器和测试及检测设备等
接口说明(以接入MCU为例)
DHT22 | MCU |
VCC: | 接3.3V ~ 5.5V |
GND: | 接GND |
DOUT: | 接MCU.IO |
工作原理
该产品原理图如下:
引脚定义
引脚 | 名称 | 描述 |
1 | VCC | 电源正(3.3V-5.5V) |
2 | GND | 电源地 |
3 | DOUT | 数据端口,接到AM2302的SDA端 |
AM2302 器件采用简化的单总线通信。单总线即只有一根数据线,系统中的数据交换、控制均由数据线完成。单总线通常要求外接一个约 5.1kΩ的上拉电阻,这样,当总线闲置时,其状态为高电平。SDA 用于微处理器与 AM2302 之间的通讯和同步,采用单总线数据格式,一次传送 40 位数据,高位先出。具体通信时序如图所示。
AM2302通信格式说明:
名称 | 单总线格式定义 |
起始信号 | 微处理器把数据总线(SDA)拉低一段时间(至少800μs)[1],通知传感器准备数据。 |
响应信号 | 传感器把数据总线(SDA)拉低80μs,再接高80μs以响应主机的起始信号。 |
数据格式 | 收到主机起始信号后,传感器一次性从数据总线(SDA)串出40位数据,高位先出。 |
湿度 | 湿度分辨率是16Bit,高位在前;传感器串出的湿度值是实际湿度值的10倍。 |
温度 | 温度分辨率是16Bit,高位在前;传感器串出的温度值是实际温度值的10倍;温度最高位(Bit15)等于1表示负温度,温度最高位(Bit15)等
于0表示正温度;温度除了最高位(Bit14~Bit0)表示温度值。 |
校验位 | 校验位=湿度高位+湿度低位+温度高位+温度低位。 |
- 单总线通信时序
用户主机(MCU)发送一次起始信号(把数据总线 SDA 拉低至少 800µs)后, AM2302 从休眠模式转换到高速模式。待主机开始信号结束后, AM2302 发送响应信号,从数据总线 SDA 串行送出 40Bit的数据,先发送字节的高位;发送的数据依次为湿度高位、湿度低位、温度高位、 温度低位、校验位,发送数据结束触发一次信息采集,采集结束传感器自动转入休眠模式,直到下一次通信来临。(注:DHT22(AM2302)的数据格式和DHT11的数据格式不一样。)
- 外设读取步骤示例
主机和传感器之间的通信可通过如下三个步骤完成读取数据。
步骤一:
AM2302 上电后( AM2302 上电后要等待 2S 以越过不稳定状态,在此期间读取设备不能发送任何指令),测试环境温湿度数据,并记录数据,此后传感器自动转入休眠状态。 AM2302 的 SDA 数据线由上拉电阻拉高一直保持高电平,此时 AM2302 的 SDA 引脚处于输入状态,时刻检测外部信号。
步骤二:
微处理器的 I/O 设置为输出, 同时输出低电平,且低电平保持时间不能小于 800us,典型值是拉低 1MS,然后微处理器的 I/O 设置为输入状态,释放总线,由于上拉电阻,微处理器的 I/O 即 AM2302的 SDA 数据线也随之变高,等主机释放总线后, AM2302 发送响应信号,即输出 80 微秒的低电平作为应答信号,紧接着输出 80 微秒的高电平通知外设准备接收数据,信号传输如图所示:
步骤三:
AM2302 发送完响应后,随后由数据总线 SDA 连续串行输出 40 位数据,微处理器根据 I/O 电平的变化接收 40 位数据。
位数据“0”的格式为: 50 微秒的低电平加 26-28 微秒的高电平;
位数据“1”的格式为: 50 微秒的低电平加 70 微秒的高电平;
位数据“0”、位数据“1”格式信号如图 所示:
AM2302 的数据总线 SDA 输出 40 位数据后,继续输出低电平 50 微秒后转为输入状态,由于上拉电阻随之变为高电平。同时 AM2302 内部重测环境温湿度数据,并记录数据,测试记录结束,单片机自动进入休眠状态。单片机只有收到主机的起始信号后,才重新唤醒传感器,进入工作状态。
操作与现象
下面章节以三款款不同类型的开发板(Nucleo-F103RB, Arduino UNO, Open103Z)为例,描述具体操作步骤及实验现象。
NUCLEO-F103RB
1)用杜邦线将DHT22接到Nucleo-F103RB,DOUT接到Nucleo-F103RB的D2端口。
2)用keil软件打开工程.\ mbed\Temerature-Humidity Sensor.uvproj ,并编译下载。
3)打开串口监视软件,选择正确的串口号,并设置如下:
波特率:9600;数据位:8;停止位:1;校验位:None;控制流:None。
串口输出温度和湿度。
Arduino UNO
1)用杜邦线将DHT22接到UNO,DOUT接到UNO的D2端口。
2)将DHTxx文件夹复制到Arduino软件的安装目录Arduino\libraries下面。点击File --> Examples --> DHTxx--> DHTxx打开程序,并编译程序下载。
3)点击 Tools -> Port选择Arduino开发板的串口号,打开串口监视器,设置No line ending, 9600 baud。串口输出温度和湿度。
Open103Z
1)用杜邦线将DHT22接到Open103Z,DOUT接到Open103Z的PA3端口。
2)用keil软件打开程序.\ Open103Z\MDK_Project\DHT22,并编译下载。
3)打开串口监视软件,选择正确的串口号,并设置如下:
波特率:9600;数据位:8;停止位:1;校验位:None;控制流:None。
串口输出温度和湿度。