slacc

  • Home
  • Lockpicking
  • rad1o badge
  • Kontakt

ESP8266+BME280 influxDB Anbindung

Geschrieben am 25. August 2019 Von JDT

Ich habe lange gesucht ein Code für den ESP8266 mit einem BME280 Sensor zu finden.

Als Library habe ich nach viel testen, diese gefunden:

InfluxDB: https://github.com/tobiasschuerg/ESP8266_Influx_DB/
BME280:https://github.com/adafruit/Adafruit_BME280_Library
Diese lässt sich auch über die Bibliotheksverwaltung herunterladen:

Screenshot InfluxDB Lib in der Bibliotheksverwaltung
Screenshot BME280 Lib in der Bibliotheksverwaltung

Verkabelung ESP8266 und BME280

BME280 – ESP8266
SDA – D2
SCL – D1
GND – GND
VIN – 3V3

Mein Code erzeugt auch noch einen Webserver, auf dem die Daten angezeigt werden:

ESP8266 Webseite mit Messdaten


Der Code ist ein erster Draft und läuft jetzt erst knappe 10 Stunden. Ich optimiere zur Zeit noch. Tipps zur Verbesserung nehme ich gerne entgegen!

#include <ESP8266WebServer.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <WiFiUdp.h>
#include <InfluxDb.h>

#define SEALEVELPRESSURE_HPA (1013.25)

#define INFLUXDB_HOST "INFLUXURL"
#define INFLUXDB_USER "INFLUXUSER"
#define INFLUXDB_PASS "INFLUXPASS"
#define INFLUXDB_DB "INFLUXDB"
unsigned int INFLUXDB_PORT = 8086; // INFLUXPort

Adafruit_BME280 bme;
Influxdb influx(INFLUXDB_HOST,INFLUXDB_PORT);


float temperature, humidity, pressure, altitude;

/*Put your SSID & Password*/
const char* ssid = "SSID";  // Enter SSID here
const char* password = "Passwort";  //Enter Password here



ESP8266WebServer server(80);              
 
