国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

STM32+DHT11監測環境的溫濕度

DS小龍哥-嵌入式技術 ? 來源:DS小龍哥-嵌入式技術 ? 作者:DS小龍哥-嵌入式技 ? 2023-05-17 09:22 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

【1】DHT11傳感器

DHT11是一種數字溫濕度傳感器,能夠通過數字信號輸出當前環境的溫度和濕度值。DHT11可以通過一條數據信號線連接到微控制器或其他外設,從而實現溫濕度的實時測量和數據讀取。

DHT11采用單總線通信協議,只需要連接一個數字信號線和兩個電源線,即可實現傳感器的數據讀取。傳感器本身具有一定的溫度和濕度校準能力,因此輸出的數據比較可靠。

DHT11傳感器的測量范圍為0~50°C的溫度和20%~90%的相對濕度,測量精度為±2°C和±5%RH。

【2】通信協議

DHT11采用單總線通信協議,使用一條數據信號線來傳輸數據,其中包括起始信號、數據位和校驗位。通信協議如下:

  1. 主機發送一個開始信號給DHT11,即將數據信號線拉低至少18ms以上。
  2. 主機發出啟動信號之后,拉低數據線至少80us,在這個過程中,DHT11將會檢測到主機發送的啟動信號,并做出回應。
  3. DHT11響應主機發出的啟動信號后,會拉高數據信號線至少80us,表示傳輸數據前的“準備工作”已經完成。
  4. DHT11開始向主機發送數據,每個數據包包含40個位,高位先傳輸。在數據傳輸的過程中,DHT11會將數據信號線從低電平轉換為高電平,表示1的開始,持續時間2628us,然后將數據線拉低,表示0的開始,持續時間70us。
  5. 在發送完40位數據后,DHT11會發送一個校驗位。校驗位的計算方法是將前四個字節數據相加,求出一個8位校驗碼,將此校驗碼與第五個字節進行比較,如果相等,則數據傳輸成功,否則需要重傳數據。
  6. 主機接收到數據后,需要將數據信號線拉高,以結束傳輸。

【3】讀取DHT11溫濕度數據

以下是一個讀取DHT11傳感器的溫度和濕度示例代碼:

Copy Code#include "stm32f10x.h"
#include "dht11.h"
?
#define DHT11_GPIO_PORT GPIOB
#define DHT11_GPIO_PIN GPIO_Pin_12
?
void delay_us(uint32_t us)
{
  us *= (SystemCoreClock / 1000000) / 5;
  while (--us);
}
?
void dht11_start(void)
{
  GPIO_InitTypeDef GPIO_InitStruct;
?
  GPIO_InitStruct.GPIO_Pin = DHT11_GPIO_PIN;
  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
?
  GPIO_Init(DHT11_GPIO_PORT, &GPIO_InitStruct);
?
  /* 發送開始信號 */
  GPIO_ResetBits(DHT11_GPIO_PORT, DHT11_GPIO_PIN);
  delay_us(18000);
?
  GPIO_SetBits(DHT11_GPIO_PORT, DHT11_GPIO_PIN);
  delay_us(40);
?
  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
?
  GPIO_Init(DHT11_GPIO_PORT, &GPIO_InitStruct);
}
?
uint16_t dht11_read_bit(void)
{
  uint16_t retry = 0;
?
  while (GPIO_ReadInputDataBit(DHT11_GPIO_PORT, DHT11_GPIO_PIN) == RESET) {
    retry++;
    if (retry > 1000) {
      return 0;
     }
    delay_us(1);
   }
?
  retry = 0;
?
  while (GPIO_ReadInputDataBit(DHT11_GPIO_PORT, DHT11_GPIO_PIN) == SET) {
    retry++;
    if (retry > 1000) {
      return 0;
     }
    delay_us(1);
   }
?
  if (retry < 30) {
? ? ? ? ?return 0;
? ?  } else {
? ? ? ? ?return 1;
? ?  }
?}
??
?uint8_t dht11_read_byte(void)
?{
? ? ?uint8_t i;
? ? ?uint8_t data = 0;
??
? ? ?for (i = 0; i < 8; i++) {
? ? ? ? ?data <<= 1;
? ? ? ? ?if (dht11_read_bit()) {
? ? ? ? ? ? ?data |= 0x01;
? ? ? ?  }
? ?  }
??
? ? ?return data;
?}
??
?uint8_t dht11_read_data(dht11_data_t *data)
?{
? ? ?uint8_t i;
? ? ?uint8_t buf[5];
? ? ?uint8_t checksum = 0;
??
? ? ?dht11_start();
??
? ? ?if (GPIO_ReadInputDataBit(DHT11_GPIO_PORT, DHT11_GPIO_PIN) == RESET) {
? ? ? ? ?/* 等待DHT11響應 */
? ? ? ? ?while (GPIO_ReadInputDataBit(DHT11_GPIO_PORT, DHT11_GPIO_PIN) == RESET);
??
? ? ? ? ?/* 等待DHT11發射數據 */
? ? ? ? ?while (GPIO_ReadInputDataBit(DHT11_GPIO_PORT, DHT11_GPIO_PIN) == SET);
??
? ? ? ? ?/* 接收數據 */
? ? ? ? ?for (i = 0; i < 5; i++) {
? ? ? ? ? ? ?buf[i] = dht11_read_byte();
? ? ? ?  }
??
? ? ? ? ?/* 校驗和 */
? ? ? ? ?checksum = buf[0] + buf[1] + buf[2] + buf[3];
??
? ? ? ? ?if (checksum == buf[4]) {
? ? ? ? ? ? ?data->humidity = buf[0];
      data->temperature = buf[2];
      return 1;
     }
   }
?
  return 0;
}
?
int main(void)
{
  dht11_data_t data;
?
  GPIO_InitTypeDef GPIO_InitStruct;
?
  /* 使能GPIOB時鐘 */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
?
  /* 配置DHT11引腳為輸入模式 */
  GPIO_InitStruct.GPIO_Pin = DHT11_GPIO_PIN;
  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
?
  GPIO_Init(DHT11_GPIO_PORT, &GPIO_InitStruct);
?
  while (1) {
    if (dht11_read_data(&data)) {
      printf("Temperature: %d°C   Humidity: %d%%n", data.temperature, data.humidity);
     } else {
      printf("Error reading data from DHT11.n");
     }
    delay_us(2000000);
   }
}

