ESP32 a čidlo teploty a vlhkosti DHT11/DHT22
Tento článek ukazuje, jak připojit a používat čidla teploty a vlhkosti DHT11 a DHT22 společně s modulem ESP32 a naprogramování řídicího kódu pomocí prostředí Arduino IDE.

Senzory DHT11 a DHT22 se používají k měření teploty a relativní vlhkosti. Jsou to velmi oblíbené čidla jak mezi výrobci, tak mezi fandy elektroniky. Koneckonců, kdo by si nechtěl postavit svou vlastní meteorologickou stanici. V takovém případě je čidlo DHT11 nebo DHT22 rychlým a levným řešením. Oba tyto senzory obsahují čip, který provádí analogově-digitální převod a na řídicí mikrokontrolér odesílá digitální signál v podobě aktuální hodnoty teploty a vlhkosti. Díky tomu je jejich použití opravdu snadné.
DHT11 vs. DHT22
Modely DHT11 a DHT22 jsou velmi podobné, ale liší se svými specifikacemi. Následující tabulka porovnává některé z nejdůležitějších specifikací snímačů teploty a vlhkosti DHT11 a DHT22. Podrobnější srovnání těchto senzorů byste našli v datových listech těchto senzorů.
DHT11 | DHT22 | |
---|---|---|
Teplotní rozsah | 0 až 50 °C (±2 °C) | –40 až 80 °C (±0,5 °C) |
Rozsah vlhkosti | 20 až 90 % (±5 %) | 0 až 100 % (±2 %) |
Rozlišení | Vlhkost: 1 % Teplota: 1 °C |
Vlhkost: 0,1 % Teplota: 0,1 °C |
Provozní napětí | 3–5,5 V DC | 3–6 V DC |
Spotřeba proudu | 0,5–2,5 mA | 1–1,5 mA |
Vzorkovací doba | 1 sekunda | 2 sekundy |
Z tabulky vidíme, že senzor DHT22 má lepší rozlišení a širší rozsah měření teploty a vlhkosti. Je však o něco dražší a také pomalejší – můžete jej načítat pouze s 2sekundovým intervalem.
Přes určitou odlišnost fungují oba podobným způsobem, tedy můžeme použít stejný programový kód pro čtení teploty a vlhkosti z obou čidel – stačí v kódu vybrat typ senzoru, který používáte.
DHT Pinout
Snímače DHT mají čtyři kolíky, existuje však i varianta, kde je snímač DHT již napájen na destičce společně s externím pull-up rezistorem, pak jsou k dispozici již jen tři piny. Následující tabulka a obrázek ukazuje pinout DHT22/DHT11 pro případ samotného senzoru a pro destičku s třemi vývody.



Pokud chceme připojit senzor k modulu ESP32, zvolíme napájecí napětí 3,3 V, pin DATA (někdy označen jen písmenem S) připojíme k libovolnému digitálnímu GIPO pinu a spojíme země GND. Občas na internetu se objevují návody, kdy je čidlo zapojeno na napětí 5 V. Z přehledu vlastností vidíme, že toto napájecí napětí čidlo nevadí, dokonce se tak čidlo napájí při použití s pětivoltovým modulem Arduino. Ale nyní pracujeme s modulem ESP32, který pracuje na úrovni 3,3 V, takže držme se předepsaného napětí.
Připojení k ESP32
Snímač DHT11 nebo DHT22 připojíme k vývojové desce ESP32 podle následujícího schématického diagramu. Na obrázku je použit třívývodový modul čidla s externím pull-up rezistorem. Pokud chcete použít „holé“ čidlo DHT, připojte rezistor 4,7 kΩ (někdy se též uvádí 10 kΩ) mezi první vývod (Ucc) a druhý vývod (DATA).

