Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2015:esp8266-ds18b20

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Následující verze
Předchozí verze
2015:esp8266-ds18b20 [2016/01/15 22:53]
Václav Pálka vytvořeno
2015:esp8266-ds18b20 [2016/01/17 00:25] (aktuální)
Václav Pálka pokračování3
Řádek 1: Řádek 1:
 ====== WiFi teploměr s ESP8266 ====== ====== WiFi teploměr s ESP8266 ======
 +
  
 ===== Zadání ===== ===== Zadání =====
  
-Seznamte se s WiFi čipem ESP8266 a jeho vývojovým prostředím. Vytvořte aplikaci ​WiFi 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í.+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 ===== ===== Úvod =====
 ==== ESP8266 ==== ==== 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 ​+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. 25 x 14 mm.
  
-{{ :​2015:​esp8266-ds18b20:​esp8266-espxx.jpg?​nolink&​200 ​|Porovnání velikostí verzí modulů}}+{{ :​2015:​esp8266-ds18b20:​esp8266-espxx.jpg?​nolink |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í. 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í.
Řádek 21: Řádek 22:
  
 ===== Zapojení ===== ===== 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.
 +
 +{{ :​2015:​esp8266-ds18b20:​zapojeni.png?​nolink |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.
 +
 +
 +{{ :​2015:​esp8266-ds18b20:​20160117_001637.jpg?​nolink&​600 | 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.
 +<code c>
 +  #include <​ESP8266WiFi.h>​
 +  #include <​OneWire.h>​
 +  #include <​DallasTemperature.h>​
 +</​code>​
 +=== 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.
 +<code c>
 +  #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; ​
 +</​code>​
 +=== Připojení k síti ===
 +
 +Inicializace sériové komunikace a připojení k sítí.
 +<code c>
 +  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();​
 +  }
 +</​code>​
 +==== Hlavní smyčka ====
 +
 +V této smyčce se provádí změření a odeslání teploty na server ThingSpeak.com
 +<code c>  ​
 +  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í
 +   ​} ​                                            
 +  }   
 +</​code>​
 +===== 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.
 +
 +{{ :​2015:​esp8266-ds18b20:​odpoved.png?​nolink |Záznam sériové kominikace}}
  
 +Dále zde uvádím 24 hodinový záznam měření teploty v grafu ze serveru ThingSpeak.com.
  
 +{{ :​2015:​esp8266-ds18b20:​teplota.png?​nolink |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ě.
  
 +[[https://​thingspeak.com/​channels/​78922|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 2x1 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.1452894799.txt.gz · Poslední úprava: 2016/01/15 22:53 autor: Václav Pálka