Fyzikální kabinet FyzKAB
Články Moduly ESP32 a ESP32-CAM ESP32 – čidla a periférie Čidlo teploty DS18B20 a modul ESP32

Čidlo teploty DS18B20 a modul ESP32

V dnešním článku si ukážeme, jak k modulu ESP32 připojit teplotní čidlo Dallas DS18B20. Ukážeme si, jak zapojit tento teplotní senzor a jak naprogramovat jeho načítání v prostředí Arduino IDE pomocí podpůrné knihovny.

připojení čidla Dallas DS18B20 k modulu ESP32
Obrázek 1 – připojení čidla Dallas DS18B20 k modulu ESP32 zdroj: 1)

Teplotní senzor DS18B20

Teplotní čidlo DS18B20 je jednovodičové digitální čidlo teploty, což znamená, že ke komunikaci s vaším ESP32 vyžaduje pouze jedinou datovou linku (a GND). Může být napájen externím napájecím zdrojem, nebo může být napájen přímo z datové linky (tzv. „Parazitní režim“), což eliminuje potřebu externího napájecího zdroje.

Teplotní čidlo DS18B20 má rozsah napájení 3,0 V až 5,5 V a rozsah provozních teplot je –55 °C až +125 °C (v teplotním rozsahu –10 °C až 85 °C s garantovanou přesností ±0,5 °C).

pouzdra a pinout čidla Dallas DS18B20
Obrázek 2 – pouzdra a pinout čidla Dallas DS18B20 zdroj: 2)

Každý snímač teploty DS18B20 má jedinečný 64-bitový sériový kód. To umožní připojit více senzorů ke stejnému datovému vodiči. Teplotu lze tedy získat z více senzorů pomocí jediného GPIO pinu. Teplotní senzor DS18B20 je v klasickém plastovém pouzdře TO92 nebo také ve vodotěsné verzi v nerezovém pouzdře (viz obr. 2).

Připojení čidla DS18B20 k modulu ESP32

Jak již bylo zmíněno dříve, teplotní senzor DS18B20 může být napájen pinem VDD (normální režim), nebo může svůj výkon odvozovat z datové linky (parazitní režim). Ukážeme si připojení v obou režimech:

Normální režim

normální režim

normální režim - schema

Parazitní režim

parazitní režim

parazitní režim - schema

Obrázek 3 – zapojení normálního a parazitního režimu čidla Dallas zdroj: 3)

V pro náš následující příklad použijeme normální režim, ve kterém napájíme čidlo Dalas napětím 3,3 V (pin 3V3) a data načínáme pinem GPIO 4.

čidlo Dallas DS18B20 a modul ESP32
Obrázek 4 – připojení čidla Dallas DS18B20 k modulu ESP32 zdroj: 3)

Programový kód v prostředí Arduino IDE

Instalace knihoven

Pro komunikaci s teplotním čidlem DS18B20 je třeba nainstalovat knihovnu OneWire (od Paula Stoffregena) a knihovnu Dallas Temperature. Při instalaci těchto knihoven postupujte podle následujících kroků.

  1. Otevřete prostředí Arduino IDE a přejděte na Projekt > Přidat knihovnu > Spravovat knihovny…, poté by se měl otevřít Správce knihoven.
  2. Do vyhledávacího pole napište „onewire“ a nainstalujte knihovnu OneWire od Paula Stoffregena.
knihovna onewire
  1. Poté vyhledejte „dallas“ a nainstalujte knihovnu DallasTemperature od Milese Burtona.
knihovna dallas

Programový kód

Po instalaci požadovaných knihoven můžete nahrát následující kód do ESP32. Tento kód načítá teplotu z čidla teploty DS18B20 a zobrazuje tyto hodnoty na sériovém monitoru prostředí Arduino IDE. Princip kódu je opět vysvětlen v jeho komentářích.

Kód: (ukázka komunikace čidla DS18B20 s modulem ESP32)

/* DS18B20 na Serial Monitor */

#include <OneWire.h>   // vlozeni knihovny OneWire
#include <DallasTemperature.h>   // vlozeni knihovny Dallas Temperature

const int oneWireBus = 4;   // teplotni cidlo pripojeno k GPIO 4

OneWire oneWire(oneWireBus);   // instance pro komunikaci se zarizeni OneWire
DallasTemperature sensors(&oneWire);   // reference oneWire na senzor Dallas

// funkce SETUP se spusti jednou pri stisknuti tlacitka reset nebo pri zapnuti desky.
void setup() {
  Serial.begin(115200);   // prenosova rychlost serioveho vystupu
  sensors.begin();   // Start senzoru DS18B20
}

// funkce LOOP bezi stale dokola.
void loop() {
  sensors.requestTemperatures();   // je potreba zavolat pred ctenim senzoru
  float temperatureC = sensors.getTempCByIndex(0);   // nacteni T z cidla 0
  Serial.println("Teplota: ");
  Serial.print(temperatureC);   // vypsani nactene hodnoty na seriovy vystup
  Serial.println("ºC");
  delay(5000);   // cekani 5s, pak se mereni opakuje
}

POZNÁMKA:
Metoda getTempCByIndex() akceptuje index nebo adresu teplotního čidla. Protože v našem případě používáme pouze jeden senzor, lze použít index 0. Pokud chcete číst více než jeden senzor, lze použít index 0 pro první senzor, index 1 pro další senzor a tak dále. V případě více čidel nám počet připojených zařízení ke sběrnici OneWire zjistí následující metoda objektu sensors, která se nazývá sensors.getDeviceCount(). Adresu daného čidla nám vrátí metoda téhož objektu sensors.getAddress(tempDeviceAddress, cislo_cidla), kde tempDeviceAddress je proměnná typu DeviceAddress, do které metoda vrátí adresu čidla, které je zaevidováno jako čidlo čísla daného proměnnou cislo_cidla. Celá metoda vrací hodnotu TRUE, pokud proběhlo zjištění adresy správně, hodnota FALSE indikuje problém. Získanou hodnotu v proměnné tempDeviceAddress lze pak použít místo indexu čidla.

Po nahrání kódu byste měli zobrazit údaje ze senzorů v sériovém monitoru:

Serial Monitor - výstup
Obrázek 5 – výstup naměřené teploty na Serial Monitor

Máme hotovo – umíme načítat teplotu z čidla Dallas DS18B20!

Závěr

V dnešním článku jsme si ukázali jednoduché připojení teplotního čidla Dallas DS18B20 k modulu ESP32. Toto čidlo velice přesné, jednoduché na ovládání a díky možné verzi ve voděodolném pouzdru i využitelné v široké škále aplikací. Případným zájemcům o ukázku připojení a obsluhy více čidel Dallas DS18B20 k modulu ESP32, popřípadě o ukázku vytvoření jednoduchého Wi-Fi teploměru doporučujeme následující anglický článek ESP32 DS18B20 Temperature Sensor with Arduino IDE (Single, Multiple, Web Server).


zdroje:
1) https://blog.uelectronics.com/tarjetas-desarrollo/internet-of-things/como-programar-el-ds18b20-con-arduino-ide-y-esp32/
2) https://www.theengineeringprojects.com/2019/01/introduction-to-ds18b20.html
3) https://randomnerdtutorials.com/esp32-ds18b20-temperature-arduino-ide/
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!