在這個示例代碼中,首先定義了一個dht11_data_t結構體,用于保存讀取的溫度和濕度數據。然后,編寫了一些函數來執行DHT11讀取操作。

delay_us()函數是一個簡單的延遲函數,用于等待一定量的時間。需要精確地計算一個微秒的延遲,并在循環中使用該延遲來等待一段時間。

dht11_start()函數用于發送DHT11的開始信號。將DHT11引腳配置為輸出模式,并發送18毫秒的低電平信號,然后再發送40微秒的高電平信號。

dht11_read_bit()函數用于讀取DHT11傳輸的數據位。等待DHT11輸出信號的變化,并根據變化的時間來判斷數據位的值。如果一個數據位的響應時間小于30微秒,則被判定為0,否則為1。

dht11_read_byte()函數用于讀取一個字節的數據(8個數據位)。通過調用dht11_read_bit()函數8次來讀取每個數據位,并將結果組合成一個字節。

dht11_read_data()函數用于讀取整個DHT11數據包,包括溫度、濕度和校驗和。首先調用dht11_start()函數發送開始信號,然后等待DHT11發送數據。使用dht11_read_byte()函數讀取5個字節的數據,并驗證校驗和以確保數據完整和正確。

最后,在main()函數中,初始化GPIO口和DHT11傳感器,并執行一個循環來讀取數據。如果讀取成功,則將溫度和濕度打印到串口終端上,否則輸出錯誤信息。


