介紹
DHT11溫濕度傳感器
DHT11 傳感器通過一根導線連續測量並提供濕度和溫度值。
它可以在 0 到 50°C 的範圍內測量相對濕度的百分比(20 到 90% RH)和攝氏度的溫度。
它有4個引腳;其中之一用於串行形式的數據通信。
不同 TON 和 TOFF 的脈衝被解碼為邏輯 1 或邏輯 0 或開始脈衝或幀結束。
有關 DHT11 傳感器及其使用方法的更多信息,請參閱傳感器和模塊主題中的主題DHT11 傳感器。
接口圖
NodeMCU與DHT11接口
例子
讓我們將 DHT11 與 NodeMCU 連接,並從 DHT11 中讀取溫度和濕度的值。
我們可以用 Lua 腳本或 C/C++ 語言為 NodeMCU DevKit 編寫代碼。我們使用 ESPlorer IDE 用 Lua 腳本編寫代碼,使用 Arduino IDE 用 C/C++ 編寫代碼。要了解更多信息,請參閱 使用 ESPlorer IDE 開始使用 NodeMCU(對 NodeMCU 使用 Lua 腳本)和使用 Arduino IDE 開始使用 NodeMCU(對 NodeMCU 使用基於 C 語言的 Arduino 草圖)。
基於 NodeMCU LUA 的 DHT 模塊功能
讓我們看看 NodeMCU 的基於 LUA 的功能,可用於 DHT 模塊讀取溫度和濕度。
dht.read()
該功能用於讀取各種DHT傳感器的數據,包括DHT11、21、22、33、44型濕度溫度傳感器。
句法: dht.read(pin)
參數:
pin
:要讀取 DHT 傳感器輸出的引腳號。不支持 0 引腳編號 (D0)。
回報:
status
:它返回 dht.OK、dht.ERROR_CHECKSUM、dht.ERROR_TIMEOUT 中的一種狀態。
temp
:溫度
humi
:濕度
temp_dec
:溫度小數
humi_dec
:濕度小數
注意:返回變量的數據類型取決於固件支持的數據類型。即如果固件支持浮動,那麼它將返回浮點值,否則它將返回一個整數。
此外,我們可以使用dht11.read()
該函數僅從 dht11 讀取輸出,也可以使用函數從 dht11dht.readxx()
以外的 DHT 模塊讀取輸出,即 xx 將為 22、33 等。這些函數具有相同的語法、參數和返回值。
讓我們編寫 Lua 腳本從 dht11 讀取溫度和濕度
DHT11 的 Lua 腳本
pin = 1
status, temp, humi, temp_dec, humi_dec = dht.read(pin)--read dht11 from pin
if status == dht.OK then --check status is ok and print temperature and humidity
print(string.format("DHT Temperature:%d.%03d;Humidity:%d.%03d",
math.floor(temp),
temp_dec,
math.floor(humi),
humi_dec
))
elseif status == dht.ERROR_CHECKSUM then --else print either status
print( "DHT Checksum error." )
elseif status == dht.ERROR_TIMEOUT then
print( "DHT timed out." )
end
ESPlorer 串行輸出窗口
ESPlorer 用於 DHT11 溫度和濕度測量的串行監視器輸出窗口
DHT11 的 Arduino 草圖
在這裡,我們將使用來自 GitHub 的 Mark Ruys 的 DHT11 庫。
提取庫並將文件夾添加到 Arduino IDE 的庫文件夾路徑中。
有關如何將自定義庫添加到 Arduino IDE 並使用其中的示例的信息,請參閱基礎部分中的 庫到 Arduino IDE。
將庫添加到 Arduino IDE 後,打開 IDE 並從添加的庫中打開名為 DHT_Test 的示例草圖。
更改草圖中的 DHT11 引腳。您可以參考下面給出的草圖進行更改。
從 DHT11 讀取溫度和濕度的草圖
#include "DHT.h"
DHT dht;
void setup()
{
Serial.begin(9600);
Serial.println();
Serial.println("Status\tHumidity (%)\tTemperature (C)\t(F)");
dht.setup(D1); /* D1 is used for data communication */
}
void loop()
{
delay(dht.getMinimumSamplingPeriod()); /* Delay of amount equal to sampling period */
float humidity = dht.getHumidity();/* Get humidity value */
float temperature = dht.getTemperature();/* Get temperature value */
Serial.print(dht.getStatusString());/* Print status of communication */
Serial.print("\t");
Serial.print(humidity, 1);
Serial.print("\t\t");
Serial.print(temperature, 1);
Serial.print("\t\t");
Serial.println(dht.toFahrenheit(temperature), 1);/* Convert temperature to Fahrenheit units */
}
Arduino 串行輸出窗口
Arduino串口監視器輸出窗口DHT11溫濕度測量
資料來源:https://www.electronicwings.com/nodemcu/dht11-sensor-interfacing-with-nodemcu
沒有留言:
張貼留言