当前位置: 首页> 教育> 幼教 > 百度电商推广_聚企网_网站设计制作_百度指数查询官网入口登录

百度电商推广_聚企网_网站设计制作_百度指数查询官网入口登录

时间:2025/7/26 15:26:54来源:https://blog.csdn.net/m0_60322134/article/details/143449072 浏览次数:0次
百度电商推广_聚企网_网站设计制作_百度指数查询官网入口登录

文字信息来源

温湿度传感器 温湿度芯片 温湿度变送器模块 气体传感器 流量传感器 广州奥松电子股份有限公司 (aosong.com)

1.DHT11简介     

概述:DHT11是广州奥松有限公司生产的一款湿温度一体化的数字传感器。 该传感器包括一个电阻式测湿元件和一个NTC测温元件,并与一个高性能8位 单片机相连接。通过单片机等微处理器简单的电路连接就能够实时的采集本地湿 度和温度。DHT11 与单片机之间能采用简单的单总线进行通信,仅仅需要一个 I/O 口。传感器内部湿度和温度数据40Bit 的数据一次性传给单片机,数据采用 校验和方式进行校验,有效的保证数据传输的准确性。DHT11功耗很低,5V电 源电压下,工作平均最大电流0.5mA。

性能指标和特性如下:

  • 工作电压范围:3.5V-5.5V
  • 工作电流 :平均0.5mA
  • 湿度测量范围:20-90%RH
  • 温度测量范围:0-50℃
  • 湿度分辨率 :1%RH 8位
  • 温度分辨率 :1℃ 8 位
  • 采样周期 :1S
  • 单总线结构
  • 与TTL兼容(5V)

管脚排列如下:

2.应用电路连接说明

        DHT11数字湿温度传感器连接方法极为简单。第一脚接电源正,第四脚接电源地端。 数据端为第二脚。可直接接主机(单片机)的I/O口。为提高稳定性,建议在数据端和电源 正之间接一只4.7K的上拉电阻。第三脚为空脚,此管脚悬空不用。

3.DHT11数据结构

         DHT11数字湿温度传感器采用单总线数据格式。即,单个数据引脚端口完成输 入输出双向传输。其数据包由5Byte(40Bit)组成。数据分小数部分和整数部分,具 体格式在下面说明。

4.DHT11的传输时序

4.1 DHT11 开始发送数据流程

4.2 主机复位信号和DHT11响应信号

4.3 数字‘0’信号表示方法

4.4 数字‘1’信号表示方法

5.原理图

6.代码

DHT22.c

#include "stm32f10x.h"                  // Device header
#include "DHT22.h"
#include "Delay.h"//DHT22引脚输出模式
void DHT22_GPIO_OUT(void)
{GPIO_InitTypeDef  GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin = DHP_GPIO_Pin;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(DHP_GPIO_PORT, &GPIO_InitStructure);
}//DHT22引脚输入模式
void DHT22_GPIO_IN(void)
{GPIO_InitTypeDef  GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_InitStructure.GPIO_Pin = DHP_GPIO_Pin;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(DHP_GPIO_PORT, &GPIO_InitStructure);
}//写引脚的高低电平
void DHT22_W_SCL(uint8_t BitValue)
{GPIO_WriteBit(DHP_GPIO_PORT, DHP_GPIO_Pin, (BitAction)BitValue);
}//读引脚电平
uint8_t DHT22_R_SCL(void)
{return GPIO_ReadInputDataBit(DHP_GPIO_PORT, DHP_GPIO_Pin);
}//复位DHT22
void DHT22_Rst(void)
{DHT22_GPIO_OUT(); 	//SET OUTPUTDHT22_W_SCL(0);Delay_ms(20);		//主机拉低至少18msDHT22_W_SCL(1);Delay_us(30);		//主机拉高20~40us				  
}//等待DHT22响应
//返回1:未检测到DHT22的存在
//返回0:存在
uint8_t DHT22_Check(void)
{uint8_t retry = 0;DHT22_GPIO_IN();//SET INPUTwhile (DHT22_R_SCL() && retry < 100)     //DHT11会拉低40~80us{retry ++;Delay_us(1);}if(retry >= 100){return 1;}else{retry = 0;}while (!DHT22_R_SCL() && retry < 100)     //DHT11拉低后会再次拉高40~80us{retry ++;Delay_us(1);}if(retry >= 100) return 1;return 0;
}//初始化DHT22 同时检测是否存在
//返回1:不存在
//返回0:存在
uint8_t DHT22_Init(void)
{RCC_APB2PeriphClockCmd(DHP_GPIO_CLK, ENABLE);    //使能外设时钟DHT22_GPIO_OUT();GPIO_SetBits(DHP_GPIO_PORT, DHP_GPIO_Pin);       //默认引脚高电平DHT22_Rst();	//复位DHT22return  DHT22_Check();//等待DHT11的回应
}//从DHT22读取一个wei
//返回值:1/0
uint8_t DHT22_ReadBit(void)
{uint8_t retry = 0;while (DHT22_R_SCL() && retry < 100)     //等待变为低电平{retry ++;Delay_us(1);}retry =0;while (!DHT22_R_SCL() && retry < 100)     //等待变高电平{retry ++;Delay_us(1);}Delay_us(40); //等待40usif (DHT22_R_SCL()) return 1;else return 0;
}//读取一个字节
uint8_t DHT22_ReadByte(void)
{uint8_t i, data;data = 0;for (i = 0; i < 8; i++){data <<= 1;data |= DHT22_ReadBit();}return data;
}//读取数据
//1 成功,0失败
uint8_t DHT22_ReadData(float *Temp, float *Humi)
{uint8_t buf[5];uint8_t i;DHT22_Rst();if(!DHT22_Check())      //DHT22存在{for (i = 0; i < 5; i ++){buf[i] = DHT22_ReadByte();}if(buf[0] + buf[1] + buf[2] + buf[3] == buf[4]){*Humi = buf[0] + buf[1] / 10.0;*Temp = buf[2] + buf[3] / 10.0;			}}else return 0;return 1;
}

DHT22.h

#ifndef __DHT22_H_
#define __DHT22_H_//DHT引脚宏定义
#define DHP_GPIO_Pin		GPIO_Pin_3
#define DHP_GPIO_PORT		GPIOA
#define DHP_GPIO_CLK		RCC_APB2Periph_GPIOAuint8_t DHT22_Init(void);
uint8_t DHT22_ReadData(float *Temp, float *Humi);#endif

main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "LED.h"
#include "DHT22.h"uint8_t flag;
float Temp, Humi;int main(void)
{OLED_Init();LED_Init();while (DHT22_Init()){OLED_Printf(0, 32, OLED_8X16, "DHT11 Error \r\n");}OLED_ShowString(0, 0, "Temp:      C", OLED_8X16);OLED_ShowString(0, 16, "Humi:      %", OLED_8X16);OLED_Update();while(1){DHT22_ReadData(&Temp, &Humi);
//		OLED_ShowNum(0, 32, flag, 2, OLED_8X16);OLED_ShowFloatNum(40, 0, Temp, 2, 1, OLED_8X16);OLED_ShowFloatNum(40, 16, Humi, 2, 1, OLED_8X16);OLED_Update();}
}

oled模块代码为江科大oled部分代码

关键字:百度电商推广_聚企网_网站设计制作_百度指数查询官网入口登录

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: