[STM32]HAL库STM32CubeMX+DHT11温湿度传感器

这篇具有很好参考价值的文章主要介绍了[STM32]HAL库STM32CubeMX+DHT11温湿度传感器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

所用的工具:

知识概括:

DHT11介绍:

DHT11性能说明:

接口说明

 电源引脚

串行接口  

工程创建

1、设置RCC

2、时钟设置

3、项目文件设置

4、设置IO口(DATA)

5、TIM时钟配置

6、USART配置

  程序编写:

         1、TIM3实现微秒(us)级延时函数:

2、IO口配置

3、DHT11检测起始信号(这里的DHT11_LOW,DHT11_HIGH 在下面的的第8点)

4、DHT11检测响应信号(这里的DHT11_IO_IN在下面的第8点)

5、DHT11读取一bit数据

6、DHT11读取一个Byte数据

7、DHT11读取湿度和温度的数据

8、IO口输出高、低电平以及读取IO口电平定义和需要添加的头文件

9、温度、湿度和数据缓存数组的声明,函数的声明

10、主循环,(DHT11数据的读取和串口发送)

效果展示

1、将程序下载到开发板

2、串口助手查看数据​编辑

总结 

附录(完整程序)


所用的工具:

1、芯片:STM32F103C8T6

2、软件:STM32CubeMX软件

3、IDE :   MDK_Keil软件

知识概括:

DHT11基本知识和原理

DHT11通讯方式

STM32CubeTIM和USART的配置

DHT11数据采集实现

DHT11介绍:

DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传
感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高
的可靠性与卓越的长期稳定性。

DHT11性能说明:

[STM32]HAL库STM32CubeMX+DHT11温湿度传感器

接口说明

建议连接线短语20m时用5K的上拉电阻,大于20m时根据实际情况使用合适的上拉电阻

[STM32]HAL库STM32CubeMX+DHT11温湿度传感器

 电源引脚

        DHT11的供电电压为 3.3~5v。传感器上电后,要等待1s,以越过不稳定状态在此期间无需发送任何指令。电源引脚(VDD,GND)之间可增加一个100uf电容,用以去耦滤波。

串行接口  

DATA 用于微处理器与 DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数部分用于以后扩展,现读出为零.操作流程下:
           一次完整的数据传输为40bit,高位先出。
         数据格式: 8bit湿度整数数据+8bit湿度小数数据
                          +8bi温度整数数据+8bit温度小数数据
                          +8bit校验和
        数据传送正确时校验和数据等于“8bit湿度整数数据+8bit湿度小数数据 +8bi温度整数数据+8bit温度小数数据” 所得结果的末8位。
        用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集, 用户可选择读取部分数据.从模式下,DHT11接收到开始信号触发一次温湿度采集, 如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集.采集数据后 转换到低速模式。
*接下来就是重点中的重点了!!
DHT11的通讯过程:
         [STM32]HAL库STM32CubeMX+DHT11温湿度传感器
        总线空闲状态为高电平,主机把总线拉低等待DHT11响应, 主机 把总线拉低必须 大于18毫秒 ,保证DHT11能检测到起始信号。当DHT11接收到主机的起始信号之后,会拉高总线并且等待。开始信号的结束后,将DATA切换成输入模式(这里的DATA指的是那个模块上的IO口切换成输入模式),随后总线为低电平,说明 DHT11 发出 80us低电平 的响应信号,发出响应信号之后 , DHT11 再次把总线 拉高80us ,准备开始发送数据, 数据是以一bit位的方式传输 当最后一bit数据传送完毕后 DHT11 拉低总线50us,随后总线由上拉电阻拉高进入空闲态。
下面这张图的延迟时长非常重要,需要在程序中用到
[STM32]HAL库STM32CubeMX+DHT11温湿度传感器
         总线空闲状态为高电平, 主机 把总线拉低等待DHT11响应,主机把总线拉低必 须 大于18毫秒 ,保证DHT11能检测到起始信号。DHT11接收到主机的开始信号后, 拉高总线 20us~40us ,等待开始信号结束后, DHT11 发出 80us低电平 的响应信号,发出响应信号之后 , DHT11 再次把总线 拉高80us 并且准备输出数据。
        下面这张是DHT11数据传输的时序图:
        数字0信号表示方法如图所示:
[STM32]HAL库STM32CubeMX+DHT11温湿度传感器
     数字1信号表示方法如图所示:

 [STM32]HAL库STM32CubeMX+DHT11温湿度传感器       

         总线为低电平,说明DHT11发送响应信号,DHT11发送响应信号后,再把总线拉 高80us,准备发送数据,每一bit数据都以50us低电平时隙开始,高电平的长短定 了数据位是0还是1.格式见下面图示.如果读取响应信号为高电平,则DHT11没有 响应,请检查线路是否连接正常.当最后一bit数据传送完毕后,DHT11拉低总线 50us,随后总线由上拉电阻拉高进入空闲状态

