Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2015:esp8266-ds18b20

WiFi teploměr s ESP8266

Zadání

Seznamte se s Wi-Fi čipem ESP8266 a jeho vývojovým prostředím. Vytvořte aplikaci Wi-Fi teploměru s čidlem DS18B20, která bude v definovaném intervalu pomocí GET požadavku odesílat aktuální teplotu na server ThingSpeak nebo do vlastního PHP skriptu s vizualizací.

Úvod

ESP8266

ESP8266 je ultra low coast čínský modu pro převod sériové linky na Wi-Fi. Tento modul s cenou do 3$ disponuje mimo jiné 32 bitovým procesorem s několika GPIO piny a podporuje módy v b/g/n, zabezpečení WPA/WPA2 a umí pracovat jako Station nebo AP. Jednou z nesporných výhod jsou i rozměry, které jsou pro verzi ESP8266 ESP-01 25 x 14 mm.

Porovnání velikostí verzí modulů

Modul samotný je schopen komunikovat s okolním světem již z výroby zavedeným firmwarem, který se ovládá pomocí AT příkazů přes sériovou linku připojenou rychlostí obvykle 115200 baudů za sekundu. Tyto jednoduché příkazy samy o sobě dostačují pro správnou funkci zařízení, které chceme připojit k síti. Avšak skutečné možnosti modul odhalil až s uvolněním dokumentace a SDK, díky čemuž umožnil vytvářet vlastní firmware. Mezi ty nejpokročilejší patří Nodemcu LUA. Tato distribuce využívá LUA jazyk, který byl navržen v roce 1993 jako odlehčený skriptovací jazyk, pro jednoduchá zařízení. Pro vytváření programů v jazyku C je nejlepší variantou zvolit rozšíření pro Arduino, pro které existuje i překladač. Toto prostředí jsem využil i já k vypracování projektu.

DS18B20

Teplotní čidlo Dallas DS18B20 je 9-12 bitový digitální teploměr s rozsahem -55 až 125°C. Teploměr komunikuje po 1-Wire sběrnici, čímž se stává více než vhodným pro použití s modulem ESP8266 ESP-01, který má pouze 2 GPIO piny.

Zapojení

Zapojení modulu ESP je snadné, samotná deska má 2 napájecí piny, 2 GPIO piny, sériovou linku a resetovací a enable pin. Pozor ovšem na úroveň napětí, která nesmí přesáhnout 3V3.

Zapojení

Digitální teploměr DS18B20 byl zapojen v zapojení s vnějším napájením.

V případě že chceme modul přeprogramovat je nutné, pro povolení programovaní, připojit pin GPIO0 na zem. Toto musí být provedeno ještě před připojením napájení, jinak nemusí k naprogramování dojít.

 Náhled na zapojení protipu

Program

Pro vytvoření programu bylo využito rozšíření pro Arduino a vhodné knihovny pro komunikaci s digitálním teploměrem DS18B20.

Inicializace

Knihovny

Inicializace použitých knihoven pro obsluhu ESP88226 a DS18B20 komunikující po 1-wire sběrnici.

  #include <ESP8266WiFi.h>
  #include <OneWire.h>
  #include <DallasTemperature.h>

Informace o připojení

Nastavení informací o Teplotním čidle, SSID a heslu sítě, na které bude zařízení připojeno a informace a přístupový API klíč pro ThingSpeak.com.

  #define ONE_WIRE_BUS 2        
  OneWire oneWire(ONE_WIRE_BUS);                 // Inicializace DS18B20 na pinu GPIO2
  DallasTemperature DS18B20(&oneWire);
 
  const char* ssid     = "vaclav";               // Nastavení připojení k síti
  const char* password = "";
 
  const char* host = "api.thingspeak.com";       // Informace pro připojení k thingspeak.com
  const char* APIkey   = "CM4O1WWET8RHAT99";
 
  bool scnd = false; 

Připojení k síti

