DHT11溫溼度傳感器的使用

2020-08-25 韋東山嵌入式Linux


來源:百問網_嵌入式Linux wiki_jz2440 新1期視頻維基教程 (視頻文字版)

作者:韋東山

本文字數:2379,閱讀時長:4分鐘

這節課開始講解DH11溫溼度傳感器的使用,首先查看晶片手冊,裡面的典型應用電路如下:

MCU通過一條數據線與DH11連接,MCU通過這條線發命令給DH11,DH11再通過這條線把數據發送給MCU。

因此,溫溼度模塊的核心就是 MCU發給DH11的命令格式和DH11返回的數據格式。

再來先簡單看一下通訊的時序:

灰色這條線是由MCU驅動控制的,淺色的部分是由DH11驅動控制的。

首先MCU發送一個開始信號,這個開始信號是一個低脈衝,然後再拉高。

然後,DH11拉低,做出一個響應信號,再拉高。

接著就是DH11返回的數據。

這些數據一共有40bit,高位先出。

數據格式:8bit溼度整數數據+8bit溼度小數數據+8bi溫度整數數據+8bit溫度小數數據+8bit校驗和

且當前小數部分用於以後擴展,現讀出為零.

數據傳送正確時校驗和數據等於「8bit溼度整數數據+8bit溼度小數數據+8bi溫度整數數據+8bit溫度小數數據」所得結果的末8位。

DH11的難點是前面所說的時序脈衝,需要滿足一定的時長.比如開始信號:

MCU必須先拉低至少18ms,然後再拉高20-40us,DH11再拉低80us以響應,最後再拉高80us.

接下來就是傳輸數據,我們的目的就是讀到溫溼度的數據,這些數據由DH11提供,那它怎麼傳回這些數據,怎麼表示0和1呢?

可以看到,不管是0還是1,都開始是50us的低電平,

對於0數據,之後是26~28us的高電平;

對於1數據,之後是70us的高電平;

有了上面的知識,加上之前的高精度延時,現在就可以開始寫程序了。

複製前面的第二個程序,文件名改為003_dht11_022_003,然後在sensors目錄裡新建dht11目錄,再創建一個dht11.c文件。

我們的目的是,控制GPIO讀取DHT11的數據,流程如下:

  • 1. 主機發出至少18MS的低脈衝: start信號
  • 2. start信號變為高, 20-40us之後, dht11會拉低總線維持80us,然後拉高80us: 回應信號
  • 3. 之後就是數據, 逐位發送

bit0 : 50us低脈衝, 26-28us高脈衝

bit1 : 50us低脈衝, 70us高脈衝

  • 4. 數據有40bit: 8bit溼度整數數據+8bit溼度小數數據+8bit溫度整數數據+8bit溫度小數數據+8bit校驗和

DH11的DATA引腳連接到了GPG5。

先實現GPIO的基本操作,配置GPIO模式,實現輸出、輸入引腳的功能:

static void dht11_data_cfg_as_output(void){ GPGCON &= ~(3<<10); GPGCON |= (1<<10);}static void dht11_data_cfg_as_input(void){ GPGCON &= ~(3<<10);}

再設置輸出電平或讀取引腳數據:

static void dht11_data_set(int val){ if (val) GPGDAT |= (1<<5); else GPGDAT &= ~(1<<5);}static int dht11_data_get(void){ if (GPGDAT & (1<<5)) return 1; else return 0;}

再來實現DHT11的讀操作。

在晶片手冊裡介紹說,DH11傳感器上電後,要等待1s,以越過不穩定狀態,在此期間無需發送任何指令。

因此首先寫一個初始化函數,跳過這個不穩定狀態:

void dht11_init(void){ dht11_data_cfg_as_output(); dht11_data_set(1); mdelay(2000);}

根據start時序要求,編寫程序,維持一個大於18ms的低電平,然後釋放引腳,即設置為輸入引腳即可。

因為該引腳接有上拉電阻,一旦MCU設置為輸入,引腳電平將由上拉電阻決定。

static void dht11_start(void){ dht11_data_set(0); mdelay(20); dht11_data_cfg_as_input();}