void setup() {
  Serial.begin(115200);
  delay(100);
  
  bme.begin(0x76);   

  Serial.println("Connecting to ");
  Serial.println(ssid);
  //connect to your local wi-fi network
  WiFi.begin(ssid, password);

  //check wi-fi is connected to wi-fi network
  while (WiFi.status() != WL_CONNECTED) {
  delay(1000);
  Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected..!");
  Serial.print("Got IP: ");  Serial.println(WiFi.localIP());



  server.on("/", handle_OnConnect);
  server.onNotFound(handle_NotFound);

  server.begin();
  Serial.println("HTTP server started");
  
  influx.setDbAuth(INFLUXDB_DB, INFLUXDB_USER, INFLUXDB_PASS);

}

int loopCount = 0;

void loop() {
  server.handleClient();
  loopCount++;
  temperature = bme.readTemperature();
  humidity = bme.readHumidity();
  pressure = bme.readPressure() / 100.0F;
  altitude = bme.readAltitude(SEALEVELPRESSURE_HPA);
  
  if (temperature != 0.00){
    // Einzelabfrage: 
    //  InfluxData row("thermometer");
    //  row.addTag("node", "esp1");
    //  row.addTag("sensor", "temperature");
    //  row.addTag("mode", "pwm");
    //  row.addValue("loopCount", loopCount);
    //  row.addValue("temperature", temperature);
    //  influx.write(row);
    
     Serial.println("Sammel Thermometer Messungen"); 
     InfluxData measurement1 = measurementtemp();
     influx.prepare(measurement1);
    
    InfluxData measurement2 = measurementhum();
    influx.prepare(measurement2);
    
    InfluxData measurement3 = measurementhpa();
    influx.prepare(measurement3);
    boolean success = influx.write();
  
  }
     Serial.println("Warte 30 Sekunden"); 
    delay(30000);

}

void handle_OnConnect() {
  temperature = bme.readTemperature();
  humidity = bme.readHumidity();
  pressure = bme.readPressure() / 100.0F;
  altitude = bme.readAltitude(SEALEVELPRESSURE_HPA);
  server.send(200, "text/html", SendHTML(temperature,humidity,pressure,altitude)); 
  
}

InfluxData measurementtemp() {
  InfluxData row("thermometer");
  row.addTag("node", "esp1");
  row.addTag("sensor", "temperature");
  row.addTag("mode", "pwm");
  row.addValue("loopCount", loopCount);
  row.addValue("temperature", temperature);
  return row;
}


InfluxData measurementhum() {
  InfluxData row("thermometer");
  row.addTag("node", "esp1");
  row.addTag("sensor", "humidity");
  row.addTag("mode", "pwm");
  row.addValue("loopCount", loopCount);
  row.addValue("humidity", humidity);
  return row;
}


InfluxData measurementhpa() {
  InfluxData row("thermometer");
  row.addTag("node", "esp1");
  row.addTag("sensor", "pressure");
  row.addTag("mode", "pwm");
  row.addValue("loopCount", loopCount);
  row.addValue("pressure", pressure);
//  row.addValue("value", pressure);
  return row;
}



void handle_NotFound(){
  server.send(404, "text/plain", "Not found");
}


String SendHTML(float temperature,float humidity,float pressure,float altitude){
  String ptr = "<!DOCTYPE html>";
  ptr +="<html>";
  ptr +="<head>";
  ptr +="<title>ESP8266 Thermometer mit influxDB</title>";
  ptr +="<meta name='viewport' content='width=device-width, initial-scale=1.0'>";
  ptr +="<link href='https://fonts.googleapis.com/css?family=Open+Sans:300,400,600' rel='stylesheet'>";
  ptr +="<style>";
  ptr +="html { font-family: 'Open Sans', sans-serif; display: block; margin: 0px auto; text-align: center;color: #444444;}";
  ptr +="body{margin: 0px;} ";
  ptr +="h1 {margin: 50px auto 30px;} ";
  ptr +=".side-by-side{display: table-cell;vertical-align: middle;position: relative;}";
  ptr +=".text{font-weight: 600;font-size: 19px;width: 200px;}";
  ptr +=".reading{font-weight: 300;font-size: 50px;padding-right: 25px;}";
  ptr +=".temperature .reading{color: #F29C1F;}";
  ptr +=".humidity .reading{color: #3B97D3;}";
  ptr +=".pressure .reading{color: #26B99A;}";
  ptr +=".altitude .reading{color: #955BA5;}";
  ptr +=".superscript{font-size: 17px;font-weight: 600;position: absolute;top: 10px;}";
  ptr +=".data{padding: 10px;}";
  ptr +=".container{display: table;margin: 0 auto;}";
  ptr +=".icon{width:65px}";
  ptr +="</style>";
  ptr +="<script>\n";
  ptr +="setInterval(loadDoc,1000);\n";
  ptr +="function loadDoc() {\n";
  ptr +="var xhttp = new XMLHttpRequest();\n";
  ptr +="xhttp.onreadystatechange = function() {\n";
  ptr +="if (this.readyState == 4 && this.status == 200) {\n";
  ptr +="document.body.innerHTML =this.responseText}\n";
  ptr +="};\n";
  ptr +="xhttp.open(\"GET\", \"/\", true);\n";
  ptr +="xhttp.send();\n";
  ptr +="}\n";
  ptr +="</script>\n";
  ptr +="</head>";
  ptr +="<body>";
  ptr +="<h1>ESP8266 Weather Station</h1>";
  ptr +="<div class='container'>";
  ptr +="<div class='data temperature'>";
  ptr +="<div class='side-by-side icon'>";
  ptr +="<svg enable-background='new 0 0 19.438 54.003'height=54.003px id=Layer_1 version=1.1 viewBox='0 0 19.438 54.003'width=19.438px x=0px xml:space=preserve xmlns=http://www.w3.org/2000/svg xmlns:xlink=http://www.w3.org/1999/xlink y=0px><g><path d='M11.976,8.82v-2h4.084V6.063C16.06,2.715,13.345,0,9.996,0H9.313C5.965,0,3.252,2.715,3.252,6.063v30.982";
  ptr +="C1.261,38.825,0,41.403,0,44.286c0,5.367,4.351,9.718,9.719,9.718c5.368,0,9.719-4.351,9.719-9.718";
  ptr +="c0-2.943-1.312-5.574-3.378-7.355V18.436h-3.914v-2h3.914v-2.808h-4.084v-2h4.084V8.82H11.976z M15.302,44.833";
  ptr +="c0,3.083-2.5,5.583-5.583,5.583s-5.583-2.5-5.583-5.583c0-2.279,1.368-4.236,3.326-5.104V24.257C7.462,23.01,8.472,22,9.719,22";
  ptr +="s2.257,1.01,2.257,2.257V39.73C13.934,40.597,15.302,42.554,15.302,44.833z'fill=#F29C21 /></g></svg>";
  ptr +="</div>";
  ptr +="<div class='side-by-side text'>Temperature</div>";
  ptr +="<div class='side-by-side reading'>";
  //ptr +=(float)temperature; 
  ptr +=(float)temperature; 
  ptr +="<span class='superscript'>°C</span></div>";
  ptr +="</div>";
  ptr +="<div class='data humidity'>";
  ptr +="<div class='side-by-side icon'>";
  ptr +="<svg enable-background='new 0 0 29.235 40.64'height=40.64px id=Layer_1 version=1.1 viewBox='0 0 29.235 40.64'width=29.235px x=0px xml:space=preserve xmlns=http://www.w3.org/2000/svg xmlns:xlink=http://www.w3.org/1999/xlink y=0px><path d='M14.618,0C14.618,0,0,17.95,0,26.022C0,34.096,6.544,40.64,14.618,40.64s14.617-6.544,14.617-14.617";
  ptr +="C29.235,17.95,14.618,0,14.618,0z M13.667,37.135c-5.604,0-10.162-4.56-10.162-10.162c0-0.787,0.638-1.426,1.426-1.426";
  ptr +="c0.787,0,1.425,0.639,1.425,1.426c0,4.031,3.28,7.312,7.311,7.312c0.787,0,1.425,0.638,1.425,1.425";
  ptr +="C15.093,36.497,14.455,37.135,13.667,37.135z'fill=#3C97D3 /></svg>";
  ptr +="</div>";
  ptr +="<div class='side-by-side text'>Humidity</div>";
  ptr +="<div class='side-by-side reading'>";
  ptr +=(float)humidity; 
  ptr +="<span class='superscript'>%</span></div>";
  ptr +="</div>";
  ptr +="<div class='data pressure'>";
  ptr +="<div class='side-by-side icon'>";
  ptr +="<svg enable-background='new 0 0 40.542 40.541'height=40.541px id=Layer_1 version=1.1 viewBox='0 0 40.542 40.541'width=40.542px x=0px xml:space=preserve xmlns=http://www.w3.org/2000/svg xmlns:xlink=http://www.w3.org/1999/xlink y=0px><g><path d='M34.313,20.271c0-0.552,0.447-1,1-1h5.178c-0.236-4.841-2.163-9.228-5.214-12.593l-3.425,3.424";
  ptr +="c-0.195,0.195-0.451,0.293-0.707,0.293s-0.512-0.098-0.707-0.293c-0.391-0.391-0.391-1.023,0-1.414l3.425-3.424";
  ptr +="c-3.375-3.059-7.776-4.987-12.634-5.215c0.015,0.067,0.041,0.13,0.041,0.202v4.687c0,0.552-0.447,1-1,1s-1-0.448-1-1V0.25";
  ptr +="c0-0.071,0.026-0.134,0.041-0.202C14.39,0.279,9.936,2.256,6.544,5.385l3.576,3.577c0.391,0.391,0.391,1.024,0,1.414";
  ptr +="c-0.195,0.195-0.451,0.293-0.707,0.293s-0.512-0.098-0.707-0.293L5.142,6.812c-2.98,3.348-4.858,7.682-5.092,12.459h4.804";
  ptr +="c0.552,0,1,0.448,1,1s-0.448,1-1,1H0.05c0.525,10.728,9.362,19.271,20.22,19.271c10.857,0,19.696-8.543,20.22-19.271h-5.178";
  ptr +="C34.76,21.271,34.313,20.823,34.313,20.271z M23.084,22.037c-0.559,1.561-2.274,2.372-3.833,1.814";
  ptr +="c-1.561-0.557-2.373-2.272-1.815-3.833c0.372-1.041,1.263-1.737,2.277-1.928L25.2,7.202L22.497,19.05";
  ptr +="C23.196,19.843,23.464,20.973,23.084,22.037z'fill=#26B999 /></g></svg>";
  ptr +="</div>";
  ptr +="<div class='side-by-side text'>Pressure</div>";
  ptr +="<div class='side-by-side reading'>";
  ptr +=(float)pressure;
  ptr +="<span class='superscript'>hPa</span></div>";
  ptr +="</div>";
  ptr +="<div class='data altitude'>";
  ptr +="<div class='side-by-side icon'>";
  ptr +="<svg enable-background='new 0 0 58.422 40.639'height=40.639px id=Layer_1 version=1.1 viewBox='0 0 58.422 40.639'width=58.422px x=0px xml:space=preserve xmlns=http://www.w3.org/2000/svg xmlns:xlink=http://www.w3.org/1999/xlink y=0px><g><path d='M58.203,37.754l0.007-0.004L42.09,9.935l-0.001,0.001c-0.356-0.543-0.969-0.902-1.667-0.902";
  ptr +="c-0.655,0-1.231,0.32-1.595,0.808l-0.011-0.007l-0.039,0.067c-0.021,0.03-0.035,0.063-0.054,0.094L22.78,37.692l0.008,0.004";
  ptr +="c-0.149,0.28-0.242,0.594-0.242,0.934c0,1.102,0.894,1.995,1.994,1.995v0.015h31.888c1.101,0,1.994-0.893,1.994-1.994";
  ptr +="C58.422,38.323,58.339,38.024,58.203,37.754z'fill=#955BA5 /><path d='M19.704,38.674l-0.013-0.004l13.544-23.522L25.13,1.156l-0.002,0.001C24.671,0.459,23.885,0,22.985,0";
  ptr +="c-0.84,0-1.582,0.41-2.051,1.038l-0.016-0.01L20.87,1.114c-0.025,0.039-0.046,0.082-0.068,0.124L0.299,36.851l0.013,0.004";
  ptr +="C0.117,37.215,0,37.62,0,38.059c0,1.412,1.147,2.565,2.565,2.565v0.015h16.989c-0.091-0.256-0.149-0.526-0.149-0.813";
  ptr +="C19.405,39.407,19.518,39.019,19.704,38.674z'fill=#955BA5 /></g></svg>";
  ptr +="</div>";
  ptr +="<div class='side-by-side text'>Altitude</div>";
  ptr +="<div class='side-by-side reading'>";
  ptr +=(int)altitude;
  ptr +="<span class='superscript'>m</span></div>";
  ptr +="</div>";
  ptr +="</div>";
  ptr +="</body>";
  ptr +="</html>";
  return ptr;
}

Grafana Query:

SELECT mean("temperature") FROM "DATABSE" WHERE ("node" = 'esp1') AND $timeFilter GROUP BY time($__interval) fill(null)

Weitere Pläne:
* Code Optimierung
** Entschlackung
** Webserver entfernen
** Influx Übergabeparameter überarbeiten
* Debug Mode (Serielle Ausgabe)
* Sleep Mode
* …

Veröffentlicht unter Allgemein | 6 Kommentare
« Kostenloses DynDNS mit inwx und FritzBox
5.1 Soundkarte für Mac »

6 thoughts on “ESP8266+BME280 influxDB Anbindung”

  1. UG sagt
    4. Mai 2020 auf 17:28

    Hi,

    nice work, if you buy the correct bme280 and not a chinese faked one, it works nearly out of the box.
    But I got some problems with the http server – it works one time only… after a second connect attempt (from the same, or from another browser, or from another host in the network) nothing happens…
    Do you have the same or maybe similar problems?

    Cheers

    UG

    Antworten
    • JDT sagt
      11. Mai 2020 auf 22:53

      Do you have a link sample?

      Antworten
  2. Torsten sagt
    27. September 2020 auf 14:26

    Hi,habe mal den Code ausprobiert. Leider schreibt er mir keine Daten in die Influx DB … woran kann das liegen ?

    #define INFLUXDB_HOST „http://192.168.188.22“
    #define INFLUXDB_USER „solar“
    #define INFLUXDB_PASS „12345678“
    #define INFLUXDB_DB „weatherdb“
    unsigned int INFLUXDB_PORT = 8086; // INFLUXPort

    Antworten
    • JDT sagt
      27. September 2020 auf 14:34

      Hi,
      erstmal das http:// weglassen und nur die IP-Adresse reinschreiben, zeigt das Webinterface Daten an? Was sagt der Serielle Monitor?

      Antworten
  3. Torsten sagt
    27. September 2020 auf 21:01

    Hi,habe den Fehler gefunden. Nutze ein esp8266 01s und da muss ich die i2c Pins auf gpio0 und gpio2 bekommen.

    Finde irgendwie keine Lösung dafür .

    Antworten
  4. Torsten sagt
    29. September 2020 auf 10:16

    Ok. Habe es jetzt hinbekommen. I2c kann ich über den Befehl

    wire.begin (0, 2); // gpio 0 und gpio 2 in diesem fall

    ändern.

    Dachte jetzt noch an den deep sleep Modus. Wo kann ich den Befehl am sinnvollsten einsetzen?

    Antworten

Hinterlassen Sie einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Neueste Beiträge

  • openepaperlink – HomeAssistant Code Schnipsel
  • DREAME L10s Ultra Gen 2: Reinigungsmittelbehälter wurde nicht erkannt
  • SSL / TLS Zertifikat eines Mailservers testen
  • Installation von Windows 11 auf einem Lenovo ThinkPad L13 Yoga G3 
  • Lösung: OBSBOT Tiny Smart Remote 2 funktioniert am Mac nicht

Neueste Kommentare

  • Stefanie H. bei EAN13 Prüfziffer mit Excel berechnen
  • JDT bei Kostenloses DynDNS mit inwx und FritzBox
  • Stephan bei Kostenloses DynDNS mit inwx und FritzBox
  • slacc bei SAP Business One Jahreswechsel vorbereiten: Belegnummerierung anlegen
  • Wolfgang S. bei SAP Business One Jahreswechsel vorbereiten: Belegnummerierung anlegen

Archive

  • Dezember 2024
  • November 2024
  • Mai 2024
  • März 2024
  • Februar 2024
  • Oktober 2023
  • September 2023
  • Mai 2023
  • Februar 2023
  • Juni 2022
  • April 2022
  • Dezember 2021
  • November 2021
  • September 2021
  • Februar 2021
  • November 2020
  • August 2020
  • Mai 2020
  • August 2019
  • März 2018
  • Februar 2018
  • Januar 2018
  • Mai 2017
  • April 2017
  • April 2016
  • August 2015
  • November 2014
  • Oktober 2014
  • August 2014
  • Juni 2014
  • April 2014
  • März 2014
  • Februar 2014
  • Januar 2014
  • Dezember 2013
  • November 2013
  • Oktober 2013

Kategorien

  • Alexa
  • Allgemein
  • Android
  • Catcontent
  • checkmk
  • Excel
  • Exchange
  • Galaxy S5
  • Hyper-V
  • IFTTT
  • Impressionstechnik
  • Kali Linux 2.0
  • Linux
  • Lockpicking
  • Mac
  • Monitoring
  • OFFEN!
  • Office
  • Office365
  • Outlook
  • rad1o badge
  • Raspberry Pi
  • Remotedesktop
  • root
  • Samsung
  • SAP Business One
  • SEO
  • Server
  • Server 2008 R2
  • Server 2012r2
  • Server 2019
  • Terminalserver
  • VirtualBox
  • VoIP
  • Windows
  • Wordpress

Meta

  • Anmelden
  • Feed der Einträge
  • Kommentar-Feed
  • WordPress.org

Neueste Beiträge

  • openepaperlink – HomeAssistant Code Schnipsel
  • DREAME L10s Ultra Gen 2: Reinigungsmittelbehälter wurde nicht erkannt
  • SSL / TLS Zertifikat eines Mailservers testen
  • Installation von Windows 11 auf einem Lenovo ThinkPad L13 Yoga G3 
  • Lösung: OBSBOT Tiny Smart Remote 2 funktioniert am Mac nicht

Neueste Kommentare

  • Stefanie H. bei EAN13 Prüfziffer mit Excel berechnen
  • JDT bei Kostenloses DynDNS mit inwx und FritzBox
  • Stephan bei Kostenloses DynDNS mit inwx und FritzBox
  • slacc bei SAP Business One Jahreswechsel vorbereiten: Belegnummerierung anlegen
  • Wolfgang S. bei SAP Business One Jahreswechsel vorbereiten: Belegnummerierung anlegen

Archive

  • Dezember 2024
  • November 2024
  • Mai 2024
  • März 2024
  • Februar 2024
  • Oktober 2023
  • September 2023
  • Mai 2023
  • Februar 2023
  • Juni 2022
  • April 2022
  • Dezember 2021
  • November 2021
  • September 2021
  • Februar 2021
  • November 2020
  • August 2020
  • Mai 2020
  • August 2019
  • März 2018
  • Februar 2018
  • Januar 2018
  • Mai 2017
  • April 2017
  • April 2016
  • August 2015
  • November 2014
  • Oktober 2014
  • August 2014
  • Juni 2014
  • April 2014
  • März 2014
  • Februar 2014
  • Januar 2014
  • Dezember 2013
  • November 2013
  • Oktober 2013

Kategorien

  • Alexa
  • Allgemein
  • Android
  • Catcontent
  • checkmk
  • Excel
  • Exchange
  • Galaxy S5
  • Hyper-V
  • IFTTT
  • Impressionstechnik
  • Kali Linux 2.0
  • Linux
  • Lockpicking
  • Mac
  • Monitoring
  • OFFEN!
  • Office
  • Office365
  • Outlook
  • rad1o badge
  • Raspberry Pi
  • Remotedesktop
  • root
  • Samsung
  • SAP Business One
  • SEO
  • Server
  • Server 2008 R2
  • Server 2012r2
  • Server 2019
  • Terminalserver
  • VirtualBox
  • VoIP
  • Windows
  • Wordpress

Meta

  • Anmelden
  • Feed der Einträge
  • Kommentar-Feed
  • WordPress.org

CyberChimps WordPress Themes

© slacc