NodeMCU + DS18B20 + Thingspeak

odesílá naměřenou hodnotu na thingspeak (co 5 minut)

 

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

  #define ONE_WIRE_BUS 2        
  OneWire oneWire(ONE_WIRE_BUS);                 // Inicializace DS18B20 na pinu GPIO2
  DallasTemperature DS18B20(&oneWire);
 
  const char* ssid     = "Brno4";               // 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   = "***************";
 
  bool scnd = false; 


  
void setup(void)
{
    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();
}

  void loop() {
    
 
    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();
    delay(300000);                                // Měření a odesílání teploty probíhá v intervalu 5 minut   
   }
   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í
    delay(5000);                                 // 5 sekund
   }
                                             
  }  


 

upravený zdroj:

http://www.urel.feec.vutbr.cz/MPOA/2015/esp8266-ds18b20

 

 

Napsat komentář