工程创建

1、设置RCC

[STM32]HAL库STM32CubeMX+DHT11温湿度传感器

2、时钟设置

[STM32]HAL库STM32CubeMX+DHT11温湿度传感器

 3、项目文件设置

  • 1 设置项目名称
  • 2 设置存储路径
  • 3 选择所用IDE

[STM32]HAL库STM32CubeMX+DHT11温湿度传感器

1、 复制所用文件的.C和.H

2、每个功能生成独立的.C和.H文件

[STM32]HAL库STM32CubeMX+DHT11温湿度传感器

 4、设置IO口(DATA)

[STM32]HAL库STM32CubeMX+DHT11温湿度传感器

第二步的Moed设置GPIO_OUTPUT和GPIO_INPUT都可以,因为DHT11是单线双向的 ,所以在编写程序时我们需要改写的它IO模式。  

5、USART配置

第二步 Mode设置为异步通信 

[STM32]HAL库STM32CubeMX+DHT11温湿度传感器

  程序编写:

   首先来编写函数部分:

    1、微秒(us)级延时函数:

/**
  * @brief  us级延时函数
  * @param  delay 控制延时的时长
  * @retval 无
  */
void Delay_us(uint32_t udelay)
{
  uint32_t startval,tickn,delays,wait;
 
  startval = SysTick->VAL;
  tickn = HAL_GetTick();
  delays =udelay * 72;
  if(delays > startval)
  {
      while(HAL_GetTick() == tickn)
      {
 
      }
      wait = 72000 + startval - delays;
      while(wait < SysTick->VAL)
      {
 
      }
  }
  else
  {
      wait = startval - delays;
      while(wait < SysTick->VAL && HAL_GetTick() == tickn)
     {
 
     }
  }
}

该函数用了逻辑分析仪进行了比较,示图如下:

100us:

[STM32]HAL库STM32CubeMX+DHT11温湿度传感器

10us:

[STM32]HAL库STM32CubeMX+DHT11温湿度传感器

1us:

[STM32]HAL库STM32CubeMX+DHT11温湿度传感器

2、IO口配置

/**
  * @brief  DATA引脚(PA7)设置为输出模式
  * @param  无
  * @retval 无
  */