審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 傳感器
    +關注

    關注

    2576

    文章

    55038

    瀏覽量

    791270
  • 單片機
    +關注

    關注

    6076

    文章

    45495

    瀏覽量

    670313
  • 通信協議
    +關注

    關注

    28

    文章

    1092

    瀏覽量

    42151
  • STM32
    +關注

    關注

    2309

    文章

    11162

    瀏覽量

    373426
  • DHT11
    +關注

    關注

    19

    文章

    277

    瀏覽量

    59705
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    數據安全優先:以太網溫濕度監測與追溯合規方案

    的關鍵參數。傳統人工監測方式存在效率低、誤差大、數據不連續、無法實時預警等問題,難以滿足現代化管理對環境監測的精細化、智能化要求。以太網溫濕度記錄儀憑借 實時傳輸、遠程管理、數據可追溯、穩定性強 等優勢,成為解決上述
    的頭像 發表于 12-23 14:39 ?1051次閱讀

    【瑞薩RA6E2地奇星開發板試用】DHT11 測量溫濕度

    使用瑞薩 RA6E2 微控制器,實現 DHT11 溫濕度傳感器的數據采集,并通過 I2C 接口的 OLED12864 顯示屏實時顯示數據。 硬件準備? 核心板:瑞薩 RA6E2 地奇星開發板
    發表于 12-19 18:50

    宏集案例 | COMET無線溫濕度監測系統助力文物展陳與長期保存

    案例概況客戶:捷克皇冠珠寶展覽方應用產品:宏集COMET溫濕度監測系統應用場景:溫濕度環境監測&文物保護01合作背景Background捷克王冠珠寶是國家的重要歷史文化象征,包括圣溫塞
    的頭像 發表于 11-13 17:40 ?570次閱讀
    宏集案例 | COMET無線<b class='flag-5'>溫濕度</b><b class='flag-5'>監測</b>系統助力文物展陳與長期保存

    溫濕度傳感器HTU31D在溫濕度控器中的應用優勢

    溫濕度控制器是一種用于監測和調節環境溫度與濕度的設備,廣泛應用于農業、倉儲、工業生產、家庭等多個領域。其主要功能是維持特定環境條件,以確保產
    的頭像 發表于 11-06 14:38 ?327次閱讀
    <b class='flag-5'>溫濕度</b>傳感器HTU31D在<b class='flag-5'>溫濕度</b>控器中的應用優勢

    如何對電能質量在線監測裝置進行溫濕度環境適應性測試?

    對電能質量在線監測裝置進行溫濕度環境適應性測試,核心是通過 高低溫濕熱箱模擬目標場景的極端溫濕度條件 ,驗證裝置在 “低溫啟動、高溫運行、濕
    的頭像 發表于 10-22 17:50 ?1352次閱讀

    基于LORA無線通訊的祥控多點式煙葉溫濕度監測系統

    XKCON祥控多點式煙葉溫濕度監測系統基于LORA無線通訊技術,無需復雜的布線工作,縮短了工期,節省了成本;系統可以根據煙廠的實際布局和需求進行靈活配置,實現對各單點無線溫濕度檢測桿測量信號的采集接收,大大提升了系統
    的頭像 發表于 09-23 17:02 ?779次閱讀
    基于LORA無線通訊的祥控多點式煙葉<b class='flag-5'>溫濕度</b><b class='flag-5'>監測</b>系統

    基于物聯網的溫濕度監測系統方案:構建全域感知的智能環境網絡

    儲備糧; -精密制造:半導體車間1%濕度波動引發30%良品率下降; 基于物聯網的溫濕度監測系統正成為破解環境管理難題的核心基礎設施。本方案基于“端-管-云-用”架構,實現從單點
    的頭像 發表于 07-24 18:05 ?905次閱讀

    一款適用于粉塵、易結露等惡劣環境溫濕度監控中的溫濕度傳感芯片

    溫濕度監控系統在惡劣環境中通過傳感器實時監測溫濕度參數,當達到預設閾值時自動觸發預警或調節機制,確保環境狀態維持在安全范圍內。
    的頭像 發表于 07-09 09:41 ?684次閱讀
    一款適用于粉塵、易結露等惡劣<b class='flag-5'>環境</b><b class='flag-5'>溫濕度</b>監控中的<b class='flag-5'>溫濕度</b>傳感芯片

    全自動溫濕度監測系統:環境數據驅動的智能化革命

    在藥品失效、芯片良率下降、文物損毀等事故背后,溫濕度失控往往是關鍵誘因。全自動溫濕度監測系統通過物聯網、邊緣計算與AI技術的融合,正重塑醫藥、農業、工業、物流等領域的風險管理模式,將環境
    的頭像 發表于 07-08 16:53 ?743次閱讀

    基于物聯網的溫濕度監測系統

    在醫藥冷鏈、智慧農業、智能制造等領域,溫濕度失控輕則導致品質下降,重則引發安全事故。傳統人工巡檢方式滯后性強、誤差率高,而物聯網溫濕度監測系統通過“端-管-云-用”架構,實現環境數據的
    的頭像 發表于 07-08 16:52 ?696次閱讀

    常見的溫濕度傳感器類型?

    DHT11溫濕度傳感器 DHT11是一種常見的數字溫濕度傳感器,具有價格低廉、簡單易用的優點,但其精度和響應速度較低。 HDC1080溫濕度
    發表于 06-24 09:24

    溫濕度變送器功能有哪些?一文詳細解析

    功能就是精準測量環境中的溫度和濕度。它采用高精度的傳感器,能夠快速、準確地感知環境溫濕度的變化,并將這些數據轉化為可識別的電信號。無論是在實驗室、倉庫,還是在生產車間,都能為用戶提供可
    發表于 06-03 10:56

    智能倉儲:溫濕度監控方案應用

    隨著倉儲環境要求提高,溫濕度監控對保障貨物品質至關重要。本文介紹一個工廠倉庫溫濕度監控方案,利用溫濕度變送器、LoRa技術和智能監測平臺,為
    的頭像 發表于 05-29 11:35 ?782次閱讀
    智能倉儲:<b class='flag-5'>溫濕度</b>監控方案應用

    用樹莓派RP2350 DIY 桌面動態溫濕度

    桌面動態溫濕度計本文介紹了DFrobotBeetleRP2350開發板結合DHT11模塊、鋰電池模塊、隨機眨眼動畫,實現OLED顯示的桌面動態溫濕度計的項目設計。一、項目介紹本項目包括工作原理:ADC電壓采集與電量轉換工程調試:
    的頭像 發表于 05-27 08:05 ?911次閱讀
    用樹莓派RP2350 DIY 桌面動態<b class='flag-5'>溫濕度</b>計

    LoRa無線技術的溫濕度監測預警系統

    LoRa無線技術的溫濕度監測預警系統采用LoRa采集器和LoRa網關實現監控區域內的全覆蓋,同時在倉儲區各個數據采集節點安裝溫濕度傳感器,實現對監測區域的
    的頭像 發表于 05-14 16:06 ?853次閱讀
    LoRa無線技術的<b class='flag-5'>溫濕度</b><b class='flag-5'>監測</b>預警系統