国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

stm32連接DHT11溫濕度傳感器

這篇具有很好參考價值的文章主要介紹了stm32連接DHT11溫濕度傳感器。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

1. DHT11簡介

1.1. 連接電路?

1.2. 串行接口 (單線雙向)

?2. cubeMX設(shè)置

3. 代碼開發(fā)

?3.1. 實現(xiàn)定時函數(shù)

3.2. 打開串口調(diào)試

3.4. 測試代碼實現(xiàn)

4. 運行效果


1. DHT11簡介

1.1. 連接電路?

信息如下:

stm32連接DHT11溫濕度傳感器

建議連接線長度短于20米時用5K上拉電阻,大于20米時根據(jù)實際情況使
用合適的上拉電阻

stm32連接DHT11溫濕度傳感器

?DHT11的供電電壓為 3-5.5V。傳感器上電后,要等待 1s 以越過不穩(wěn)定狀態(tài)在此
期間無需發(fā)送任何指令。電源引腳(VDD,GND)之間可增加一個100nF 的電容,用以去
耦濾波。

1.2. 串行接口 (單線雙向)

DATA 用于微處理器與 DHT11之間的通訊和同步,采用單總線數(shù)據(jù)格式,一次
通訊時間4ms左右,數(shù)據(jù)分小數(shù)部分和整數(shù)部分,具體格式在下面說明,當(dāng)前小數(shù)
部分用于以后擴(kuò)展,現(xiàn)讀出為零.操作流程如下:
一次完整的數(shù)據(jù)傳輸為40bit,高位先出。
數(shù)據(jù)格式:8bit濕度整數(shù)數(shù)據(jù)+8bit濕度小數(shù)數(shù)據(jù)
+8bi溫度整數(shù)數(shù)據(jù)+8bit溫度小數(shù)數(shù)據(jù)
+8bit校驗和
數(shù)據(jù)傳送正確時校驗和數(shù)據(jù)等于“8bit濕度整數(shù)數(shù)據(jù)+8bit濕度小數(shù)數(shù)據(jù)
+8bi溫度整數(shù)數(shù)據(jù)+8bit溫度小數(shù)數(shù)據(jù)”所得結(jié)果的末8位。

stm32連接DHT11溫濕度傳感器

stm32連接DHT11溫濕度傳感器

?stm32連接DHT11溫濕度傳感器

?stm32連接DHT11溫濕度傳感器

?stm32連接DHT11溫濕度傳感器

stm32連接DHT11溫濕度傳感器

?2. cubeMX設(shè)置

  1. GPIOE,GPIO_PIN_6,作為DATA接口。推挽輸出,上拉電阻。
  2. 打開定時器TIM6。
  3. 開啟USART1。

3. 代碼開發(fā)

?3.1. 實現(xiàn)定時函數(shù)

time.c文件:

/* USER CODE BEGIN 0 */
#include <stdio.h>
/* USER CODE END 0 */

/* USER CODE BEGIN 1 */
void delay_us(uint16_t delayValue)
{
	uint16_t delayCount=0;
	HAL_TIM_Base_Start(&htim6);
	__HAL_TIM_SetCounter(&htim6,delayCount);
	while(delayCount<delayValue)
	{
		delayCount=__HAL_TIM_GetCounter(&htim6);
	}
	HAL_TIM_Base_Stop(&htim6);
}

void delay_ms(uint16_t delayValue)
{
	for(int i=0;i<delayValue;i++)
	{
		delay_us(1000);
	}
}

/* USER CODE END 1 */

3.2. 打開串口調(diào)試

?usart.h文件:

/* USER CODE BEGIN Includes */
#include <stdio.h>
/* USER CODE END Includes */

?usart.c文件:

/* USER CODE BEGIN 1 */
int fputc(int ch,FILE *f)
{
	HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,1000);
	return ch;
}
/* USER CODE END 1 */

3.3. 實現(xiàn)DHT11協(xié)議

gpio.h文件:

