ESP32 a čidlo DHT11/22 v MicroPythonu
V předchozích článcích jsme si představili, jak lze modul ESP32 programovat v jazyce MicroPython, ale upřímně řečeno, co by to bylo za mikrokontrolér, kdybychom jej nepožili ve spojení s nějakým čidlem. Zkusíme se tedy v následujících článcích postupně zaměřit na ovládání a obsluhu některých základních čidel v programovacím jazyce MicroPython.
První vlaštovkou v tomto našem počinu bude čidlo DHT11 (resp. DHT22), které slouží pro měření teploty a vzdušné vlhkosti. Určitě jednou ze základních aplikací, do kterých se „bastlíři“ pokoušejí pustiti, je nějaké jednoduchá meteorologická stanice, tak proč zrovna nezačít měřením teploty a vlhkosti. Následující obrázek č. 1 zachycuje obě čidla (tj. DHT11 a DHT22) určená pro měření základních meteorologických veličin. Obě tyto čidla jsou poměrně oblíbená a můžeme je najít v nejedné aplikaci. Relativně příznivá je i jejich cena, kdy číslo DHT11 lze zakoupit za cenu od 50 Kč a čidlo DHT22 od 150 Kč (pochopitelně dle prodejce). Dokonce obě tato čidla jsou tak populární, že jejich řídicí knihovny jsou již standardně součástí MicroPythonu! A tak to už je důvod, proč se na ně podívat podrobněji.

Na samý začátek se podíváme na parametry obou čidel, ať víme, co od nich můžeme očekávat a hlavně, jaký je mezi nimi rozdíl, kromě barvy, velikosti a ceny. Senzory DHT11 a DHT22 (také známý jako AM2302) se používají podobně, ale mají určité rozdíly. DHT11 má modré pouzdro, zatímco DHT22 má bílé pouzdro a je o něco větší (viz obr. 1). Více rozdílů nám ukáží následující tabulky srovnání.
DHT11 | |
---|---|
Přesnost teploty | ±2 °C |
Přesnost vlhkosti | ±5 % |
Teplotní rozsah | 0–50 °C |
Rozsah vlhkosti | 20–90 % |
Rychlost měření | 1 s |
Napájecí napětí | 3–5,5 V |
Proud | ∼2,5 mA |
Tab. č. 1 – Specifikace čidla DHT11
DHT22 (AM2302) | |
---|---|
Přesnost teploty | ±0,5 °C |
Přesnost vlhkosti | ±2 % |
Teplotní rozsah | –40 až +80 °C |
Rozsah vlhkosti | 0–100 % |
Rychlost měření | 2 s |
Napájecí napětí | 3–6 V |
Proud | ∼1,5 mA |
Tab. č. 2 – Specifikace DHT22 (AM2302)
Jak v předchozích tabulkách vidíme, čidlo DHT22 je přesnější, má širší interval použití, ale je na druhou stranu pomalejší. Upřímně řečeno obě čidla zrovna rychlostí neoplývají, ale pro výrobu nějakého DIY IoT projektu typu jednoduché meteostanice, budou dostačovat. V tom případě je čidlo DHT22 asi lepší volbou pro měření venkovní teploty, protože zvládne teploty od –40 °C.
Zapojení snímačů DHT11 a DHT22 k modulu ESP32
Senzory DHT11 a DHT22 (dále jen DHTxx) mají 3 až 4 piny v závislosti na provedení čidla. Holé čidlo má zpravidla vývody čtyři, ale jedno není použito, pokud je čidlo zapájeno do destičku DPS, takto vzniklý modul mívá vývodu jen tři. Situaci zachycuje obrázek č. 2.

Bohužel rozmístění jednotlivých vývodů závisí na konkrétním výrobci modulu, takže je třeba před zapojením čidla dávat pozor!
Další věc, na kterou si musíme dát pozor, je případný pull-up rezistor (4,7 kΩ až 10 kΩ), který může být zapojený mezi pin kladného napájení (+Vcc) a signálovým pinem (S). Pokud používáme holé čidlo, patrně mezi těmito vývodu pull-up rezistor není, v případě zapájení čidla DHTxx v podobě modulu na malé destičce DPS, asi tento rezistor na DPS bude připájen. Není na škodu přidat odpor, i když to není nezbytně nutné.
Pro připojení čidla DHTxx můžeme pro načítání signálu použít jen jeden (libovolný) GPIO pin modulu ESP32, který lze použít jako digitální vstup. (tzv. One Wire Protocol). Pro napájení čidla použijeme piny s napětím 3,3 V a GND.
V některých návodech se uvádí, že je možné zapojit čidla i na napětí 5 V, ale s ohledem na zmíněná pull-up rezistor mezi napájecím napětím a signálovým pinem to s ohledem na třívoltovou logiku modulu ESP32 rozhodně nedoporučujeme!
Jako příkladu ukázkového propojení čidla DHTxx s modulem ESP32 můžeme využít propojení popsané v následující tabulce.
Čidlo DHTxx | Modul ESP32 |
---|---|
+Vcc | 3V3 |
Signal | D4 |
GND | GND |
Tab. č. 3 – propojení čidla DHTxx a modulu ESP32
Schéma zapojení znázorňuje obrázek č. 3. Pokud naše čidlo nemá pull-up rezistor, přidáme rezistor 4,7 kΩ–10 kΩ mezi piny 3V3
a signál ( GPIO4
).

