<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                * 導師視頻講解:[**去聽課**](https://www.bilibili.com/video/BV1k34y1D7Vz?p=19) >[success] **技術支持說明:** >**1**.一般以自主學習為主 > **2**.可到官方問答社區中提問:[**去提問**](https://bbs.csdn.net/forums/zigbee) > **3**.工程師**會盡快**解答社區問題,但他們是一線開發,【**難以保證**】解答時效,解答辛苦,感謝理解! <br/> 本小節將講解如何使用DHT11溫濕度傳感器來感知環境溫濕度,并且把數據在屏幕中顯示出來。許多傳感器的使用方法都是類似的,通過學習使用DHT11,相信讀者可以做到舉一反三,能夠使用更多種類的傳感器。 <br/> ## **DHT11 簡介** &emsp;&emsp;DHT11數字溫濕度傳感器是一款能夠檢測溫濕度的復合傳感器,其內置一個測溫元件、一個電阻式感濕元件和一個單片機。以奧松公司生產的DHT11溫濕度傳感器為例,其有效測量范圍為: * 溫度:0~50℃ * 濕度:20~95% DHT11實物如圖所示。 ![](https://img.kancloud.cn/16/a4/16a4b1f9bbabb9913f971ab7de82e8fe_742x520.png =200x) ### 可以看到,DHT11帶有4個引腳,其功能說明見下表。 | PIN(引腳) | 名稱 | 說明 | | --- | --- | --- | | 1 | VCC | 供電引腳,3~5.5VDC | | 2 | DATA | 溫濕度數據輸出 | | 3 | NC | 空置引腳 | | 4 | GND | 地線引腳,接電源負極 | 可以從DATA引腳來獲取溫濕度數據,下面簡單講解一下其通信協議。 <br/> ## **DATA引腳的通信協議分析** 從DHT11中獲取溫濕度數據的方法較比簡單,首先是CC2530與DHT11配對(握手),然后按照特定的協議從DATA引腳接收數據。 <br/> **配對(握手)** 在發送數據前,DHT11需要先和CC2530配對,配對的協議如下: (1)DATA引腳在初始的默認狀態時處于高電平(3.3v)。 (2)CC2530拉低DATA引腳的電平18ms毫秒以上,接著拉高電平20~40us,DHT11就會被激活。 (3)DHT11會主動拉低DATA引腳的電平,并且持續80us,表示已經收到了CC2530的指令并且配對成功。 (4)接著DHT11會再次拉高電平,80us后就開始發送溫濕度數據給CC2530了。 這個配對過程如圖所示。 ![](https://img.kancloud.cn/b1/12/b112e61b33912209659467f879bcdd83_832x316.png =600x) <br/> **接收收據** DHT11的溫濕度數據是以二進制數據表示的,這些二進制數據是按照一個比特位接著一個比特位這樣順序發送到CC2530的,具體的原理如下: (1)在發送每個比特位之前,DHT11都會把DATA引腳的電平拉低50us,以此告訴CC2530:“我接著要發送一個比特位了”。 (2)接著,DHT11把DATA引腳的電平拉高,如果持續拉高26~28us,表示發送的是數據0;如果持續拉高70us,表示發送的是數據1,如圖所示。 ![](https://img.kancloud.cn/6d/a9/6da98583ae91c5608033e24f37bc2850_830x288.png =600x) ![](https://img.kancloud.cn/2c/13/2c13178cbfcc1184074b7fc4dc211520_794x246.png =600x) ### 通過這個方式,溫濕度數據就發送給了CC2530了。DHT11的通信協議大致上介紹完畢,但還有多個細節還沒講解到,有興趣的讀者可查閱更多相關的資料或仔細研究一下接下來介紹的API的源代碼。 <br/> ## **DHT11驅動API簡介** 基于以上原理,筆者設計了一套DHT11驅動API,使用起來非常方便。打開配套工程中的DHT11文件夾,即可找到DHT11驅動API,如圖所示。 ![](https://img.kancloud.cn/4b/3a/4b3a0884d6b8fd1890bf4147906a4c07_324x239.png =200x) ### 打開hal_dht11.h文件,可以找到API定義代碼: ``` //2. 51單片機入門/7. 外設實驗/7.1 溫濕度傳感器DHT11/Workspace/code/DHT11_MAIN/hal_dht11.h /** * @fn halDHT11Init * * @brief 初始化函數,使用DHT11前必須先調用此函數 */ void halDHT11Init(void); /** * @fn halDHT11GetData * * @brief 獲取DHT11的溫濕度數據 * * @return 溫濕度數據值 */ halDHT11Data_t halDHT11GetData(void); ``` 其中的halDHT11Data_t是一個結構體,用于保存溫濕度數據,其定義代碼如下: ``` 1./**?@brief???用于表示DHT11溫濕度數據?*/?? 2.typedef?struct??{?? 3.????unsigned?char?ok;???//ok的值非0時溫濕度數據才有效 4.????unsigned?char?temp;?//溫度值,取值范圍:0~50 5.????unsigned?char?humi;?//濕度值,取值范圍:20~95 6.}?halDHT11Data_t; ``` <br/> ## **使用DHT11驅動API** **引腳配置** 調用API前,需要先把DATA引腳與CC2530的IO口配對起來。ZigBee標準板是使用CC2530的P0\_6引腳與DHT11的DATA引腳連接,可在hal\_dht11.h文件中找到如下配置代碼: ``` 1.#define?HAL_DHT11_PORT??0?//Port0.?? 2.#define?HAL_DHT11_PIN???6?//Pin6. ``` 如果在硬件上DATA引腳需要與CC2530的其他引腳連接的話,只需要在這里修改引腳編號即可。 <br/> **API調用示例** 打開main.c文件,可以看到API調用示例代碼: ``` //2. 51單片機入門/7. 外設實驗/7.1 溫濕度傳感器DHT11/Workspace/code/DHT11_MAIN/main.c void main(void) { halDHT11Data_t dht11Dat;//定義溫濕度數據結構體 uint8 tempStr[50], humiStr[50]; setSystemClk32MHZ();//初始化系統時鐘頻率 //初始化顯示器 #ifdef LCD_OLED12864 //初始化OLED12864屏幕 halOLED12864Init() #else //初始化TFT屏幕 halTFTInit(HAL_TFT_PIXEL_WHITE); #endif halDHT11Init();//初始化DHT11溫濕度傳感器 while(1) { dht11Dat = halDHT11GetData();//獲取溫濕度數據 if (dht11Dat.ok) {//如果數據正確獲取 sprintf((char *)tempStr, "Temp: %d", dht11Dat.temp);//顯示溫度 sprintf((char *)humiStr, "Humi: %d", dht11Dat.humi);//顯示濕度 //把數據顯示到屏幕中 #ifdef LCD_OLED12864 //顯示到OLED12863屏幕 halOLED12864ShowX16(0,0, tempStr); halOLED12864ShowX16(1,0, humiStr); #else //顯示到TFT屏幕 halTFTShowX16(0,0, HAL_TFT_PIXEL_RED, HAL_TFT_PIXEL_WHITE, tempStr); halTFTShowX16(0,16, HAL_TFT_PIXEL_RED, HAL_TFT_PIXEL_WHITE, humiStr); #endif } delayMs(SYSCLK_32MHZ, 4000);//延遲 } /* while */ } ``` <br/> ## **調試仿真** 可以運行本實驗代碼以觀察運行結果,操作步驟如下: (1)編譯鏈接工程代碼后,把程序燒錄到配套的ZigBee開發板中。 ### (2)由于本實驗需要用到DHT11溫濕度傳感器,ZigBee標準板中已經集成了DHT11溫濕度傳感器,并且DATA引腳默認連接著P0_6引腳,如圖所示。 ![](https://img.kancloud.cn/3c/a8/3ca871ac68eb6a4f84933e0128441b97_2344x2028.png =300x) ### 如果使用ZigBee Mini測試,需要在P0_6引腳處外接DHT11的DATA引腳,并且把該DHT11的VCC和GND引腳分別接入接入3.3v~5.5v的電源和地線。 ### (3)把OLED屏幕插入到標準板或者Mini板中,如圖所示。 ![](https://img.kancloud.cn/93/15/93156ba0c66abaa69a32fd977ea3fd56_3100x2107.png =350x) ![](https://img.kancloud.cn/a0/ae/a0aed6596df9438ddc67bcc45469416e_2526x2067.png =250x) ### (4)給開發板上電,屏幕中即會顯示環境溫濕度數據。 <br/> <br/> ## **項目定制** * 如需項目定制開發,可掃碼添加項目經理好友(注明“**項目定制**”) * 定制范圍:**NB-IoT**、**CATn(4G)**、**WiFi**、**ZigBee**、**BLE Mesh**以及**STM32**、**嵌入式Linux**等IoT技術方案 * 善學坊官網:[www.sxf-iot.com](https://www.sxf-iot.com/) ![](https://img.kancloud.cn/ca/73/ca739f92cab220a3059378642e3bd502_430x430.png =200x) * 非項目定制**勿擾**,此處**非**技術支持
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看