Fyzikální kabinet FyzKAB
Články Moduly ESP32 a ESP32-CAM ESP32 – čidla a periférie ESP32 a čidlo teploty a vlhkosti DHT11/DHT22

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.

ESP32 a DHT11
Obrázek 1 – připojení modulu ESP32 a senzoru DHT11

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.

raw DHT11 dht11 temperature humidity sensor Dht11 desticka
Obrázek 2 – čidlo DHT11, jeho zapojení na destičce senzoru

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).

propojeni ESP32 a DHT11
Obrázek 3 – Propojení čidla DHT11 a vývojové desky s ESP32

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.

knihovna DHT

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_Sensor.h: No such file or directory

Takže ještě zadáme do vyhledávacího pole heslo Adafruit Unified Sensor a knihovnu nainstalujte nabídnutou knihovnu.

knihovna Adafruit Unified Sensor

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.

Serial Monitor
Obrázek 4 – Výstup hodnot z čidla DHT11 zobrazené v Serial Monitoru

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í readTemperature() a readHumidity(). 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.

UPOZORNĚNÍ:
Nesouhlasíme s vyřazením Newtonových zákonů, Ohmova zákona a zákona zachování energie z učiva fyziky základních škol v České republice!