/* USER CODE BEGIN Private defines */
typedef enum
{
	INPUT=0,OUTPUT
}IOMODE;
#define DHT_GPIO_H    HAL_GPIO_WritePin(GPIOE, GPIO_PIN_6, GPIO_PIN_SET)
#define DHT_GPIO_L    HAL_GPIO_WritePin(GPIOE, GPIO_PIN_6, GPIO_PIN_RESET)
/* USER CODE END Private defines */

/* USER CODE BEGIN Prototypes */
_Bool readDht11(void);
/* USER CODE END Prototypes */

gpio.c文件:

/* USER CODE BEGIN 0 */
#include "tim.h"
#include <stdio.h>
#include "main.h"
/* USER CODE END 0 */

/* USER CODE BEGIN 1 */
uint8_t humiAndTemp[5];
_Bool status=1;
/* USER CODE END 1 */

/* USER CODE BEGIN 2 */

void dht11IOMode(IOMODE ioMode)
{
	GPIO_InitTypeDef GPIO_InitStruct = {0};
	GPIO_InitStruct.Pin = GPIO_PIN_6;
	if(ioMode==INPUT)
	{
		GPIO_InitStruct.Mode=GPIO_MODE_INPUT;
		GPIO_InitStruct.Pull=GPIO_PULLUP;
		HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
	}else if(ioMode==OUTPUT)
	{
		HAL_GPIO_WritePin(GPIOE, GPIO_PIN_6, GPIO_PIN_SET);
		GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP;
		GPIO_InitStruct.Pull=GPIO_PULLUP;
		GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
		HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
	}
}

_Bool dht11Start(void)
{
	dht11IOMode(OUTPUT);
	DHT_GPIO_L;
	delay_ms(20);
	dht11IOMode(INPUT);
	delay_us(30);
	
	uint16_t count;
	for(count=0;count<60;count++)
	{
		if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_6)==GPIO_PIN_RESET)
			break;
		delay_us(2);
	}
	if(count>=59)
	{
		LOG("dht11 start fail\n");
		return 0;
	}
	while(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_6)==GPIO_PIN_RESET);
	while(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_6)==GPIO_PIN_SET);
	return 1;
}

uint8_t readDht11Byte(void)
{
	uint8_t value=0;
	uint8_t count=0;
	for(uint8_t i=0;i<8;i++)
	{
		value<<=1;
		count=0;
		while(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_6)==GPIO_PIN_RESET)
		{
			count++;
			if(count>=35)
			{
				status=0;
				return 0;
			}
			delay_us(2);
		}
		delay_us(38);
		if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_6)==GPIO_PIN_SET)
		{
			value|=1;
		}else{
			value|=0;
		}
		count=0;
		while(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_6)==GPIO_PIN_SET)
		{
			count++;
			if(count>=35)
			{
				status=0;
				return 0;
			}
			delay_us(2);
		}
	}
	status=1;
	return value;
}

_Bool readDht11(void)
{
	uint8_t check_value=0;
	if(dht11Start()==0)
	{
		LOG("dht11 start fail\n");
		return 0;
		
	}
	for(uint8_t i=0;i<5;i++)
	{
		humiAndTemp[i]=readDht11Byte();
		if(status==0)
		{
			LOG("humiAndTemp[%d] fail\n",i);
			return 0;
			
		}
		status=1;
		if(i!=4)
		{
			check_value+=humiAndTemp[i];
		}
	}
	
	if(check_value==humiAndTemp[4])
	{
		LOG("check_value success,check_value:%d,humiAndTemp[4]:%d\n",check_value,humiAndTemp[4]);
		return 1;
	}else{
		LOG("check_value fail,check_value:%d,humiAndTemp[4]:%d\n",check_value,humiAndTemp[4]);
		return 0;
		
	}
}

/* USER CODE END 2 */

3.4. 測試代碼實現(xiàn)

main.h文件:

/* USER CODE BEGIN Private defines */
#define OPENLOG
#ifdef OPENLOG
#define LOG(fmt, ...)          printf("<%s:%s>:"fmt"\r\n", __FILE__, __FUNCTION__, ##__VA_ARGS__)
#else
#define LOG(fmt, ...)
#endif
/* USER CODE END Private defines */

