Serveur Web BME280

Salut,

aujourd'hui, je voudrais vous présenter un projet assez simple, qui est facile à mettre en œuvre avec les Libarys standard. Nous lisons les valeurs d'un BME280 et les mettre à disposition sur un serveur web. Le Code fonctionne avec nous sur un NodeMCU LoLin V3 Board, cependant, il devrait également être basé sur un Amica V2 ou D1mini Conseil en cours d'exécution. Le tout est affiché dans un tableau simple. Si la page web est mise à jour ou rechargée, un message apparaît dans la sortie série. Le Code a été écrit en format modulaire pour pouvoir éventuellement convertir les valeurs et une adaptation aux autres capteurs est possible dans un court laps de temps.

Nous avons donc juste besoin:

Le Câblage est simple:

 LoLin BME280
3.3 V VIN
G GND
D1 SCL
D2 SDA

 

Pour notre Code, il est nécessaire de spécifier explicitement L'Adresse I2C du capteur avec

 

    bme.commencer(0x76);

à indiquer. En général, il est recommandé de lire l'Adresse avant D'utiliser un capteur I2C. A cet effet, nous avons un scanner D'adresses et de ports sur GitHub trouvé qui est très recommandé pour une utilisation avec les NodeMCUs et contribue à la détection rapide des erreurs.

 

Voici le Code du projet:

 

# inclure <ESP8266WiFi.h>
# inclure <Fil.h>
# inclure <Adafruit_Sensor.h>
# inclure <Adafruit_BME280.h>

# define SEALEVELPRESSURE_HPA (1013.25)

const char* ssid = "AZ-DELIVERYrep";
const char* mot de passe = "18351387937912637681";
unsigned long délai;
float h, t, p;
char temperatureCString[6];
char humidityString[6];
char pressureString[7];

Adafruit_BME280 bme;

Serveur WiFiServer serveur(80);

void configuration() {   Série.commencer(115200);   délai(10);

 Série.println(F("BME280 test"));     bool statut;     statut = bme.commencer(0x76);      // Se connecter au réseau WiFi   Série.println();   Série.println();   Série.imprimer("Connexion à ");   Série.println(ssid);      WiFi.mode(WIFI_STA);   WiFi.commencer(ssid, mot de passe);      while (WiFi.statut() != WL_CONNECTED) {     délai(500);     Série.imprimer(".");   }   Série.println("");   Série.println("WiFi connecté");      // Démarrer le serveur   serveur.commencer();   Série.println("Serveur started");   // Imprimer L'adresse IP   Série.println(WiFi.localIP());
}
void accueil() {        h = bme.readHumidity();     t = bme.readTemperature();         p = bme.readPressure()/ 100.0;     dtostrf(t, 5, 1, temperatureCString);     dtostrf(h, 5, 1, humidityString);     dtostrf(p, 6, 1, pressureString);     délai(100);
 
}
void boucle() {   // Check if a client has connected   WiFiClient client = serveur.available();      if (client) {     Série.println("Nouveau client");     // bolean to locate when the http request ends     booléen blank_line = true;     while (client.connecté()) {       if (client.available()) {         char c = client.lire();                  if (c == '\n' && blank_line) {             accueil();             client.println("HTTP / 1.1 200 OK");             client.println("Type de contenu: texte / html");             client.println("Connection: close");             client.println();             // your actual web page that displays temperature             client.println("<!DOCTYPE HTML & gt;");             client.println("<html & gt;");             client.println("<head><META HTTP-EQUIV=\" refresh\"CONTENT=\"15\" > & lt;/head & gt;");             client.println("<body> & lt;h1 & gt; BME280 Web Server< / h1 & gt;");             client.println("<table border=\" 2\"width=\" 456\"cellpadding=\" 10 \ " & gt; & lt;tbody & gt; & lt;tr & gt; & lt; td & gt;");             client.println("<h3 & gt;température = ");             client.println(temperatureCString);             client.println("&deg; C</h3><h3 & gt; humidité = ");             client.println(humidityString);             client.println("%</h3 & gt;");             client.println("<h3 & gt;pression barométrique = ");             client.println(pressureString);             client.println("hPa");             client.println("</h3> & lt;/td & gt; & lt; / tr & gt; & lt;/tbody & gt; & lt;/table & gt; & lt;/body & gt; & lt;/html & gt;");               pause;         }         if (c == '\n') {           // when starts reading a new line           blank_line = true;         }         autre if (c != '\r') {           // when finds a character on the current line           blank_line = false;         }       }     }       // closing the client connection     délai(1);     client.stop();     Série.println("Client déconnecté.");   }
} 

 

Le Résultat:

 

Je remercie nos fidèles Lecteurs pour l'Attention et dis au revoir, jusqu'au prochain Article :)

 

Esp-8266Projets pour les débutantsCapteursMaison intelligente

9 commentaires

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

Laisser un commentaire

Tous les commentaires sont modérés avant d'être publiés

Messages de blogs recommandés

  1. Installez maintenant ESP32 via l'administrateur de la carte
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA-Over the Air-ESP Programmation par WiFi