Pro načítání dat v tomto případě využíváme datový GPIO 4
. Můžete však použít jakýkoli jiný vhodný digitální pin, jen je třeba zkontrolovat, zda použití zvoleného pinu nepodléhá nějakému omezení – viz článek o použití pinů modulu ESP32.
Tvorba kódu
Ovládací program čidla DHT vytvoříme v prostředí Arduino IDE. Protože je používání čidla poměrně časté a jedná se o oblíbené čidlo, existují již pro ovládání čidla rozšiřující knihovny.
Instalace knihoven
Ke čtení ze senzoru DHT použijeme knihovnu DHT
od společnosti Adafruit. Ale pozor, chceme-li tuto knihovnu používat, musíte si také nainstalovat knihovnu Adafruit Unified Sensor
. Při instalaci těchto knihoven postupujte podle následujících kroků.
Otevřete své Arduino IDE a přejděte na Projekt > Přidat knihovnu > Spravovat knihovny. Měl by se otevřít Správce knihoven.
Vyhledejte DHT
ve vyhledávacím poli a nainstalujte knihovnu DHT
od Adafruit.

Po instalaci knihovny DHT z Adafruit je třeba ještě nainstalovat knihovnu Adafruit Unified Sensor. Pokud byste tuto knihovnu nenainstalovali, skončil by překlad programového kódu následující hláškou:fatal error: Adafruit_
Takže ještě zadáme do vyhledávacího pole heslo Adafruit Unified Sensor
a knihovnu nainstalujte nabídnutou knihovnu.

Po instalaci knihovny se měl zkompilovat bez chybové zprávy.
Kód (načítání teploty a vlhkosti)
Ke čtení teploty a vlhkosti ze snímače DHT použijeme příklad založený na knihovně DHT
od Adafruit. Zkopírujte následující kód do prostředí Arduino IDE. Princip kódu je vysvětlen v komentářích kódu.
/* DHT humidity/temperature sensor */
#include"DHT.h" // pridani knihovny DHT
#define DHTPIN 4 // definice GPIO pinu pro DHT senzor
// Odkomentujte typ cidla, které pouzivate! (zde DHT11)
#define DHTTYPE DHT11 // DHT 11
// #define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
// #define DHTTYPE DHT21 // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE); // vytvoreni objektu pro cidlo DHT
// funkce SETUP se spusti jednou pri stisknuti tlacitka reset nebo pri zapnuti desky.
void setup() {
Serial.begin(115200); // prenosova rychlost serioveho vystupu
dht.begin(); // inicializace cidla DHT
}
// funkce LOOP bezi stale dokola.
void loop() {
delay(2000); // pockat 2s, cidlo neni rychle
Serial.print("Humidity: "); // vypis hlasky na Serial Monitor
Serial.print(dht.readHumidity()); // vypis vlhkosti
Serial.print("% Temperature: "); // vypis hlasky
Serial.print(dht.readTemperature()); // vypis teploty v °C
Serial.print("°C "); // vypis hlasky
Serial.print(dht.readTemperature(true)); // vypis teploty v °F
Serial.println("°F"); // vypis hlasky
}
Nahrajte kód do desky ESP32. Ujistěte se, že máte v nastavení Arduino IDE vybranou správnou desku a port COM.
Po nahrání kódu otevřete sériový monitor s přenosovou rychlostí 115200. Aktuální hodnoty teploty a vlhkosti byste měli v sériovém monitoru dostávat každé dvě sekundy.

Závěr
V tomto návodu jsme si ukázali, jak získat hodnoty teploty a vlhkosti ze senzoru DHT11 nebo DHT22 pomocí modulu ESP32 a programu v prostředí Arduino IDE. Údaje o teplotě a vlhkosti načítáme pomocí knihovny DHT
od Adafruit, která nám práci se senzorem zjednodušuje použitím ovládacích metod objektu DHT
, a to funkcí read
a read
. Dalším možným krokem, jak tento projekt posunout na další úroveň, může být zobrazení hodnot ze senzorů na webovém serveru, nebo sdílení pomocí Bluetooth. To už je zase něco dalšího – rádi bychom se na to podívali zase jindy.