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