DSCN4300

DHT11溫濕度感測器介紹

本章重點

  • 認識DHT11溫濕度感測器
  • 熟悉DHT11溫濕度感測器的軟體開發

主要設備

  • DHT11溫濕度感測器實驗版
  • NodeMCU實驗版

HT11溫濕度感測器介紹

DHT11(如圖1)是一款經過校准過且直接以數字訊號輸出的溫濕度感測器。內含一個電阻式感濕元件和一個NTC測溫元件,並與一個8bit單晶片相連接。體積小、功耗低,傳輸距離最遠可達20公尺以上。精準度請見表1。

 

型號 測試範圍 測濕精度 測溫精度 分辨力
DHT11 20-90% RH 0-50℃ ±5% RH ±2℃ 1

表1 DHT11規格

 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)

 

Posted in CoAP, DIY實作, IoT相關訊息, Lua, NodeMCU.

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *


*