Inicializace sériové komunikace a připojení k sítí.

  void setup() {
 
    Serial.begin(115200);                        // Otevření komunikace po sériové lince
    delay(10);
 
    Serial.println();    
    Serial.print("Connecting to ");
    Serial.println(ssid);
 
    WiFi.begin(ssid, password);                  // Inicializace připojení k síti
 
    while (WiFi.status() != WL_CONNECTED) {      // Potvrzení připojení k síti
      delay(500);
      Serial.print(".");
    }
 
    Serial.println("");
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
    Serial.println();
  }

Hlavní smyčka

V této smyčce se provádí změření a odeslání teploty na server ThingSpeak.com

  void loop() {
    delay(30000);                                // Měření a odesílání teploty probíhá v intervalu cca 30s
 
    float temp;
 
    DS18B20.requestTemperatures();               // Získání informace o teplotě teploty
    temp = DS18B20.getTempCByIndex(0);
    Serial.print("Temperature: ");
    Serial.println(temp);
 
    char charVal[12];
 
    dtostrf(temp, 8, 2, charVal);                // Konverze vyčtené teploty do stringu 
                                                 // (hodnota, počet míst, počet desetinných míst,
                                                 // umístění stringu) 
  if(scnd){
 
    Serial.print("connecting to ");
    Serial.println(host);
 
    WiFiClient client;
 
    const int httpPort = 80;
 
    if (!client.connect(host, httpPort)) {
      Serial.println("connection failed");
      return;
    }
 
    String url = "/update?key=";                // Vytvoření URL pro odeslání informace o teplotě
    url += APIkey;
    url += "&field1=";
    url += charVal;       
 
    Serial.print("Requesting URL: ");
    Serial.println(url);
 
                                                 // Odeslání požadavku na server
    client.print(String("GET ") + url + " HTTP/1.1\r\n" +
                 "Host: " + host + "\r\n" +
                 "Connection: close\r\n\r\n");
    delay(10);
 
    Serial.println();
    while (client.available()) {
      String line = client.readStringUntil('\r');
      Serial.print(line);                        // tisk informací přijatých ze serveru
    }
 
    Serial.println();
    Serial.println("connection completed");      // potvrzení ukončení odesílání
    Serial.println();
    Serial.println();
   }
   else
   {
    Serial.println("uncorrect first temperatue");
    Serial.println();                            // Ošetření nesprávnosti první změřené hodnoty po připojení
    scnd=true;                                   // k napájení
   }                                             
  }   

Funkce

Princip funkce zařízení funguje na jednoduchém principu, kdy se zařízení připojí k lokální Wi-Fi síti, jejíž údaje má uložené v programové syntaxi a následně s intervalem 30 sekund opakuje cyklus změření teploty, vytvoření URL pro odeslání informace na server ThingSpeak.com, odeslání informace a přijetí odpovědi ze serveru. Na následujícím obrázku je možné vidět výpis ze sériové komunikace modulu s počítačem.

Záznam sériové kominikace

Dále zde uvádím 24 hodinový záznam měření teploty v grafu ze serveru ThingSpeak.com.

Záznam teploty 24hodin

Vzhledem k dlouhé době opakovaní měření teploty a odezvy serveru na novou hodnotu na místo video záznamu o funkci přikládám odkaz na záznam posledních 24 hodin měření teploty, kdy je čidlo umístěno na stole v mém pokoji v místě mého trvalého bydliště.

Aktuální záznam teploty na ThingSpeak.com

Záznam bude aktuální po dobu, kdy zvládnou baterie dodávat dostatek proudu pro modul ESP8266.

Závěr

Modul ESP8266 byl sám o sobě pro mne rozuzlením podstaty Internetu věcí (IoT - Internet of Things), až v momentě, kdy jsem do ruky dostal desku o rozměru něco přes 2×1 cm jsem si uvědomil jak snadné je dnes připojit k procesoru Wi-Fi modul, ba co k samotnému modulu připojit zařízení, které tento modul napájený například z malé baterie, může obsluhovat.

2015/esp8266-ds18b20.txt · Poslední úprava: 2016/01/17 00:25 autor: Václav Pálka