void DHT11_OUT(void)
{
	GPIO_InitTypeDef  GPIO_InitStruct = {0};

	GPIO_InitStruct.Pin = GPIO_PIN_7;
	GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
	GPIO_InitStruct.Pull = GPIO_PULLUP;
	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
	HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
/**
  * @brief  DATA引脚(PA7)设置为输入模式
  * @param  无
  * @retval	无 
  */
void DHT11_IN(void)
{
	GPIO_InitTypeDef  GPIO_InitStruct = {0};

	GPIO_InitStruct.Pin  = GPIO_PIN_7;
	GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
	GPIO_InitStruct.Pull = GPIO_NOPULL;
	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
	HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}

3、DHT11检测起始信号(这里的DHT11_LOW,DHT11_HIGH 在下面的的第8点

/**
  * @brief  DHT11检测起始信号
  * @param  无
  * @retval 无
  */
void DHT11_Strat(void)
{
	DHT11_OUT();   //PA7设置为输出模式
	DHT11_LOW;     //主机拉低总线
	HAL_Delay(20); //延迟必须大于18ms ; 
	DHT11_HIGH;    //主机拉高总线等待DHT11响应
	Delay_us(30);   
}

4、DHT11检测响应信号(这里的DHT11_IO_IN在下面的第8点

/**
  * @brief  DHT11发送响应信号
  * @param  无
  * @retval 返回值0/1  0:响应成功 1:响应失败
  */
uint8_t DHT11_Check(void)
{
	uint8_t retry = 0 ;
	DHT11_IN();
	//采用while循环的方式检测响应信号
	while(DHT11_IO_IN && retry <100) // DHT11会拉低 40us ~80us
	{
		retry++;
		Delay_us(1);//1us
	}
	if(retry>=100) //判断当DHT11延迟超过80us时return 1 , 说明响应失败
	{return  1;}
	else retry =  0 ;
		
	while(!DHT11_IO_IN && retry<100)// // DHT11拉低之后会拉高 40us ~80us
	{
		retry++;
		Delay_us(1);//1us
	}
		
	if(retry>=100)
	{return 1;}
	return 0 ;
}

5、DHT11读取一bit数据

/**
  * @brief  DHT11读取一位数据
  * @param  无
  * @retval 返回值0/1  1:读取成功 0:读取失败
  */
uint8_t DHT11_Read_Bit(void)
{
	uint8_t retry = 0 ;
	while(DHT11_IO_IN && retry <100)//同上采用while循环的方式去采集数据
	{
		retry++;
		Delay_us(1);
	}
	retry = 0 ;
	while(!DHT11_IO_IN && retry<100)
	{
		retry++;
		Delay_us(1);
	}

	Delay_us(40);              //结束信号,延时40us 
	if(DHT11_IO_IN) return 1;  //结束信号后,总线会被拉高 则返回1表示读取成功
	else 
	return 0 ;
}

6、DHT11读取一个Byte数据

/**
  * @brief  DHT11读取一个字节数据
  * @param  无
  * @retval 返回值:dat 将采集到的一个字节的数据返回
  */
uint8_t DHT11_Read_Byte(void)
{
	uint8_t i , dat ;
	dat = 0 ;
	for(i=0; i<8; i++)
	{
		dat <<= 1; //通过左移存储数据
		dat |= DHT11_Read_Bit();
	}
	return dat ; 
}

7、DHT11读取湿度和温度的数据

/**
  * @brief  DHT11读取数据
  * @param  temp:温度值 humi :湿度值
  * @retval 返回值0/1 0:读取数据成功 1:读取数据失败
  */
uint8_t DHT11_Read_Data(uint8_t* temp , uint8_t* humi)
{
	uint8_t buf[5];        //储存五位数据
    uint8_t i;    
	DHT11_Strat();         //起始信号
	if(DHT11_Check() == 0) //响应信号
    {
		for(i=0; i<5; i++)
		{
			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 ;
}

以上就是需要用到的函数部分的编写,接下来是一些声明和定义:

8、IO口输出高、低电平以及读取IO口电平定义和需要添加的头文件

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
#define DHT11_HIGH     HAL_GPIO_WritePin(GPIOA, DHT11_Pin,	GPIO_PIN_SET) //输出高电平
#define DHT11_LOW      HAL_GPIO_WritePin(GPIOA, DHT11_Pin, GPIO_PIN_RESET)//输出低电平

#define DHT11_IO_IN      HAL_GPIO_ReadPin(GPIOA, DHT11_Pin)//读取IO口电平

/* USER CODE END PD */
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include	"stdio.h"
#include  "string.h"

/* USER CODE END Includes */

9、温度、湿度和数据缓存数组的声明,函数的声明


  /* USER CODE BEGIN 1 */
     uint8_t temperature = 1;  //温度

	 uint8_t humidity = 1;     //湿度

	 uint8_t aTXbuf[32];       //串口发送缓存数组
     
     DHT11_Strat(void);

  /* USER CODE END 1 */
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);

void Delay_us(uint16_t delay);                //us级延时函数

//DHT11_DATA ,IO口设置为输出模式(这里的IO口指的是STM32CubeMX中配置的IO口)
void DHT11_OUT(void);	
												
void DHT11_IN(void);                          //DHT11_Data IO设置为输入模式
void DHT11_Strat(void);				          //主机发出起始信号
uint8_t DHT11_Check(void);                    //DHT11发送响应信号
uint8_t DHT11_Read_Bit(void);                 //读取DHT11一个BIT的数据
uint8_t DHT11_Read_Byte(void);                //读取DHT11一个Byte的数据
uint8_t DHT11_Read_Data(uint8_t* temp , uint8_t* humi);  //读取DHT11湿度和温度的数据

/* USER CODE BEGIN PFP */

10、主循环,(DHT11数据的读取和串口发送)

  while (1)
  {
	//接收DHT11的温度和湿度的值
	DHT11_Read_Data(&temperature , &humidity);  
    //将数据存放到aTXbuf这个数组当中去。 不了解"sprintf"用法的可以去查一下...       
	sprintf((char*)aTXbuf,"温度:%d℃,湿度: %d %%\r\n" ,temperature ,humidity);
    //将数据通过串口发送到主机上的串口助手
	HAL_UART_Transmit(&huart1, aTXbuf, strlen((const char*)aTXbuf), 200); 
    //延时500ms
	HAL_Delay(500);   

    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

到这里DHT11的程序就编写完了 ,下面就来看看效果吧 

效果展示

1、将程序下载到开发板

[STM32]HAL库STM32CubeMX+DHT11温湿度传感器

 2、串口助手查看数据

[STM32]HAL库STM32CubeMX+DHT11温湿度传感器

总结 

通过本次DHT11温湿度传感器的学习,掌握了单线双向的数据通信方式DHT11和主机之间数据通讯过程,而且在此过程中要注意延时函数的把控精度,在编写程序中DHT11数据读取方式,数据传输方式和数据存储方式,以及微秒级延迟函数的编写,本设计参考正点原子探索者开发板教程STM32Cube高效开发指南(高级篇)文章来源地址https://www.toymoban.com/news/detail-491665.html

附录(完整程序)

/* USER CODE END Header */

/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "tim.h"
#include "usart.h"
#include "gpio.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include	"stdio.h"
#include  "string.h"

/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */

#define DHT11_HIGH     HAL_GPIO_WritePin(GPIOA, DHT11_Pin,	GPIO_PIN_SET)
#define DHT11_LOW      HAL_GPIO_WritePin(GPIOA, DHT11_Pin, GPIO_PIN_RESET)

#define DHT11_IO_IN      HAL_GPIO_ReadPin(GPIOA, DHT11_Pin)

/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);

void Delay_us(uint16_t delay);              
void DHT11_OUT(void);													
void DHT11_IN(void);                          
void DHT11_Strat(void);				                
uint8_t DHT11_Check(void);                   
uint8_t DHT11_Read_Bit(void);                 
uint8_t DHT11_Read_Byte(void);                
uint8_t DHT11_Read_Data(uint8_t* temp , uint8_t* humi);        

/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

    uint8_t temperature = 1 ; 
	uint8_t humidity = 1;
	uint8_t aTXbuf[32] ;

  /* USER CODE END 1 */
  

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  MX_TIM3_Init();
  /* USER CODE BEGIN 2 */
  DHT11_Strat();
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		
	 DHT11_Read_Data(&temperature , &humidity);
	 sprintf((char*)aTXbuf,"温度:%d℃ , 湿度:%d %% \r\n" ,temperature ,humidity);
	 HAL_UART_Transmit(&huart1, aTXbuf, strlen((const char*)aTXbuf), 200);
	 HAL_Delay(500);

    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

/**
  * @brief System Clock Configuration
  * @retval None
  */
void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  /** Initializes the CPU, AHB and APB busses clocks 
  */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }
  /** Initializes the CPU, AHB and APB busses clocks 
  */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  {
    Error_Handler();
  }
}

/* USER CODE BEGIN 4 */

void Delay_us(uint16_t delay)
{
	__HAL_TIM_DISABLE(&htim3);
	__HAL_TIM_SET_COUNTER(&htim3,0);
	__HAL_TIM_ENABLE(&htim3);
	uint16_t curCnt=0;
	while(1)
	{
		curCnt=__HAL_TIM_GET_COUNTER(&htim3);
		if(curCnt>=delay)
			break;
	}
	__HAL_TIM_DISABLE(&htim3);
}

void DHT11_OUT(void)
{
	GPIO_InitTypeDef  GPIO_InitStruct = {0};

	GPIO_InitStruct.Pin = GPIO_PIN_7;
	GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
	GPIO_InitStruct.Pull = GPIO_PULLUP;
	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
	HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}

void DHT11_IN(void)
{
	GPIO_InitTypeDef  GPIO_InitStruct = {0};

	GPIO_InitStruct.Pin  = GPIO_PIN_7;
	GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
	GPIO_InitStruct.Pull = GPIO_NOPULL;
	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
	HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}


void DHT11_Strat(void)
{
	DHT11_OUT();
	DHT11_LOW;
	HAL_Delay(20);
	DHT11_HIGH;
	Delay_us(30);
}


uint8_t DHT11_Check(void)
{
	uint8_t retry = 0 ;
	DHT11_IN();
		
	while(DHT11_IO_IN && retry <100) 
	{
		retry++;
		Delay_us(1);//1us
	}
	if(retry>=100) 
	{return  1;}
	 else retry =  0 ;
		
	while(!DHT11_IO_IN && retry<100)
	{
		retry++;
		Delay_us(1);//1us
	}
		
	if(retry>=100)
	{return 1;}
	return 0 ;
}


uint8_t DHT11_Read_Bit(void)
{
	uint8_t retry = 0 ;
	while(DHT11_IO_IN && retry <100)
	{
		retry++;
		Delay_us(1);
	}
		retry = 0 ;
	while(!DHT11_IO_IN && retry<100)
	{
		retry++;
		Delay_us(1);
	}
	Delay_us(40);
	if(DHT11_IO_IN) return 1;
	else 
	return 0 ;
}


uint8_t DHT11_Read_Byte(void)
{
	uint8_t i , dat ;
	dat = 0 ;
	for(i=0; i<8; i++)
	{
		dat <<= 1;
		dat |= DHT11_Read_Bit();
	}
	return dat ; 
}


uint8_t DHT11_Read_Data(uint8_t* temp , uint8_t* humi)
{
	uint8_t buf[5];
	uint8_t i;
	DHT11_Strat();
    if(DHT11_Check() == 0)
	{
		for(i=0; i<5; i++)
		{
			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 ;
}

/* USER CODE END 4 */

到了这里,关于[STM32]HAL库STM32CubeMX+DHT11温湿度传感器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • stm32读取DHT11温湿度传感器

    我们知道DHT11是单总线协议,只有一根数据线。 且内部有个上拉电路(下图)。那么数据线默认就是高电平那接下来就可以讲解主机如何和DHT11通讯的 读取DHT11的芯片手册,可以知道,DHT11一次完成的数据输出是40bit,高位先出。 格式:8bit湿度整数数据+8bit湿度小数数据 +8bi温

    2024年02月09日
    浏览(38)
  • stm32连接DHT11温湿度传感器

    目录 1. DHT11简介 1.1. 连接电路  1.2. 串行接口 (单线双向)  2. cubeMX设置 3. 代码开发  3.1. 实现定时函数 3.2. 打开串口调试 3.4. 测试代码实现 4. 运行效果 信息如下: 建议连接线长度短于20米时用5K上拉电阻,大于20米时根据实际情况使 用合适的上拉电阻  DHT11的供电电压为 3-5

    2023年04月16日
    浏览(37)
  • STM32+DHT11采集温湿度传感器数据

            DHT11 是一款湿温度一体化的数字传感器。该传感器包括一个电阻式测湿元件和一个 NTC 测温元件,并与一个高性能 8 位单片机相连接。通过单片机等微处理器简单的电路连接就能够 实时的采集本地湿度和温度。 DHT11 与单片机之间能采用简单的单总线进行通信,仅

    2024年02月07日
    浏览(34)
  • 【STM32】DHT11温湿度模块传感器详解&代码

    DHT11是数字温湿度传感器,测量范围:湿度20%-95%,温度0-50℃,广泛应用于加湿器、温湿度计、空调、汽车等领域。 如上图DATA引脚用于MCU与DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右(超时时间的判断)。一次完整的数据传输为40bit,高位先出(MSB最高

    2024年02月12日
    浏览(44)
  • STM32+DHT11温湿度传感器(含完整代码)

    前言 DHT11数字温湿度传感器是一种数字信号输出的温湿度传感器,具有高可靠性和长期稳定性。它采用专用的数字模块和温湿度传感技术,提供准确的温湿度数据。传感器内部包含感湿元件和测温元件,并与高性能单片机连接。因此,该传感器具有优异的品质、快速响应、抗

    2024年04月08日
    浏览(62)
  • 玩转传感器——DHT11温湿度传感器(STM32版)

    DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产

    2024年02月03日
    浏览(42)
  • Clion开发Stm32之温湿度传感器(DHT11)驱动编写

    涵盖之前文章: Clion开发STM32之HAL库GPIO宏定义封装(最新版) Clion开发stm32之微妙延迟(采用nop指令实现) Clion开发STM32之日志模块(参考RT-Thread) 头文件 源文件

    2024年02月15日
    浏览(36)
  • STM32F4_DHT11数字温湿度传感器

    目录 前言 1. DHT11简介 2. DHT11数据结构 3. DHT11的传输时序 3.1 DHT11开始发送数据流程 3.2 主机复位信号和DHT11响应信号 3.3 数字 “0” 信号表示方法 3.4 数字 “1” 信号表示方法 4. 硬件分析 5. 实验程序详解 5.1 main.c 5.2 DHT11.c 5.3 DHT11.h         DHT11数字温湿度传感器 不但能测温度

    2024年02月08日
    浏览(33)
  • STM32使用温湿度DHT11基于HAL库开发

    DHT11 是一款湿温度一体化的数字传感器。该传感器包括一个电阻式测湿元件和一个 NTC 测温元件,并与一个高性能 8 位单片机相连接。通过单片机等微处理器简单的电路连接就能够 实时的采集本地湿度和温度。DHT11 与单片机之间能采用简单的单总线进行通信,仅仅需要一 个

    2024年02月03日
    浏览(56)
  • (STM32F103单片机)DHT11温湿度传感器

    目录   一,产品介绍 二,产品亮点 三,产品参数 四,引脚连接及通信说明  五,原理讲解 六,源码 1,DHR11.C 2.DHR11.H 3,main.c DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高

    2023年04月08日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包