(červeně naznačena možnost přidání pull-up rezistoru, pokud není součástí čidla)

Načítání čidla DHTxx pomocí MicroPython
Pro komunikaci se senzory DHTxx budete využívat knihovnu, protože pro svou komunikaci používá proprietární protokol. Dobrou zprávou je, jak již bylo naznačeno, že MicroPython má tuto knihovnu již vestavěnou, takže nebudete muset nic stahovat a instalovat!
Knihovna (modul) pro řízení čidela DHT11 i DHT22 se jmenuje DHT
a můžeme ji importovat stejně jako většinu modulů, které jsme do teď používali. Pro přístup k danému čidlu následně stačí vytvořit objekt DHT11()
, případně DHT22()
podle použitého čidla. Argumentem této instance je signálový pin, na kterém budeme čidlo načítat. Měření pak spustíme metodou measure()
a již se můžeme dotazovat na jednotlivé měřené veličiny metodami temperature()
a humidity()
. Jednoduchá čidla mají i jednoduché příkazy! 😉
Následující ukázkový kód ukazuje základní obsluhu čidel DHTxx:
from machine import Pin
from time import sleep
import dht
sensor = dht.DHT11(Pin(4))
# sensor = dht.DHT22(Pin(4))
# podle cidla nastavte instatnci objeku
while True:
try:
sleep(1) # pro cidlo DHT11 je třeba cekat 1s
# sleep(1) # pro cidlo DHT22 je třeba pridat ještě 1s
# podle cidla nastavte cas cekani
sensor.measure()
print(f"Teplota: { sensor.temperature():.1f }")
print(f"Vlhkost: { sensor.humidity():.0f }")
except OSError as e:
print('Problem s nactenim cidla')
- Poznámka:
- Mezi každým měřením se přidává čekací čas, který zohledňuje rychlost čidla. V případě čidla DHT11 je to jedna vteřina, pro čidlo DHT22 to jsou vteřiny dvě. Celý blok načítání čidla je vložen do struktury
try, except
, která dokáže podchytit případnou chybu načtení čidla. Pokud dojde k jakékoliv chybě při čtení čidla, nebude generována chyba programu, ale vyvolá se blokexcept
, který vypíše na výstup chybovou hlášku.
Zajímavou strukturou v Pythonu je použití tzv. f-string pro zobrazení proměnných v textu. Asi jsme to již v některém dřívějším článku zmiňovali, ale raději to připomeneme. Tato struktura začíná znakem f
a proměnná, která bude do textu vložena, musí být uzavřena ve složených závorkách. Zde dokonce máme zadán počet desetinných míst, která se mají zobrazit, a to přidáním :.1f
nebo .0f
. Měli bychom si však promyslet, zda i výpis naměřených hodnot teploty na jedno desetinné místo je v případě čidla DHT11 dobrý nápad – když se podíváme na přesnost čidla. V případě vlhkosti máme pro formát výpisu zadanou nulu, protože oba snímače jsou v případě měření vlhkosti přesné pouze na celá procenta!
Funkci programu máme zobrazenou v terminálu prostředí Thonny IDE. Teplota je vyjádřena ve stupních Celsia, zatímco vlhkost je vyjádřena v procentech.

