ESP
DIYer
32
LAB

Moderní mikrokontrolér v rukou „bastlíře“

Č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 img-responsive

Parazitní režim

parazitní režim

parazitní režim - schema img-responsive

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

V našem následujícím příkladu použijeme normální režim, ve kterém napájíme čidlo Dallas napětím 3,3 V (pin 3V3) a data načítá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 je 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/
Pošli signál autorovi: