在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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傳感器,并執行一個循環來讀取數據。如果讀取成功,則將溫度和濕度打印到串口終端上,否則輸出錯誤信息。


審核編輯:湯梓紅

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

    關注

    2564

    文章

    52685

    瀏覽量

    764390
  • 單片機
    +關注

    關注

    6065

    文章

    44935

    瀏覽量

    647750
  • 通信協議
    +關注

    關注

    28

    文章

    1007

    瀏覽量

    40985
  • STM32
    +關注

    關注

    2290

    文章

    11018

    瀏覽量

    362776
  • DHT11
    +關注

    關注

    19

    文章

    277

    瀏覽量

    58326
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    庫房溫濕度監測系統

    不可或缺的一部分,對于保障貨物安全、維護存儲品質具有重要意義。 組成與運行 庫房溫濕度監測系統是一種專門用于倉庫環境溫濕度監測的系統,結合傳
    的頭像 發表于 01-06 16:37 ?492次閱讀

    遠程溫濕度實時監測系統應用方案

    遠程溫濕度實時監測系統,作為現代環境管理的重要組成部分,是各行各業不可或缺的重要工具,對環境溫濕度的遠程、實時、精準
    的頭像 發表于 01-02 17:03 ?555次閱讀

    【正點原子STM32H7R3開發套件試用體驗】DS18B20、DHT11溫濕度采集

    使用正點原子STM32H7R3開發套件,結合DS18B20、DHT11溫濕度傳感器,采集環境溫度和濕度數據,并通過 LCD 屏顯示,同時串口
    發表于 01-01 11:16

    XKCON祥控倉庫存儲環境溫濕度在線監測系統能夠取代人工巡檢,實現遠程倉庫存儲環境溫濕度變化的實時

    的XKCON祥控倉庫存儲環境溫濕度在線監測系統通過安裝固定式環境溫濕度檢測儀對倉儲環境
    的頭像 發表于 11-20 11:20 ?487次閱讀
    XKCON祥控倉庫存儲<b class='flag-5'>環境</b><b class='flag-5'>溫濕度</b>在線<b class='flag-5'>監測</b>系統能夠取代人工巡檢,實現遠程倉庫存儲<b class='flag-5'>環境</b><b class='flag-5'>溫濕度</b>變化的實時

    LORA無線溫濕度監測系統

    LORA無線溫濕度監測系統,作為現代環境監測技術的重要組成部分,正日益受到各行各業的廣泛關注和應用。 LORA無線溫濕度監測系統,利用LOR
    的頭像 發表于 11-07 16:57 ?753次閱讀

    dht11溫濕度傳感器工作原理介紹

    DHT11是一種常用的溫濕度傳感器,它能夠測量溫度和相對濕度。這種傳感器廣泛應用于智能家居、氣象站、農業監控等領域。 DHT11溫濕度傳感器
    的頭像 發表于 10-21 09:47 ?8440次閱讀

    Arduino Nano 和 DHT11 實現 LabVIEW 溫濕度采集

    Arduino Nano 和 DHT11 實現 LabVIEW 溫濕度采集
    的頭像 發表于 10-08 11:46 ?1067次閱讀
    Arduino Nano 和 <b class='flag-5'>DHT11</b> 實現 LabVIEW <b class='flag-5'>溫濕度</b>采集

    溫濕度監測解決方案

    在現代工業、農業、醫療及居家環境中,溫濕度監測已成為保障生產質量、提升生活品質、確保環境安全不可或缺的一環。有效的溫濕度
    的頭像 發表于 09-04 17:16 ?662次閱讀

    冷庫環境溫濕度監控系統

    預防因溫濕度波動導致的貨物損失,確保產品從生產到消費終端的全鏈條品質穩定。 冷庫環境溫濕度監控系統,集數據采集、傳輸、處理、顯示、報警于一體的智能化管理解決方案。通過實時監測、精準控制
    的頭像 發表于 08-21 16:07 ?673次閱讀

    Arduino Nano 和 NodeMCU ESP8266 讀取 DHT11 環境溫濕度數據及 OLED顯示

    Arduino Nano 和 NodeMCU ESP8266 讀取 DHT11 環境溫濕度數據及 OLED顯示
    的頭像 發表于 08-13 18:04 ?1967次閱讀
    Arduino Nano 和 NodeMCU ESP8266 讀取 <b class='flag-5'>DHT11</b> <b class='flag-5'>環境</b><b class='flag-5'>溫濕度</b>數據及 OLED顯示

    溫濕度監測系統應用

    在現代化工業生產、倉儲管理、農業種植以及智能家居等領域,溫濕度監測已成為不可或缺的一環。溫濕度作為環境控制的關鍵因素,直接影響著產品質量、存儲安全、作物生長效率以及居住舒適度。因此,一
    的頭像 發表于 07-26 16:15 ?795次閱讀

    庫房溫濕度自動監測系統

    倉儲、庫房在管理上,環境控制都是重中之重。庫房溫濕度自動監測系統作為一種更為便捷的解決方案,已經得到廣泛的應用。 庫房溫濕度自動監測系統通過
    的頭像 發表于 07-09 18:00 ?1105次閱讀

    糧倉環境溫濕度監測系統方案

    糧食在儲存過程中,溫濕度是影響其品質和安全的關鍵因素。過高或過低的溫度可能導致糧食發芽、霉變或蟲害,而濕度過大則容易引起糧食結塊、霉變等問題。建立科學、高效的糧倉環境溫濕度
    的頭像 發表于 07-05 16:29 ?798次閱讀

    糧倉溫濕度監測解決方案

    的損失。 糧倉溫濕度監測解決方案,通過GPRS無線傳輸的溫濕度傳感器、變送器等設備,利用無線網絡,通過管理云平臺同步查看糧倉情況。根據不同應用場合的具體需求靈活快速配置,建立全面而有效的糧倉
    的頭像 發表于 07-04 16:37 ?624次閱讀

    想要準確地測量環境溫濕度溫濕度傳感器是關鍵!

    ? 溫濕度是生產生活中最重要的環境指標之一,不僅人需要在適宜的溫濕度條件下保持良好的精神狀態和敏捷的思維,食品、藥品、各種儀器設備等都對環境溫濕度
    的頭像 發表于 07-04 08:48 ?1021次閱讀
    主站蜘蛛池模板: 欧美黄色精品 | 亚洲国产精品婷婷久久久久 | 天堂在线最新资源 | 亚洲最大色网 | 经典三级一区二区三区视频 | 26uuu另类欧美亚洲曰本 | 国产片一级aaa毛片视频 | 日本wwwxx | 色多多视频在线观看免费大全 | 久久老色鬼天天综合网观看 | 天天拍拍天天爽免费视频 | 大香伊人网 | 午夜国产片| 国产午夜精品久久久久免费视 | 国产一级特黄生活片 | 香港经典a毛片免费观看爽爽影院 | 在线播放91灌醉迷j高跟美女 | 免费午夜不卡毛片 | 国产激情视频一区二区三区 | 扒开双腿爽爽爽视频www | youjizz国产 | 你懂得的在线观看免费视频 | 成人二区 | 伊人久久大线蕉香港三级 | 国产三级a三级三级天天 | 亚洲高清国产拍精品影院 | 35pao免费视频 | 天天摸天天碰色综合网 | 日本特黄特黄刺激大片免费 | 亚洲国产精 | 色www 永久免费网站 | 色综合激情丁香七月色综合 | 九九午夜 | 欧美黑人粗暴另类多交 | 狠狠色狠狠色综合日日小蛇 | 一区二区三区四区视频在线 | 一 级 黄 色 片生活片 | 日韩在线影院 | 午夜无码国产理论在线 | 六月丁香激情综合成人 | 日本级毛片免费观看 |