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


審核編輯:湯梓紅

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

    關注

    2560

    文章

    52158

    瀏覽量

    761430
  • 單片機
    +關注

    關注

    6057

    文章

    44813

    瀏覽量

    644354
  • 通信協議
    +關注

    關注

    28

    文章

    971

    瀏覽量

    40835
  • STM32
    +關注

    關注

    2282

    文章

    10986

    瀏覽量

    361118
  • DHT11
    +關注

    關注

    19

    文章

    277

    瀏覽量

    58133
收藏 人收藏

    評論

    相關推薦

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

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

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

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

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

    的XKCON祥控倉庫存儲環境溫濕度在線監測系統通過安裝固定式環境溫濕度檢測儀對倉儲環境
    的頭像 發表于 11-20 11:20 ?403次閱讀
    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 ?645次閱讀

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

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

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

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

    溫濕度監測解決方案

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

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

    Arduino Nano 和 NodeMCU ESP8266 讀取 DHT11 環境溫濕度數據及 OLED顯示
    的頭像 發表于 08-13 18:04 ?1724次閱讀
    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 ?654次閱讀

    庫房溫濕度自動監測系統

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

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

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

    糧倉溫濕度監測解決方案

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

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

    ? 溫濕度是生產生活中最重要的環境指標之一,不僅人需要在適宜的溫濕度條件下保持良好的精神狀態和敏捷的思維,食品、藥品、各種儀器設備等都對環境溫濕度
    的頭像 發表于 07-04 08:48 ?863次閱讀

    DHT11數字溫濕度傳感器產品手冊

    電子發燒友網站提供《DHT11數字溫濕度傳感器產品手冊.pdf》資料免費下載
    發表于 06-12 17:09 ?10次下載

    倉庫環境溫濕度監測系統功能

    倉庫環境溫濕度監測系統在現代物流管理中扮演著至關重要的角色。以其實時監測、精準分析、預警提醒和節能環保等優勢,成為企業保障物資安全、提高倉儲效率的重要工具。 倉庫
    的頭像 發表于 05-17 17:07 ?753次閱讀
    主站蜘蛛池模板: www.色老头.com | 欧美另类xx | 99热网站 | 6080伦理久久亚洲精品 | 亚洲网站一区 | www四虎| 午夜三级网 | 夜夜操操操 | 国产在线一卡二卡 | 一级毛片aaa片免费观看 | 精品毛片视频 | 四虎在线永久免费观看 | 中文字幕网资源站永久资源 | 国产三级日本三级日产三 | 亚洲免费一 | 久久人人澡 | 操亚洲| 五月婷婷激情六月 | 一区二区三区影视 | 老师下面好湿好紧好滑好想要 | 污污视频网址 | 国产大乳喷奶水在线看 | 九九热在线免费视频 | 久久精品亚洲青青草原 | 一级看片免费视频 | 国产老头和美女在线观看 | 亚洲一级免费视频 | 你懂的免费在线 | 黄色18网站 | 400部大量精品情侣网站 | 欧美卡一卡二卡新区网站 | 美女视频黄.免费网址 | 中文字幕天天干 | 1024手机免费看 | 国产一级大片免费看 | 欧美夜夜夜 | 理论片午午伦夜理片影院99 | sss欧美华人整片在线观看 | 免费国产成高清人在线视频 | 深爱激情五月婷婷 | 2021天天干 |