然後等待40us以上,再去讀取引腳電平,判斷是否被拉低,以確定DH11給了響應。

static int dht11_wait_ack(void){ udelay(60); return dht11_data_get();}

再寫個延時函數,用於時序中的,等待響應信號結束:

static int dht11_wait_for_val(int val, int timeout_us){ while (timeout_us--) { if (dht11_data_get() == val) return 0; /* ok */ udelay(1); } return -1; /* err */}

後面的數據會有五個字節組成,這裡先寫出讀取一個字節,每個字節要讀取8位。

先等待直到高電平,過濾到共同的50us延時,然後延時28us以上,再讀取引腳電平,

如果引腳電平是1,則數據是1,反之是0。

然後再直到低電平的到來,循環8次,完成一個字節數據的讀取。

static int dht11_recv_byte(void){ int i; int data = 0; for (i = 0; i < 8; i++) { if (dht11_wait_for_val(1, 1000)) { printf(&34;); return -1; } udelay(40); data <<= 1; if (dht11_data_get() == 1) data |= 1; if (dht11_wait_for_val(0, 1000)) { printf(&34;); return -1; } } return data;}

相關焦點

  • 基於arduino的dht11溫溼度傳感器的使用
    DHT11溫溼度傳感器簡介   DHT11是一款有已校準數位訊號輸出的溫溼度傳感器。 其精度溼度+-5%RH, 溫度+-2℃,量程溼度20-90%RH, 溫度0~50℃。   DHT11數字溫溼度傳感器是一款含有已校準數位訊號輸出的溫溼度複合傳感器,它應用專用的數字模塊採集技術和溫溼度傳感技術,確保產品具有極高的可靠性和卓越的長期穩定性。傳感器包括一個電阻式感溼元件和一個NTC測溫元件,並與一個高性能8位單片機相連接。因此該產品具有品質卓越、超快響應、抗幹擾能力強、性價比極高等優點。每個DHT11傳感器都在極為精確的溼度校驗室中進行校準。
  • 使用DHT11和Arduino獲取房間中的溫度和溼度數據
    溼度指在空氣的潮溼程度,也就是空氣中水蒸氣的含量,水汽是否趨近於飽和.研究表明:適合的健康溼度範圍在45%到60%之間,這個時候人體狀態較好.如果溼度低於45%,會導致皮膚,咽喉,呼吸道乾燥,容易引起哮喘都呼吸道疾病如果溼度高於60%會導致人體散熱較困難,體溫升高,頭暈噁心等症狀溫度溫度的影響對人體的狀態影響最為直接,參考冬天夏天的感受就知道了.夏天室內合適的溫度範圍為24℃到27℃,狀態剛剛好.如果低於22℃,容易感冒,發燒,受涼.
  • Arduino提高篇05—溫溼度傳感器DHT11
    關注、星標公眾號,不錯過精彩內容DHT11數字溫溼度傳感器是一款含有已校準數位訊號輸出的溫溼度綜合傳感器
  • 正點原子-戰艦V3第三十六章 DHT11 數字溫溼度傳感器實驗
    上一章,我們介紹了數字溫度傳感器 DS18B20 的使用,本章我們將介紹數字溫溼度傳感器DHT11 的使用,該傳感器不但能測溫度,還能測溼度。本章我們將向大家介紹如何使用 STM32F1來讀取 DHT11 數字溫溼度傳感器,從而得到環境溫度和溼度等信息,並把從溫溼度值顯示在TFTLCD 模塊上。
  • DHT11的使用注意事項
    DHT11數字溫度傳感器是一款含有已校準數位訊號輸出的溫溼度複合傳感器。它應用專用的數字模塊採集技術和溫溼度傳感技術,確保產品具有極高的可靠性與卓越的長期穩定性。傳感器包括一個電阻式感溼元件和一個NTC測溫元件,並與一個8位單片機相連接。該產品具有通信便捷、超快響應、抗幹擾能力強等優點。
  • 基於DHT11的多點溫溼度報警系統設計
    傳統的實驗室溫度溼度檢測方案基本使用溫溼度傳感器採集信號,經放大、濾波、校準、模數轉換、顯示等硬體電路實現,這種方案由於硬體系統複雜,調試困難,使用時系統小元件故障就可能造成系統不穩定乃至癱瘓。鑑於此,我們採用數字溫溼度傳感器DHT11對傳統溫溼度檢測方案進行改進設計,對實驗室溫溼度參數採用多點檢測,實現了實時綜合評估實驗室溫溼度環境適宜性的目的。
  • 高精度溫溼度傳感器
    模擬量型溫溼度傳感器 SPD-HT485-C廣泛適用於農業大棚/地下工廠等需要溫溼度監測的場合。傳感器內輸入電源,感應探頭,信號輸出三部分完全隔離。安全可靠,外觀美觀,安裝方便。 本產品採用高靈敏度數字探頭,信號穩定,精度高。
  • 從Arduino 傳遞溫溼度值給 Node 網站
    摘要:將 Arduino 製作成網絡客戶端,在電腦上創建並運行 Node 網站伺服器程序,讓 Arduino 定時向 Node 網站發布最新採集的溫溼度數據。實驗材料:Arduino UNO 控制板,一片;Arduino Ethernet 乙太網模塊(採用 W5100 晶片),一片;DHT11 溫溼度傳感模塊,一片。Arduino 實驗程序:Arduino 將把採集到的溫溼度值,傳到Node 伺服器的 /th 路徑,並且在 URL 地址附加 t 和 h 參數,分別代表溫度和溼度值。
  • 溫溼度傳感器在博物館溫溼度監測平臺中的應用
    打開APP 溫溼度傳感器在博物館溫溼度監測平臺中的應用 仁科測控 發表於 2020-11-27 16:08:59 在文物存儲的各種環境中,溫溼度變化是導致文物毀壞的重要原因,溫溼度變化對文物的影響遠遠高於聲、光、氧等因素,所以讓文物始終處於一個相對穩定的溫溼度環境中是文物保護的重要工作,文物存儲要做到嚴格的溫溼度數據監控。
  • 溫溼度傳感器推進「智能大棚」的建設
    導讀 溫溼度傳感器(LNHJ-WS),是一款無線智能溫溼度監控器,主要用於監測環境裡的溫溼度變化值。
  • 什麼是NB-IoT溫溼度傳感器?
    隨著科學技術的進步和生活水平、生產水平的提高,城市供暖、溫室大棚、孵化基地、倉庫等項目越來越多,環境溫溼度數據的採集與應用價值空前提高。建大仁科RS-WS-NB-2溫溼度傳感器採用NB-IOT無線通訊技術,集數據與傳輸兩大功能與一體,信號穩定,全網覆蓋,NB-IoT物聯網卡即插即用,無需網絡配置,大大減少了智能溫溼度監測的部署成本。具有低功耗、廣覆蓋的特點。
  • 智能溫溼度傳感器到底好在哪裡呢
    溫溼度產品在現代的應用非常廣泛,機房、工業、農業、倉儲等都離不開溫溼度管理,特別是在實時記錄溫溼度變化的工作中廣泛,溫溼度傳感器可以根據所記錄的數據,對各個不同的領域進行科學有效的分析、管理。  隨著傳感器技術的日漸成熟及社會的發展,信息技術、工業、農業等行業對智能化水平的需求也不斷提高,為了提升這些行業使用過程中的智能化,工業級溫溼度傳感器也越來越被廣泛用於各個行業,各行各業對於工業溫溼度傳感器的使用也越來越規模化。  溫溼度傳感器(LNHJ-WS),是一款無線智能溫溼度監控器,主要用於監測環境裡的溫溼度變化值。
  • 如何挑選一款稱心如意的溫溼度傳感器?
    溫溼度傳感器指把空氣中的溫溼度值通過檢測裝置,測量的溫溼度值按一定規律變換成電信號或其他所需形式的信號輸出,用來滿足用戶需求。市場上的溫溼度傳感器一般是測量溫度值和相對溼度值。那麼好用的溫溼度傳感器千千萬萬,如何才能挑到你心儀的溫溼度傳感器呢? 一、選擇溫溼度傳感器的注意事項 1、根據自己的領域確定溫溼度傳感器測量範圍。
  • 溫溼度傳感器的四種數據傳輸方式
    ,科技和物聯網的進步導致我們傳遞數據的方式也變的更加多種多樣,各類傳感器不僅能夠實時監測數據,還可以根據相應的使用場景選擇不同的數據傳輸方式上傳至雲平臺,方便我們在需要時隨時取用。下面溫溼度傳感器為例,來講一下傳感器的四種數據傳輸方式。 首先聲明一下,這四種數據傳輸方式並不局限於溫溼度傳感器。因為溫溼度傳感器作為我們日常生活常見的一款傳感器,數據上傳方式較為全面,相對來說具有一定代表性。
  • 智能溫溼度傳感器特點和應用
    建大仁科RS-WS-GPRS/4G-6系列是基於GPRS傳輸的溫溼度變送器,只需一張移動或聯通的SIM卡(4G選型支持全網通),採用大屏液晶顯示,具有溫溼度上下限雙控,限值自由設置,溫度、溼度憑密碼校準,GPRS數據傳輸等功能,內部集成報警功能模塊(蜂鳴器和繼電器),可實現超高、低溫、高、低溼時報警。產品採用瑞士原裝溫溼度測量單元,具有測量精度高,抗幹擾能力強等特點。
  • 溫溼度傳感器的三種模擬量換算關係
    ,如果想及時感知空氣中溫溼度的變化,那就需要溫溼度傳感器。在日常生活中,溫溼度傳感器種類有很多,按照數據上傳方式分有RS485型溫溼度傳感器、模擬量型溫溼度傳感器、網絡型溫溼度傳感器這三種。今天主要介紹模擬量型溫溼度傳感器。
  • ESP8266之blinker物聯網平臺DHT11溫溼度數據上報
    一、背景很久以前購買的DHT11溫溼度傳感器,被無情遺忘。終於在今天倒騰器件時,給翻了出來。壓箱這麼久,也是虧欠了這位小老弟,怎麼也得讓它實現點自我價值才行啊!想了很久,這玩意似乎也只能做點溫溼度檢測的活了。說幹就幹,那就讓你繼續做溫溼度數據上報吧!以後有更好的想法的時候,再讓你實現更多的價值!
  • 工業級溫溼度傳感器到底好在哪裡呢?
    溫溼度產品在現代的應用非常廣泛,機房、工業、農業、倉儲等都離不開溫溼度管理,特別是在實時記錄溫溼度變化的工作中最為廣泛,溫溼度傳感器可以根據所記錄的數據,對各個不同的領域進行科學有效的分析、管理。隨著傳感器技術的日漸成熟及社會的發展,信息技術、工業、農業等行業對智能化水平的需求也不斷提高,為了提升這些行業使用過程中的智能化,工業級溫溼度傳感器也越來越被廣泛用於各個行業,各行各業對於工業溫溼度傳感器的使用也越來越規模化。工業溫溼度傳感器通常使用在對溫溼度有高要求的場合,這也就奠定了工業溫溼度傳感器使用行業的廣泛性。工業級溫溼度傳感器到底好在哪裡呢?
  • 工業溫溼度傳感器的探頭都有哪些?
    為了提升行業使用過程中的智能化水平,工業級溫溼度傳感器也越來越被廣泛用於各個行業,各行各業對於工業溫溼度傳感器的使用也越來越規模化。現在用的比較多的是單溫度傳感器和溫溼度傳感器,其中探頭是傳感器的重要組成部分,它直接關係著測量數據的精度和穩定性
  • 分析無線溫溼度傳感器對恆溫恆溼車間作用
    汽車、空調、除溼器、烘乾機等都已家喻戶曉,它們都離不開對溫度、溼度等環境因素的要求。 無線溫度傳感器應是集成傳感、無線通信、低功耗等技術的無線傳感網絡產品。無線溫度傳感器應以電池供電,在工程實施中避免了大工作量的通訊線纜、管線、供電線路的鋪設,用戶也可根據現場實際使用情況,方便的調整安裝的位置。