本章重點
- 認識DHT11溫濕度感測器
- 熟悉DHT11溫濕度感測器的軟體開發
主要設備
- DHT11溫濕度感測器實驗版
- NodeMCU實驗版
HT11溫濕度感測器介紹
DHT11(如圖1)是一款經過校准過且直接以數字訊號輸出的溫濕度感測器。內含一個電阻式感濕元件和一個NTC測溫元件,並與一個8bit單晶片相連接。體積小、功耗低,傳輸距離最遠可達20公尺以上。精準度請見表1。
型號 | 測試範圍 | 測濕精度 | 測溫精度 | 分辨力 |
DHT11 | 20-90% RH 0-50℃ | ±5% RH | ±2℃ | 1 |
表1 DHT11規格
圖1 DHT11溫濕度感測器
DHT11 PIN腳說明
Pin | 名稱 | 說明 |
S | Signal | 信號線 |
VCC | 3~5.5V | |
– | GND | 接地 |
表2 PIN腳說明
撰寫程式
本範例要實做一個可以遠端讀取溫濕度的裝置,共有三個lua程式,分別說明如下:
- init.lua:NodeMCU開機啟動檔。當NodeMCU一開機就會自動執行此檔案。我們將於此程式中執行wifi.lua啟動wifi連線。
- wifi.lua:啟動wifi連線。取得IP後會執行coap.lua。
- coap.lua:啟動CoAP Server接受連線,並定期更新溫濕度量測值。
init.lua
dofile(“wifi.lua”) --執行wifi.lua去啟動wifi連線
wifi.lua
wifi.setmode(wifi.STATION) --將WiFi設定為station模式 wifi.sta.config("4Clab-2.4G","12345678") --設定wifi SSID和密碼 tmr.alarm(0,1000,1,function() --設定一個timer。ID為0,每1000 --毫秒執行一次,不斷重複執行 print(wifi.sta.getip()) --印出目前的IP if wifi.sta.getip() ~= nil then --檢查是否取得IP dofile("coap.lua") --取得IP後執行 coap.lua tmr.stop(0) --關閉timer end end)
coap.lua
pin = 1 --將DHT11溫濕度感測器的訊號線接到D1 temperature = 0 --儲存溫度用,並初始化為0 humidity = 0 --儲存濕度用,並初始化為0 cs=coap.Server() --啟動CoAP Server cs:listen(5683) --監聽udp port 5683 cs:sensor("humidity") --產生一個叫humidity的resource cs:sensor("temperature") --產生一個叫temperature的resource print("Coap Server Running...") tmr.alarm(1,1000,1, function() --設定一個timer。ID為1,每1000 --毫秒執行一次,不斷重複執行 status,temp,humi,temp_decimial,humi_decimial = dht.read11(pin) --讀取溫濕度 if( status == dht.OK ) then --檢查狀態值,如果等於dht.OK則 temperature = temp --儲存溫度到temperature變數 humidity = humi --儲存濕度到humidity變數 else temperature = "error" --如果狀態值不為dht.OK,則設為error humidity = "error" end cs:sensor("humidity") --更新resource humidity 的值 cs:sensor("temperature") --更新resource temperature的值 end)