BME280 Web server

Hello together,

today I want to tell you a very simple project to imagine, what with the standard libarys easy to implement is. We read the values of a BME280 out and put this on a web server. The Code is running on a NodeMCU LoLin V3 Board, he should, however, also an Amica V2 or D1mini Board run. The whole thing is displayed in a simple table. Is the website or re-loaded a note in the serial output appears to be updated. The Code was written in modular format, to the values, if necessary, conversion and adaptation to other Sensors in a short period of time is possible.

So we need only:

The cabling is simple:

LoLin BME280
3.3 V VIN
G : GND
D1 SCL
D2 SDA

 

For our Code, it is necessary to use the I2C address of the sensor explicitly with

 

    bme.begin(0x76);

specify. Generally, it is recommended to use a I2C sensor address to read. To this purpose we have an address and a port scanner on GitHub found, which is for use with the NodeMCUs law is recommended, and for the fast Troubleshooting helps.

 

Here is the Code for the project:

 

#include <ESP8266WiFi.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

#define SEALEVELPRESSURE_HPA (1013.25)

const char* ssid = "AZ-DELIVERYrep";
const char* password, = "18351387937912637681";
unsigned long delay time;
float h, t, p;
char temperature CString[6];
char humidity string[6];
char pressure string[7];

Adafruit_BME280 bme;

wifi server server(80);

void setup() {   Serial.begin(115200);   delay(10);

 Serial.println(F("BME280 test"));     bool status;     status = bme.begin(0x76);      // Connect to WiFi network   Serial.. println();   Serial.. println();   to Serial.print("Connecting to ");   Serial.println(ssid);      WiFi.mode(WIFI_STA);   WiFi.begin(ssid, password);      while (WiFi.status() != WL_CONNECTED) {     delay(500);     Serial.print(".");   }   Serial.print("");   Serial.println("WiFi connected");      // Start the server   server.begin();   Serial.println("Server started");   // Print the IP address   Serial.. println(WiFi.localIP());
}
void getWeather() {        h = bme.read humidity();     t = bme.read temperature();         p = bme.read pressure()/ 100.0;     dtostrf(t, 5, 1, temperature CString);     dtostrf(h, 5, 1, humidity string);     dtostrf(p, 6, 1, pressure string);     delay(100);
 
}
void loop() {   // Check if a client has connected   wifi client client = server.available();      if (client) {     Serial.println("New client",);     // bolean to locate when the http request ends,     boolean blank_line = true;     while (client.connected()) {       if (client is.available()) {         char c = client.read();                  if (c is == '\n' && blank_line) {             getWeather();             client.println("HTTP/1.1 200 OK");             client.. println("Content-Type: text/html");             client.. println("Connection: close");             client.. println();             // your actual web page that displays temperature             client.println("<!DOCTYPE HTML>");             client.. println("<html>");             client.. println("<head><META HTTP-EQUIV=\"refresh\" CONTENT=\"15\"></head>");             client.. println("<body><h1>BME280 Web Server</h1>");             client.. println("<table border=\"2\" width=\"456\" cellpadding=\"10\"><tbody><tr><td>");             client.. println("<h3>temperature = ");             client.. println(temperature CString);             client -.println("&deg;C</h3><h3>humidity = ");             client.. println(humidity string);             client.println("%</h3>");             client.. println("<h3>barometric pressure = ");             client.. println(pressure string);             client.println("hPa");             client.. println("</h3></td></tr></tbody></table></body></html>");               break;         }         if (c in == '\n') {           // when start reading a new line           blank_line = true;         }         else if (c is != '\r') {           // when finds a character on the current line           blank_line = false;         }       }     }       // closing the client connection     delay(1);     client.stop();     Serial.println("Client disconnected.");   }
} 

 

The result:

 

I would like to thank our loyal readers for the attention and say goodbye, until the next article :)

 

Esp-8266Projects for beginnersSensorsSmart home

9 comments

Jens

Jens

Erst mal Danke für diesen Beitrag, steige gerade in dieses Thema Webserver ein.
Was mir aber aufegafellen ist, die Werte für die Temperatur stimmen mit den Realen Temp. nicht überein.
Wenn ich die Adafruit_BME280 verwende, habe ich immer einen ca 4° höheren Temperaturwert als andere Themometer angeben. Es gibt auch einen anderen Sketch für den BME280 wo die Temperatur recht nah an die konventionellen Thermometer ran kommt. Ich habe drei BME280 und habe diese natürlich auch mal ausgetauscht und es werden bei allen BME280 bei Verwendung der Adafruit_BME280 ca 4° höhere Werte angezeigt.
Gibt es eine Möglichkeit bei Verwendung der Adafruit_BME280 die Temperatur um diesen Wert zu kompensieren?

Wolfgang

Wolfgang

Auch ich hatte nur “nan”/“0” Werte. Ich habe das Delay nach SerialBegin von 10 auf 100 gesetzt und gleich in der nächsten Zeile ein “bme.begin(0×76);” eingefügt. Anzeigen funktionieren. Jetzt gehts ans optimieren.

Wolfgang

Wolfgang

Sketch funktioniert wunderbar, Anpassungen sind leicht zu machen. DANKE für die tollen Ideen und Anleitungen.

Christian Hartung

Christian Hartung

Hallo!

Bei mit funktionierte es nach Langem probieren jetzt auch!

Adafruit_BME280.h editieren und bei:

#define BME280_ADDRESS (0×77)

0×77 mit 0×76 ersetzen.

Hoffe ich konnte manchen helfen hiermit!

Gruß
Christian

Sebastian

Sebastian

Hat hier irgendjemand mal die Lösung für das Problem? Vielleicht ja sogar, wer mag daran denken, AZ-Delivery selbst? Bei mir kommen auch nur 0 Werte raus.

Roger

Roger

Wire.begin(D3, D4);
Wire.setClock(10000);

habe ich hinzugefügt, ohne gibt es keine Verbindung. Habe aber auch diese Pins genommen.
Aber auch ich habe nur 0-Werte. Wo ist der Fehler?

Wolfgang

Wolfgang

Ich komme leider nicht weiter. Nach Aufruf der Adresse erhalte ich keine vernünftigen Werte. Es werden nur 0,00 für Temp, Druck, Feuchte angezeigt.
Wo ist der Haken an dem ich fest hänge ?
Es wäre super, wenn ich einen überarbeiteten CODE bekommen könnte.

Wolfgang Butenhoff

Wolfgang Butenhoff

Ein sehr interessanter und für mich nützlicher Artikel.
Ich kann leider nur nachbauen und bin auf gute und komplette Software angewiesen.
(Kleine Veränderungen im CODE wage ich das eine oder andere Mal schon)
Wo muss ich : Wire.begin(D3, D4); Wire.setClock(10000); einfügen ?
Warum D3 u. D4 ? …im Artikel werden D1+D2 verwendet.

Sven Schmidt

Sven Schmidt

Klasse Artikel,

bei mir musste ich noch folgendes hinzufügen:

Wire.begin(D3, D4);
Wire.setClock(10000);

Leave a comment

All comments are moderated before being published

Recommended blog posts

  1. Install ESP32 now from the board manager
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA - Over the Air - ESP programming via WLAN