DHT11/DHT12溫溼度傳感器實驗-ESP32
DHT11/DHT12溫溼度傳感器實驗
溫溼度傳感器在控制板學習裡是必備入門實作的課題
它包含DHT11/DHT12這兩種形式,這些傳感器包含一個
芯片,可以進行模擬到數字的轉換,並輸出帶有溫度和濕度
的數字信號。這使得它們很容易與任何微控制器一起使用。
DHT11 和 DHT22 非常相似,但它們的規格不同。下表比較
了 DHT11 和 DHT22 溫濕度傳感器的一些最重要的規格。
要對這些傳感器進行更深入的分析,請查看傳感器的數據表。
Temperature range | 0 to 50 ºC +/-2 ºC | -40 to 80 ºC +/-0.5ºC |
Humidity range | 20 to 90% +/-5% | 0 to 100% +/-2% |
Resolution | Humidity: 1% Temperature: 1ºC | Humidity: 0.1% Temperature: 0.1ºC |
Operating voltage | 3 – 5.5 V DC | 3 – 6 V DC |
Current supply | 0.5 – 2.5 mA | 1 – 1.5 mA |
Sampling period | 1 second | 2 seconds |
DHT11 的範圍更小,精度也更低。但是,您可以每秒請求傳感器讀數。它也便宜一點。
DHT22傳感器具有更好的分辨率和更寬的溫濕度測量範圍。但是,它有點貴,並且您
只能以 2 秒的間隔請求讀數。
接腳
DHT 傳感器有四個引腳,如下圖所示。但是,如果您將 DHT 傳感器安裝在分線板中,則它只有三個引腳,並且在引腳 2 上帶有一個內部上拉電阻。
下表顯示了 DHT22/DHT11 引腳排列。當傳感器面向您時,引腳編號從左到右從 1 開始
DHT pin | Connect to |
1 | 3.3V |
2 | Any digital GPIO; also connect a 10k Ohm pull-up resistor |
3 | Don’t connect |
4 | GND |
所須材料
- ESP32
- DHT11或DHT22溫濕度傳感器
- 10k 歐姆電阻
- 麵包板
- 跳線
接線圖
下載所須的函式庫
匯入範例檔
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
#define DHTPIN 4 // Digital pin connected to the DHT sensor
// Feather HUZZAH ESP8266 note: use pins 3, 4, 5, 12, 13 or 14 --
// Pin 15 can work but DHT must be disconnected during program upload.
// Uncomment the type of sensor in use:
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// See guide for details on sensor wiring and usage:
// https://learn.adafruit.com/dht/overview
DHT_Unified dht(DHTPIN, DHTTYPE);
uint32_t delayMS;
void setup() {
Serial.begin(115200);
// Initialize device.
dht.begin();
}
void loop() {
// Delay between measurements.
delay(2000);
// Get temperature event and print its value.
sensors_event_t event;
dht.temperature().getEvent(&event);
if (isnan(event.temperature)) {
Serial.println(F("Error reading temperature!"));
}
else {
Serial.print(F("Temperature: "));
Serial.print(event.temperature);
Serial.println(F("°C"));
}
// Get humidity event and print its value.
dht.humidity().getEvent(&event);
if (isnan(event.relative_humidity)) {
Serial.println(F("Error reading humidity!"));
}
else {
Serial.print(F("Humidity: "));
Serial.print(event.relative_humidity);
Serial.println(F("%"));
}
}
留言
張貼留言