Pocitová teplota
Abychom alespoň k výše uvedenému programu, který je standardní ukázkou použití čidla DHTxx v MicroPythonu, přidali něco netradičního, zkusíme jej rozšířit o možnost výpočtu jednoduché pocitové teploty (též tzv. tepelný index). Pocitová teplota se snaží zohlednit pocit subjektivního vnímání teploty a vlhkosti. Pocitová teplota je vyjádřená ve °C, ale zohledňuje nejen teplotu, ale i množství vlhkosti ve vzduchu. Když je vzduch vlhčí, je pocitově teplota vyšší, než skutečná naměřená teplota teploměrem teploměr.
Následující vzorec (získáno z Wikipedie) ukazuje, jak z naměřených hodnot teploty a relativní vlhkosti získat hodnotu pocitové teploty Pt:
Pt = –8,78469475556 + 1,61139411 t + 2,33854883889 h – 0,14611605 t·h – 0,012308094 t2 – 0,016424827778 h2 + 0,002211732 t2·h + 0,00072546 t·h2 – 0,000003582 t2·h2 | (1) |
kde t je teplota dosazená ve stupních Celsia, h je relativní vlhkost v procentech (0–100)
Nás program pak upravíme následujícím způsobem:
from machine import Pin
from time import sleep
import dht
sensor = dht.DHT11(Pin(4))
# sensor = dht.DHT22(Pin(4))
# podle cidla nastavte instatnci objeku
def Pt(t, h):
pt = -8.78469475556
pt += 1.61139411*t
pt += 2.33854883889*h
pt -= 0.14611605*t*h
pt -= 0.012308094*(t**2)
pt -= 0.016424827778*(h**2)
pt += 0.002211732*(t**2)*h
pt += 0.00072546*t*(h**2)
pt -= 0.000003582*(t**2)*(h**2)
return pt
while True:
try:
sleep(1) # pro cidlo DHT11 je třeba cekat 1s
# sleep(1) # pro cidlo DHT22 je třeba pridat ještě 1s
# podle cidla nastavte cas cekani
sensor.measure()
teplota = sensor.temperature()
vlhkost = sensor.humidity()
print(f"Teplota: { teplota:.1f } °C")
print(f"Vlhkost: { vlhkost:.0f } %")
print(f"Pocitova teplota: { Pt(teplota, vlhkost):.1f} °C")
except OSError as e:
print('Problem s nactenim cidla')
Pro výpočet pocitové teploty jsme si definovali funkci Pt()
, která má dva vstupní parametru a to teplotu ve stupních Celsia a relativní vlhkost v počtu procent. Výstupná proměnná pt se pak v této funkci postupně vypočítává podle vzorce (1). Pro účel vložení potřebných vstupních hodnot této funkce jsou v hlavní nekonečné smyčce hodnoty teploty a vlhkosti načítány do proměnných teplota a vlhkost (oproti předchozímu přímému vypisování na výstup).
Za možnou zmínku akorát stojí pythonovský zápis druhé mocniny ve výrazech kvadrátů dílčích členů výpočtu. Zápis mocniny je
v Pythonu možný pomocí symbolu **
, kde první operand je základ a druhý mocnina, například 2 ** 8
odpovídá mocnině 28. Zde tedy závorky (t**2)
a (h**2)
odpovídají výrazům t2 a h2.
Následující obrázek č. 6 ukazuje výpis teploty, vlhkosti a vypočítané pocitové teploty ve výstupu prostředí Thonny IDE.

Závěr
V dnešním článku jsme se seznámili s použitím modulu ESP32 k měření teploty a vlhkosti pomocí čidla DHT11 (a jeho přesnější verze DHT22) pod taktovkou jazyka MicroPython. Tento základní senzor je oblíbený pro různé projekty díky své jednoduchosti a cenové dostupnosti. Jak jsme viděli, čidla DHTxx jsou snadno připojitelná k modulu ESP32, a díky vestavěné knihovně v MicroPythonu, lze rychle začít s jejich obsluhou. Hlavní výhodou čidel DHT11 a DHT22 je jejich jednoduché zapojení a použití v základních projektech, jako je například DIY meteostanice. S těmito čidly můžeme získávat měření teploty a vlhkosti a analyzovat je přímo v našem kódu jako ukázku jsme kupříkladu ukázali možnost výpočtu pocitové teploty, která zohledňuje vliv vlhkosti na vnímání teploty.
Znalosti a dovednosti získané při práci s těmito senzory mohou být využity v mnoha dalších praktických aplikacích. Příkladem může být vývoj inteligentního domácího systému, který by sledoval a reguloval podmínky v interiéru (teplotu, vlhkost) pro zajištění optimálního prostředí, například pro pěstování rostlin nebo regulaci vytápění v domácnostech. Dalším využitím může být integrace těchto senzorů do IoT projektů, kde bude možné data o teplotě a vlhkosti sbírat a analyzovat na dálku, což je užitečné pro monitorování počasí nebo správy klimatických podmínek v různých prostředích.
Takový projekt může být skvělým základem pro začínající bastlíře nebo pro ty, kteří se chtějí naučit základům IoT a automatizace. Tak nečekejte na dokonalý okamžik – teď je ta pravá chvíle, kdy můžete začít objevovat kouzlo ESP32 a MicroPythonu. Vezměte do ruky svůj modul ESP32, ponořte se do tvorby a nechte svou kreativitu rozkvést v úžasné projekty! 😎