王小祥

摘要:WIFI模塊ESP8266以其價(jià)格低、性能能優(yōu)而被廣泛應(yīng)用。其不僅能實(shí)現(xiàn)WIFI功能,而且可以實(shí)現(xiàn)MCU控制功能。本文主要介紹利用ESP8266和DHT11實(shí)現(xiàn)溫度與濕度的檢測(cè)。
關(guān)鍵詞:ESP8266;DHT11;檢測(cè)
中圖分類號(hào):TP27 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2019)08-0034-02
1 DHT11簡(jiǎn)介
DHT11數(shù)字溫濕度傳感器是一款含有已校準(zhǔn)數(shù)字信號(hào)輸出的溫濕度復(fù)合傳感器。其內(nèi)置電容式感濕元件、NTC 測(cè)溫元件和一個(gè)高性能 8 位單片機(jī),具有極高的可靠性與卓越的長(zhǎng)期穩(wěn)定性。廣泛應(yīng)用于家電、汽車、醫(yī)療等行業(yè)的溫濕度檢測(cè)控制。主要特點(diǎn)如下:測(cè)量相對(duì)濕度范圍:5~95%RH,測(cè)量溫度范圍:-20~60℃。DHT11的引腳說明:①VCC:供電3.3V~5.5VDC;②DAT:串行數(shù)據(jù),單總線;③懸空;④GND。
DHT11采用單總線通訊協(xié)議(一般外接4.7kΩ的上拉電阻),其與單片機(jī)通迅主要由起始信號(hào)、響應(yīng)信號(hào)、數(shù)據(jù)傳輸、結(jié)束信號(hào)組成。
(1)起始信號(hào):起始信號(hào)由主機(jī)發(fā)送,主機(jī)拉低T(18ms 40位數(shù)據(jù)的組成:16位濕度數(shù)據(jù)(高8位是濕度的整數(shù),低8位是濕度的小數(shù)(濕度的小數(shù)部分為0));16位溫度數(shù)據(jù)(高8位是溫度的整數(shù),低8位是溫度的小數(shù));8位校驗(yàn)和(濕度與溫度4個(gè)字節(jié)數(shù)據(jù)的和)。 結(jié)束信號(hào):從機(jī)發(fā)送完40Bit數(shù)據(jù)后會(huì)輸出54us的低電平作為結(jié)束信號(hào),然后轉(zhuǎn)為輸入狀態(tài),而主機(jī)在檢測(cè)到從機(jī)結(jié)束信號(hào)后應(yīng)配置為輸出模式并輸出高電平。 2 基于EPS8266的溫濕度檢測(cè) 本次任務(wù)是利用ESP8266采集DHT11溫濕度通過串口上傳到電腦中(通過串口調(diào)試的軟件顯示測(cè)量值),3S刷新一次數(shù)據(jù)。 2.1 硬件電路 硬件電路主要有ESP8266模塊和DTH11傳感器。如圖1所示,TXD、RXD實(shí)現(xiàn)串口通訊,ESP8266的GPIO5作為數(shù)據(jù)線與DHT11的數(shù)據(jù)腳相連。 2.2 編程思路 在nonos 工程中app/driver中加入dht11.c,dht11.c 包含了發(fā)起起始信號(hào)、接受響應(yīng)信號(hào)、數(shù)據(jù)的傳輸(位數(shù)據(jù)讀取、字節(jié)數(shù)據(jù)讀取、完整數(shù)據(jù)的讀取),判斷結(jié)束信號(hào)等函數(shù)。 以位數(shù)據(jù)的讀取為例說明:首先等待相應(yīng)信息的低電平(最多等150us),低電平開始后計(jì)時(shí)最多等待120us,當(dāng)為高電平后延時(shí)45us(跳過了數(shù)據(jù)“0”的高電平時(shí)間),讀取GPIO5的電平,若此時(shí)電平為1則說明接收到的數(shù)據(jù)為“1”,若電平為0則說明接收到的數(shù)據(jù)為“0”,返回?cái)?shù)據(jù)值。 u8 ICACHE_FLASH_ATTR DHT11_Read_Bit(void) { u8 C_delay_time = 0; while( GPIO_INPUT_GET(GPIO_ID_PIN(5))==1 && C_delay_time<150 ) {os_delay_us(1);C_delay_time++; } C_delay_time = 0 ; while( GPIO_INPUT_GET(GPIO_ID_PIN(5))==0 && C_delay_time<120 ) {os_delay_us(1);C_delay_time++; } os_delay_us(45); return GPIO_INPUT_GET(GPIO_ID_PIN(5)); } 字節(jié)的讀取將位數(shù)據(jù)讀取循環(huán)調(diào)用8次,注意高位在前(高位先出)。完整數(shù)據(jù)的讀取再調(diào)用字節(jié)讀取5次,并對(duì)數(shù)據(jù)進(jìn)行校驗(yàn),同時(shí)判斷溫度值的正、負(fù)(當(dāng)溫度低于0℃,溫度數(shù)據(jù)低8位的最高位為1)。 由于3s刷新一次數(shù)據(jù),因此在user_main.c需要啟動(dòng)軟件定時(shí)器。軟件定時(shí) 初始化過程如下:①先宏定義一個(gè)定時(shí)器結(jié)構(gòu)體: os_timer_t? ?os_timer;②初始化前先關(guān)閉該定時(shí)器:os_timer_disarm( &os_ timer);③配置該定時(shí)器回調(diào)函數(shù):os_timer_setfn( &os_timer,(os_ timer_func_t *)OS_Timer_1,NULL);④啟動(dòng)該定時(shí)器os_timer _arm( &os_timer,3000,true); 在定時(shí)回調(diào)函數(shù)OS_Timer_1()中出數(shù)據(jù): void ICACHE_FLASH_ATTR OS_Timer_1 (void) { if(DHT11_Data[5] == 1) // 溫度 >= 0℃ { os_printf("\r\n濕度==%d.%d %RH\r\n",DHT11_Data[0],DHT11_Data[1]); os_printf("\r\n溫度==%d.%d ℃\r\n", DHT11_Data[2],DHT11_Data[3]); } else { os_printf("\r\n濕度==%d.%d %RH\r\n",DHT11_Data[0],DHT11_Data[1]); os_printf("\r\n溫度==-%d.%d ℃\r\n",DHT11_Data[2],DHT11_Data[3]); } } 3 調(diào)試與注意事項(xiàng) 程序下載后,利用串口調(diào)試軟件觀察DHT11的測(cè)量值,數(shù)據(jù)每3S刷新一次,若改變外部環(huán)境后測(cè)量值能及時(shí)發(fā)生變化。 在編程過程需要注意如下幾點(diǎn): (1)主機(jī)對(duì)數(shù)據(jù)總線操作時(shí),應(yīng)配置為輸出模式;DHT11對(duì)數(shù)據(jù)總線操作時(shí),主機(jī)應(yīng)配置為輸入模式。(2)由于DHT11對(duì)時(shí)序要求嚴(yán)格,因此延遲函數(shù)誤差不能太大,否則讀取數(shù)據(jù)。(3)在時(shí)序檢測(cè)過程中需進(jìn)行超時(shí)檢測(cè),可以避免程序出現(xiàn)死循環(huán)。 參考文獻(xiàn) [1] DHT11溫濕度傳感器產(chǎn)品手冊(cè)[P]. [2] ESP8266技術(shù)參考手冊(cè)[P]. [3] ESP8266 Non-OS SDK API參考手冊(cè)[P]. DHT11 Temperature and Humidity Detection Based on ESP8266 WANG Xiao-xiang (Wuxi Institute of Technicians,Wuxi? Jiangsu? 214000) Abstract:WIFI module ESP8266 is widely used because of its low price and excellent performance. It can not only realize WIFI function, but also realize MCU control function. This paper mainly introduces the use of ESP8266 and DHT11 to detect temperature and humidity. Key words:ESP8266;DHT11;Detection