ESP8266 - Teplomer s DS18B20

Zápisník experimentátora

Hierarchy: ESP8266

V dnešnom článku by som chcel začať pracovať s témou jednoduchého teplomera, ktorú budem postupne vylepšovať. V prvom článku si navrhneme jednoduchý teplomer pomocou mkrokontroléra ESP8266 a integrovaného obvodu DS18B20. Výsledok budeme zobrazovať na OLED displeji. Toto základné zapojenie nám poslúži aj v ďalších článkoch, v ktorých sa budeme snažiť odoslať zozbierané údaje o teplote na Internet do služby, ktorá je určená na zber a vizualizáciu hromadných údajov.

Kombináciu mikrokontroléra ESP8266 a OLED displeja som použil preto, aby bol výsledok zaujímavejší. ESP8266 má WiFi pripojenie a preto je logické, ak sa výsledky merania odošlú prostredníctvom protokolu HTTP na vzdialený server. Toto je ale prvý článok zo série a ten sa zaoberá konštrukciou samotného teplomera. A pretože je k článku aj sprievodné video, na videu vyzerá meranie teploty lepšie, keď môžete meranú teplotu vidieť priamo na displeji.

Na meranie teploty je použitý integrovaný obvod DS18B20. Ten je schopný pracovať v dvoch režimoch.

Ak použijete Arduino, môžete použit oba režimy. Arduino je schopné cez pin pustiť pomerne veľký prúd, ktorý je schopný napájať integrovaný obvod aj v parazitickom napájaní. ESP8266 pracuje s nižším napätím a cez pin pustí omnoho nižší prúd. Výsledkom je to, že parazitické napájanie nemôžete použiť. Dá sa to iba pomocou úpravy zapojenia, ktoré je treba doplniť o ďalšie súčiastky a preto sa takémuto zapojeniu nebudeme venovať. Na naše účely to nemá zmysel. Okrem toho sa v poslednej dobe začínajú objavovať verzie DS18B20 (pravdepodobne čínske napodobeniny, alebo vyradené obvody), ktoré majú problémy s parazitickým napájaním.

Použité súčiastky

Použil som tieto súčiastky.

Použité knižnice

Do Arduino IDE som doinštaloval jadro pre ESP8266.

Použil som tieto knižnice. Všetky sa dajú nainštalovať pomocou Správcu knižníc.

Program

Program je jednoduchý. ESP8266 má obmedzený počet digitálnych pinov, preto používam také rozloženie pinov, ktoré kopíruje rozmiestnenie pinov na doske NodeMCU. Na pripojenie displeja je použitých 5 pinov. Jeden pin je použitý na pripojenie integrovaného obvodu DS18B20, ktorý meria teplotu. Program na začiatku inicializuje OLED displej a OneWire zbernicu. Na displejí potom vypíše informačný text. Potom môžu nastať dva stavy.

  • Ak program nenašiel pripojený žiaden senzor, vypíše na displej chybové hlásenie.
  • Ak program našiel senzor teploty, na displeji bude v sekundových intervaloch vypisovať meranú teplotu. Sekundový interval je nastavený preto, aby som mohol ukázať reakciu senzora vo videu. V praxi stačí merať teplotu v dlhších intervaloch.
#include <U8g2lib.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS D6

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ D1, /* data=*/ D2, /* cs=*/ D5, /* dc=*/ D4, /* reset=*/ D3);
char draw[30];

#define LINE0 11
#define LINE1 22
#define LINE2 33
#define LINE4 44
#define LINE5 55

void setup() {
  u8g2.begin();
  u8g2.enableUTF8Print();
  u8g2.setFont(u8g2_font_helvR08_tf);

  u8g2.clearBuffer();
  u8g2.drawStr(0, 12, "Arduino Slovakia");
  u8g2.drawStr(0, 26, "DS18B20 Thermometer");
  u8g2.sendBuffer();

  sensors.begin();
  sensors.setResolution(12);

  Serial.begin(115200);

  delay(1000);

  Serial.println("Setup done");
}

void loop() {
  if (sensors.getDS18Count() != 0) {
    sensors.requestTemperatures();
    double temp = sensors.getTempCByIndex(0);
    Serial.println(temp);

    u8g2.clearBuffer();
    sprintf(draw, "Temperature");
    u8g2.setFont(u8g2_font_helvR08_tf);
    u8g2.drawUTF8(1, LINE0, draw);
    sprintf(draw, "%.02f °C", temp);
    u8g2.setFont(u8g2_font_helvB18_tf);
    u8g2.drawUTF8(15, LINE4, draw);
    u8g2.drawFrame(0, 0, 128, 64);
    u8g2.sendBuffer();
  }
  else {
    u8g2.clearBuffer();
    u8g2.setFont(u8g2_font_helvR08_tf);
    u8g2.drawUTF8(1, LINE0, "Error");
    u8g2.drawFrame(0, 0, 128, 64);
    u8g2.sendBuffer();
  }
  delay(1000);
}

Zdrojový kód

Zdrojový kód sa nachádza na serveri GitHub.

Video

Video sa nachádza na serveri YouTube.

  • to-do

30.01.2019


Menu