main.c文件:

  /* USER CODE BEGIN 2 */
	HAL_Delay(1000);
  /* USER CODE END 2 */

/* USER CODE BEGIN WHILE */
  while (1)
  {
		printf("hello world\n");
		if(readDht11())
		{
			printf("readDht11 success\n");
			printf("humiAndTemp[0]:%d\n",humiAndTemp[0]);
			printf("humiAndTemp[1]:%d\n",humiAndTemp[1]);
			printf("humiAndTemp[2]:%d\n",humiAndTemp[2]);
			printf("humiAndTemp[3]:%d\n",humiAndTemp[3]);
			printf("humiAndTemp[4]:%d\n",humiAndTemp[4]);

			uint16_t humi=(humiAndTemp[0]<<8) + humiAndTemp[1];
			uint16_t temp=(humiAndTemp[2]<<8) + humiAndTemp[3];
			printf("temp:%d.%d\n",temp>>8,temp&0xff);
			printf("humi:%d.%d\n",humi>>8,humi&0xff);
		}
		else
		{
			printf("readDht11 fail\n");
		}

		delay_ms(5000);
    /* USER CODE END WHILE */
    }

4. 運行效果

stm32連接DHT11溫濕度傳感器

?文章來源地址http://www.zghlxwxcb.cn/news/detail-415672.html

到了這里,關(guān)于stm32連接DHT11溫濕度傳感器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • STM32+DHT11采集溫濕度傳感器數(shù)據(jù)

    STM32+DHT11采集溫濕度傳感器數(shù)據(jù)

    ????????DHT11 是一款濕溫度一體化的數(shù)字傳感器。該傳感器包括一個電阻式測濕元件和一個 NTC 測溫元件,并與一個高性能 8 位單片機(jī)相連接。通過單片機(jī)等微處理器簡單的電路連接就能夠 實時的采集本地濕度和溫度。 DHT11 與單片機(jī)之間能采用簡單的單總線進(jìn)行通信,僅

    2024年02月07日
    瀏覽(39)
  • 玩轉(zhuǎn)傳感器——DHT11溫濕度傳感器(STM32版)

    玩轉(zhuǎn)傳感器——DHT11溫濕度傳感器(STM32版)

    DHT11數(shù)字溫濕度傳感器是一款含有已校準(zhǔn)數(shù)字信號輸出的溫濕度復(fù)合傳感器。它應(yīng)用專用的數(shù)字模塊采集技術(shù)和溫濕度傳感技術(shù),確保產(chǎn)品具有極高的可靠性與卓越的長期穩(wěn)定性。傳感器包括一個電阻式感濕元件和一個NTC測溫元件,并與一個高性能8位單片機(jī)相連接。因此該產(chǎn)

    2024年02月03日
    瀏覽(27)
  • 【STM32(HAL庫)--DHT11溫濕度傳感器】

    【STM32(HAL庫)--DHT11溫濕度傳感器】

    stm32控制DHT11溫濕度傳感器,進(jìn)行溫濕度的讀取.以下是自己的一點學(xué)習(xí)過程和心得,若有不妥之處,還望各位大佬指正,在下感激不盡. DHT11數(shù)字溫濕度傳感器是一款含有已校準(zhǔn)數(shù)字信號輸出的溫濕度復(fù)合傳感器 。 它應(yīng)用專用的數(shù)字模塊采集技術(shù)溫濕度傳感技術(shù), 確保產(chǎn)品具有極高

    2024年04月15日
    瀏覽(28)
  • STM32+DHT11溫濕度傳感器(含完整代碼)

    STM32+DHT11溫濕度傳感器(含完整代碼)

    前言 DHT11數(shù)字溫濕度傳感器是一種數(shù)字信號輸出的溫濕度傳感器,具有高可靠性和長期穩(wěn)定性。它采用專用的數(shù)字模塊和溫濕度傳感技術(shù),提供準(zhǔn)確的溫濕度數(shù)據(jù)。傳感器內(nèi)部包含感濕元件和測溫元件,并與高性能單片機(jī)連接。因此,該傳感器具有優(yōu)異的品質(zhì)、快速響應(yīng)、抗

    2024年04月08日
    瀏覽(28)
  • 【STM32】DHT11溫濕度模塊傳感器詳解&代碼

    【STM32】DHT11溫濕度模塊傳感器詳解&代碼

    DHT11是數(shù)字溫濕度傳感器,測量范圍:濕度20%-95%,溫度0-50℃,廣泛應(yīng)用于加濕器、溫濕度計、空調(diào)、汽車等領(lǐng)域。 如上圖DATA引腳用于MCU與DHT11之間的通訊和同步,采用單總線數(shù)據(jù)格式,一次通訊時間4ms左右(超時時間的判斷)。一次完整的數(shù)據(jù)傳輸為40bit,高位先出(MSB最高

    2024年02月12日
    瀏覽(20)
  • [STM32]HAL庫STM32CubeMX+DHT11溫濕度傳感器

    [STM32]HAL庫STM32CubeMX+DHT11溫濕度傳感器

    目錄 所用的工具: 知識概括: DHT11介紹: DHT11性能說明: 接口說明 ?電源引腳 串行接口?? 工程創(chuàng)建 1、設(shè)置RCC 2、時鐘設(shè)置 3、項目文件設(shè)置 4、設(shè)置IO口(DATA) 5、TIM時鐘配置 6、USART配置 ? 程序編寫: ? ? ? ???1、TIM3實現(xiàn)微秒(us)級延時函數(shù): 2、IO口配置 3、DHT11檢測

    2024年02月09日
    瀏覽(30)
  • STM32F4_DHT11數(shù)字溫濕度傳感器

    STM32F4_DHT11數(shù)字溫濕度傳感器

    目錄 前言 1. DHT11簡介 2. DHT11數(shù)據(jù)結(jié)構(gòu) 3. DHT11的傳輸時序 3.1 DHT11開始發(fā)送數(shù)據(jù)流程 3.2 主機(jī)復(fù)位信號和DHT11響應(yīng)信號 3.3 數(shù)字 “0” 信號表示方法 3.4 數(shù)字 “1” 信號表示方法 4. 硬件分析 5. 實驗程序詳解 5.1 main.c 5.2 DHT11.c 5.3 DHT11.h ????????DHT11數(shù)字溫濕度傳感器 不但能測溫度

    2024年02月08日
    瀏覽(88)
  • Clion開發(fā)Stm32之溫濕度傳感器(DHT11)驅(qū)動編寫

    涵蓋之前文章: Clion開發(fā)STM32之HAL庫GPIO宏定義封裝(最新版) Clion開發(fā)stm32之微妙延遲(采用nop指令實現(xiàn)) Clion開發(fā)STM32之日志模塊(參考RT-Thread) 頭文件 源文件

    2024年02月15日
    瀏覽(26)
  • (STM32F103單片機(jī))DHT11溫濕度傳感器

    (STM32F103單片機(jī))DHT11溫濕度傳感器

    目錄 ? 一,產(chǎn)品介紹 二,產(chǎn)品亮點 三,產(chǎn)品參數(shù) 四,引腳連接及通信說明 ?五,原理講解 六,源碼 1,DHR11.C 2.DHR11.H 3,main.c DHT11數(shù)字溫濕度傳感器是一款含有已校準(zhǔn)數(shù)字信號輸出的溫濕度復(fù)合傳感器。它應(yīng)用專用的數(shù)字模塊采集技術(shù)和溫濕度傳感技術(shù),確保產(chǎn)品具有極高

    2023年04月08日
    瀏覽(28)
  • ESP32單片機(jī)使用DHT11溫濕度傳感器的實踐與代碼解析

    摘要:本文將介紹如何使用ESP32單片機(jī)與溫濕度傳感器進(jìn)行連接和數(shù)據(jù)讀取。通過實例代碼的解析,幫助讀者了解實現(xiàn)溫濕度檢測的原理和方法。 一、引言 ESP32是一款功能強(qiáng)大的微控制器,廣泛應(yīng)用于物聯(lián)網(wǎng)、智能家居等領(lǐng)域。在許多應(yīng)用場景中,溫濕度傳感器是不可或缺的

    2024年02月21日
    瀏覽(43)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包