电气特性:
工作电压:3.3V-5.5V
工作电流 :平均0.5mA
输出:单总线数字信号
测量范围:湿度20~90%RH,温度0~50℃
精度 :湿度±5%,温度±2℃
分辨率 :湿度1%,温度1℃
其数据包由5Byte(40Bit)组成。数据分小数部分和整数部分,一次完整的数据传输为40bit,高位先出。DHT11的数据格式为:8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据+8bit校验和(校验和数据为前四个字节相加)。
数据发送流程:
首先主机发送开始信号(复位),即:拉低数据线,保持t1(至少18ms)时间,然后拉高数据线t2(20~40us)时间,然后读取DHT11的响应,正常的话,DHT11会拉低数据线,保持t3(40~50us)时间,作为响应信号,然后DHT11拉高数据线,保持t4(40~50us)时间后,开始输出数据。
逻辑0:12-14us低电平,26-28us高电平
逻辑1:12-14us低电平,116us-118us高电平
CODE:
#include "dht11.h"#include "delay.h"//复位DHT11void DHT11_Rst(void)
{
DHT11_IO_OUT(); //SET OUTPUT
DHT11_DQ_OUT=0; //拉低DQ
delay_ms(20); //拉低至少18ms
DHT11_DQ_OUT=1; //DQ=1
delay_us(30); //主机拉高20~40us}//等待DHT11的回应//返回1:未检测到DHT11的存在//返回0:存在u8 DHT11_Check(void)
{
u8 retry=0;
DHT11_IO_IN();//SET INPUT
while (DHT11_DQ_IN&&retry<100)//DHT11会拉低40~80us
{
retry++;
delay_us(1);
};
if(retry>=100)return 1; else retry=0; while (!DHT11_DQ_IN&&retry<100)//DHT11拉低后会再次拉高40~80us
{
retry++;
delay_us(1);
}; if(retry>=100)return 1;
return 0;
}//从DHT11读取一个位//返回值:1/0u8 DHT11_Read_Bit(void)
{ u8 retry=0; while(DHT11_DQ_IN&&retry<100)//等待变为低电平
{
retry++;
delay_us(1);
}
retry=0; while(!DHT11_DQ_IN&&retry<100)//等待变高电平
{
retry++;
delay_us(1);
}
delay_us(40);//等待40us,如果还高电平则说明为读到的是1
if(DHT11_DQ_IN)return 1; else return 0;
}//从DHT11读取一个字节//返回值:读到的数据u8 DHT11_Read_Byte(void)
{
u8 i,dat;
dat=0; for (i=0;i<8;i++)
{
dat<<=1;
dat|=DHT11_Read_Bit();
}
return dat;
}//从DHT11读取一次数据//temp:温度值(范围:0~50°)//humi:湿度值(范围:20%~90%)//返回值:0,正常;1,读取失败u8 DHT11_Read_Data(u8 *temp,u8 *humi)
{
u8 buf[5]; u8 i;
DHT11_Rst(); if(DHT11_Check()==0)
{ for(i=0;i<5;i++)//读取40位数据
{
buf[i]=DHT11_Read_Byte();
} if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
{
*humi=buf[0];
*temp=buf[2];
}
}else return 1; return 0;
}//初始化DHT11的IO口 DQ 同时检测DHT11的存在//返回1:不存在//返回0:存在 u8 DHT11_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE); //使能PG端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; //PG11端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOG, &GPIO_InitStructure); //初始化IO口
GPIO_SetBits(GPIOG,GPIO_Pin_11); //PG11 输出高
DHT11_Rst(); //复位DHT11
return DHT11_Check();//等待DHT11的回应}
关键字:STM32系列 DHT11 温湿度传感器
引用地址:
STM32系列第30篇--DHT11温湿度传感器
推荐阅读最新更新时间:2024-03-16 15:38
STM32系列可以通过FMSC接口来实现外扩并口SRAM
STM32MCU一般情况下配置有1~2MB双块Flash存储器和256KB SRAM,在某些应用设计中会出现内置RAM不足的情况,需要对STM32单片机进行外扩RAM的处理,可以选择更换更高RAM容量的单片机,除了价格贵还需要涉及其他被动器件的更改,STM32系列可以通过FMSC接口外扩并口SRAM,比如采用ISSI的IS62WV51216。 IS62WV51216 SRAM芯片是一个8M容量,组织结构为512K*16的高速率低功耗静态随机存储器。IS62WV51216高性能CMOS工艺制造。高度可靠的工艺水准再加创新的电路设计技术,造就了这款高性能,低功耗的器件。使用IS62WV51216的片选引脚和输出使能引脚,可以简单实
[单片机]
STM32 HAL库学习系列第10篇---串口空闲中断接收不定长数据
串口重定向配置: 可以直接复制使用 /************************************************* * 函数功能: 重定向c库函数printf到DEBUG_USARTx * 输入参数: 无 * 返 回 值: 无 * 说 明:无 */ int fputc(int ch, FILE *f) { HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff); return ch; } /** * 函数功能: 重定向c库函数getchar,scanf到DEBUG_USARTx * 输入参数: 无 * 返 回 值: 无 *
[单片机]
温湿度传感器SHT11的感测系统设计
SHT11是瑞士Scnsirion公司推出的一款数字 温湿度传感器 芯片。该芯片广泛应用于暖通空调、汽车、消费电子、自动控制等领域。共主要特点如下: ◆高度集成,将温度感测、湿度感测、信号变换、A/D转换和加热器等功能集成到一个芯片上; ◆提供二线数字串行 接口 SCK和DATA,接口简单,支持CRC传输校验,传输可靠性高; ◆测量精度可编程调节,内置A/D转换器(分辨率为8~12位,可以通过对芯片内部寄存器编程米选择); ◆测量精确度高,由于同时集成温湿度传感器,可以提供温度补偿的湿度测量值和高质量的露点计算功能; ◆封装尺寸超小(7.62 mm×5.08mm×2.5 mm),测量和通信结束后,自动转入低功耗模式; ◆高
[传感器]
STM32 基础系列教程 10 - 单线串口(半双工)
前言 在工程应用中,很多时间为了方便走线会采用单线串口方案,本节将学习stm32 usart单线串口的使用,学会用使用单线串口收发数据。 示例详解 基于硬件平台: STM32F10C8T6最小系统板, MCU 的型号是 STM32F103c8t6, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。 本示例所用的最小系统板原理图: 从本节开始,关于CUBEMX工具及KEIL工具的操作将不再细讲,如果还有不熟悉的可以查看之前的教程文档。下面直接介绍工程配置: 系统时钟树 USART1配置 引脚配置(保持默认即可) 引脚保持默认即可,当然实际应用中可以根据自己的需求对其
[单片机]
STM32系列第21篇--DMA
简介: DMA全称DirectMemory Access,即直接存储器访问。 比如串口发送用和不用DMA当然都可以发送。不用DMA发送是需要单片机实时参与,由单片机一个一个地发送数据并进行监控。但是如果用DMA,设置了起始地址,数据大小等参数后,就直接由专门的一个DMA模块进行数据发送,发送过程中单片机无需参与。发送完后会产生中断告知单片机。由此可知用DMA可以节省单片机资源,让单片可以在同一时间里干更多事。 STM32最多有2个DMA控制器(DMA2仅存在大容量产品中),DMA1有7个通道(通道1~通道7)。DMA2有5个通道(通道1~通道5)。每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。还有一个仲裁起来协调各个
[单片机]
STM32 HAL库学习系列第1篇 ADC配置 及 DAC配置
ADC工作均为非阻塞状态 轮询模式 中断模式 DMA模式 库函数: HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc);//轮询模式,需放在循环中不断开启 HAL_StatusTypeDef HAL_ADC_Stop(ADC_HandleTypeDef* hadc); HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout);//等待转换结束,只适用于轮询 HAL_StatusTypeDef HAL_ADC_PollForEve
[单片机]
单总线传感器DHT11在温度测控中的应用
引言
随着科技的不断发展,汽车、空调、除湿器、烘干机等种类繁多的电器都已进入人们的日常生活,而这些电器设备很多都离不开对温度、湿度等环境因素的要求。因此,温度、湿度传感器用途越来越广泛。新一代的数字传感器不再需要外置的A/D转换模块,并具有标准接口,使用方便,得到了越来越多的应用。DHT11作为一种新型的单总线温湿度数字传感器,具有更多的优点,它使系统设计更加简单,控制方便,易于实现。
1 单总线通信简介
目前常用的微机与外设之间进行数据传输的串行总线主要有I2C总线、SPI总线和SCI总线。其中I2C总线以同步串行两线方式进行通信(1条时钟线,1条数据线),SPI总线则以同步串行三线方式进行通
[嵌入式]
温湿度传感器SHT15及其在嵌入式系统中的应用
氡及其子体的测量是一个涵盖智能仪器、核辐射探测、核技术应用、环境评价、工业计量、工业自动化、计算机通信与软件等多领域的问题。然而氡及其子体浓度受温湿度的影响很大,因此温湿度的测量对于测氡仪来说是非常重要的。传统的模拟式温湿度传感器一般都要涉及信号调理电路并需要经过复杂的校准和标定过程,所以测量精度难以保证。由某公司生产的SHT15单芯片传感器,是一款含有已校准数字信号输出的温湿度复合传感器,应用专利的工业COMS过程微加工技术(CMOSens),确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括1个电容式聚合体测湿元件和1个能隙式测温元件,并与1个14位的A/D转换器以及串行接口电路在同一芯片上实现无缝连接。因此,该产品具有品
[嵌入式]