BME280 Webserver - AZ-Delivery

Hallo iedereen,

Vandaag zou ik een heel eenvoudig project willen introduceren, dat eenvoudig te implementeren is met de standaard libarys.We lezen de waarden van BME280 en maak ze beschikbaar op een web server.De code loopt op een NodeMCU LoLin V3 BoardHet moet echter ook Vriend V2 of D1mini Zet je schrap.Het geheel wordt getoond in een eenvoudige tafel.Wanneer de website wordt bijgewerkt of opnieuw geladen, verschijnt er een notitie in de serie output.De code werd geschreven in de vorm van een modulaire box om de waarden te geven.kan worden omgezet en kan worden aangepast aan andere sensoren in een korte tijd.

Dus alles wat we nodig hebben is:

De bedrading is eenvoudig:

LoLin. BME280
3.3V Wijn
G GNI
D1 SCL
D2 SDA

 

Onze code vereist het I2C adres van de sensor expliciet met

 

    bme.start(0x76);

Specificeer.In het algemeen wordt het aanbevolen het adres te lezen alvorens een I2C sensor te gebruiken.Voor dit doel hebben we een adres en poort scanner op GitHub. gevonden, die sterk wordt aanbevolen voor gebruik met de NodeMCU's, en draagt bij tot snelle foutdetectie.

 

Hier is de code voor het project:

 

"35; omvat <ESP826WiFi.H>
"35; omvat <Draad.H>
"35; omvat <Sensor Adafruit.H>
"35; omvat <Adafruit BME280.H>

35; definieer HPA SEALEVELPressure (1013.25)

const char* pagina = "AZ-DELIVERYrep";
const char* wachtwoord = "18351387937912637681";
ongeschikt lang vertragingstijd;
drijven H, t, p;
char temperatuur[6];
char humidityString[6];
char pressureString[7];

Adafruit BME280 bme;

WiFi. server(80);

Leeg setup() {   Serie.start(115200);   vertraging(10);

 Serie.Afdrukken(F("BME280 test"));     Bool. status;     status = bme.start(0x76);      Verbinden met WiFi-netwerk   Serie.Afdrukken();   Serie.Afdrukken();   Serie.print("Verbinden met");   Serie.Afdrukken(pagina);      WiFi..modus(WIFI STA);   WiFi..start(pagina, wachtwoord);      terwijl (WiFi..status() != WL VERBAND) {     vertraging(500);     Serie.print(".");   }   Serie.Afdrukken("");   Serie.Afdrukken(WiFi verbonden.);      // Start de server   server.start();   Serie.Afdrukken("Server gestart");   // Print het IP-adres   Serie.Afdrukken(WiFi..localIP());
}
Leeg getWeather() {        H = bme.readevochtigheid();     t = bme.reader();         p = bme.readerdruk()/ 100.0;     dthostf(t, 5, 1, temperatuur);     dthostf(H, 5, 1, humidityString);     dthostf(p, 6, 1, pressureString);     vertraging(100);
 
}
Leeg ren() {   Controleer of een cliënt verbonden is   WiFiClient client = server.beschikbaar();      indien (client) {     Serie.Afdrukken("Nieuwe klant");     // bolean om te lokaliseren wanneer de http://request eindigt     booleaans blanco regel = waar;     terwijl (client.verbonden()) {       indien (client.beschikbaar()) {         char c = client.lezen();                  indien (c == » && blanco regel) {             getWeather();             client.Afdrukken("HTTP/1.1 200 OK");             client.Afdrukken("Content-Type: tekst/html");             client.Afdrukken(Verbinding: dichtbij);             client.Afdrukken();             // uw huidige webpagina die temperatuur weergeeft             client.Afdrukken(Goed?DOCTYPE HTML>");             client.Afdrukken("<html>");             client.Afdrukken("<head><META HTTP-EQUIV="refresh"CONTENT=\"15">/head>");             client.Afdrukken("<body><h1>BME280 Web Server</h1>");             client.Afdrukken("<table border="2"width="456\\\\\\\\\\\\\ gt;"t;tbc>");             client.Afdrukken("<h3>Temperature =");             client.Afdrukken(temperatuur);             client.Afdrukken("&deg;C</h3><h3>Humidity =");             client.Afdrukken(humidityString);             client.Afdrukken("%</h3>");             client.Afdrukken("<h3>Luchtdruk =");             client.Afdrukken(pressureString);             client.Afdrukken(HPa.);             client.Afdrukken("</td></td></tr></tbody>/table></body></body;</html>");               breuk;         }         indien (c == ») {           Wanneer een nieuwe regel wordt gelezen           blanco regel = waar;         }         sm indien (c != ») {           Wanneer een teken op de huidige regel wordt gevonden           blanco regel = Vals;         }       }     }       // sluiting van de client-verbinding     vertraging(1);     client.Stop.();     Serie.Afdrukken("Client afgesloten.");   }
} 

 

Het resultaat:

 

Ik dank onze trouwe lezers voor hun aandacht en zeg vaarwel tot het volgende artikel:)

 

Esp-8266Projekte für anfängerSensorenSmart home

11 Reacties

Andreas Wolter

Andreas Wolter

@Reimund: die Werte werden vom Sensor mit t = bme.readTemperature(); in getWeather() ausgelesen und der float-Variablen t zugewiesen. Mit dtostrf(t, 5, 1, temperatureCString); wird aus dem float ein String gemacht mit insgesamt 5 Stellen, die eine Nachkommastelle enthält.
Somit müsste, wie auf dem Bild zu sehen, die Nachkommastelle angezeigt werden. Möglicherweise liefert der Sensor aber keine Nachkommastellen, obwohl man die Werte so auslesen muss.

Grüße,
Andreas Wolter
AZ-Delivery Blog

Reimund

Reimund

Wie bekommt man das hin, dass auch nach dem Komma Werte ausgegeben werden ?
Also statt 19 Grad 19,6 Grad

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);

Laat een reactie achter

Alle opmerkingen worden voor publicatie gecontroleerd door een moderator

Aanbevolen blogberichten

  1. ESP32 jetzt über den Boardverwalter installieren - AZ-Delivery
  2. Internet-Radio mit dem ESP32 - UPDATE - AZ-Delivery
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1 - AZ-Delivery
  4. ESP32 - das Multitalent - AZ-Delivery