锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

温湿度传感器DHT

时间:2022-09-01 12:30:00 02温湿度传感器系列传感器22da5

温湿度传感器

DHT11_DA

使用方法

  /* USER CODE BEGIN 1 */ uint8_t DHT11_BUF[2] = { 0 };//用于存放DHT11数据   /* USER CODE END 1 */  
/* USER CODE BEGIN 2 */ HAL_Delay(500) DHT11_Init()//传感器芯片的初始化 HAL_Delay(1500) DHT11_ReadData(DHT11_BUF);//读出DHT11传感器数据(参数是存储数据的数组指针)  /* USER CODE END 2 */  
while (1) {    DHT11_ReadData(DHT11_BUF); //读出DHT11传感器数据(参数是存放数据的数组指针)   printf("湿度:d% 温度:d℃\r\n", DHT11_BUF[0], DHT11_BUF[1]); //显示日期时间   HAL_Delay(1500); //毫秒延迟 

dht11.c

#include "dht11.h" #include "main.h"  void DHT11_IO_OUT (void){ ///端口变成输出  GPIO_InitTypeDef GPIO_InitStruct = {0};  GPIO_InitStruct.Pin = DHT11_DA_Pin;  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;  GPIO_InitStruct.Pull = GPIO_NOPULL;  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); }  void DHT11_IO_IN (void){ ///端口变成输入  GPIO_InitTypeDef GPIO_InitStruct = {0};  GPIO_InitStruct.Pin = DHT11_DA_Pin;  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;  GPIO_InitStruct.Pull = GPIO_PULLUP;  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); }  void DHT11_RST (void){ //DHT11端口复位,发出起始信号(IO发送)  DHT11_IO_OUT();  HAL_GPIO_WritePin(GPIOB,DHT11_DA_Pin, GPIO_PIN_RESET);  HAL_Delay(20); //拉低至少18ms  HAL_GPIO_WritePin(GPIOB,DHT11_DA_Pin, GPIO_PIN_SET);  delay_us(30); ///主机拉高20~40us }  uint8_t Dht11_Check(void){ //等待DHT回应11:未检测到返回1:DHT11,返回0:成功(IO接收)  uint8_t retry=0;     DHT11_IO_IN();//IO到输入状态     while (HAL_GPIO_ReadPin(GPIOB,DHT11_DA_Pin)&&retry<100){//DHT11会拉低40~80us         retry  ;         delay_us(1);     }     if(retry>=100)return 1; else retry=0;     while (!HAL_GPIO_ReadPin(GPIOB,DHT11_DA_Pin)&&retry<100){//DHT11拉低后,将再次拉40~80us         retry  ;         delay_us(1);     }     if(retry>=100)return 1;     return 0; }  uint8_t Dht11_ReadBit(void){ //从DHT11读取一个位 返回值:1/0  uint8_t retry=0;     while(HAL_GPIO_ReadPin(GPIOB,DHT11_DA_Pin)&&retry<100         retry  ;         delay_us(1);     }     retry=0;     while(!HAL_GPIO_ReadPin(GPIOB,DHT11_DA_Pin)&&retry<100         retry  ;         delay_us(1);     }     delay_us(40)us //用于判断高低电平,即数据1或0     if(HAL_GPIO_ReadPin(GPIOB,DHT11_DA_Pin))return 1; else return 0; }  uint8_t Dht11_ReadByte(void){  //从DHT读一个字节  返回值:读取的数据  uint8_t i,dat;     dat=0;     for (i=0;i<8;i  ){         dat<<=1;         dat|=Dht11_ReadBit();     }     return dat; }  uint8_t DHT11_Init (void){ //DHT11初始化  DHT11_RST();//DHT11端口复位,发出起始信号  return Dht11_Check(); //等待DHT11回应 }  uint8_t DHT11_ReadData(uint8_t *h){ ///读取数据//湿度值(十进制,范围:20%~90%) ,温度值(十进制,范围:0~50°),返回值:0,正常;1,失败  uint8_t buf[5];  uint8_t i;     DHT11_RST();//DHT11端口复位,发出起始信号     if(Dht11_Check()==0){ //等待DHT11回应         for(i=0;i<5;i  ){//读取5位数据             buf[i]=Dht11_ReadByte(); //读出数据         }         if((buf[0] buf[1] buf[2] buf[3])==buf[4]){ ///数据校验             *h=buf[0]; ///将湿度值放入指针1    h  ;             *h=buf[2]; ///将温度值放入指针2         }     }else return 1;     return 0; } 

dht11.h

#ifndef DHT11_DHT11_H_ #define DHT11_DHT11_H_  #include "stm32f1xx_hal.h" #include "../delay/delay.h"  void DHT11_IO_OUT (void); void DHT11_IO_IN (void); void DHT11_RST (void); uint8_t Dht11_Check(void); uint8_t Dht11_ReadBit(void); uint8_t Dht11_ReadByte(void); uint8_t DHT11_Init (void); uint8_t DHT11_ReadData(uint8_t *h);   #endif /* DHT11_DHT11_H_ */  
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章