Erstellen einer webbasierten Wetterstation mit ESP32

Im laufenden Jahrhundert wird alles auf WiFi umgestellt. Es gibt viele Wetterstationen auf dem Markt, die über WLAN betrieben und in Privathaushalten verwendet werden können. Diese Wetterstationen sind mit dem Internet verbunden und enthalten einige Sensoren. Diese Stationen erfassen die Temperatur, Luftfeuchtigkeit oder den Druck und zeigen sie auf dem Bildschirm an, der bereits im Gadget vorhanden ist, und senden die Daten über WLAN an eine mobile Anwendung. Diese Sensoren sind sehr teuer, daher können sich die meisten Menschen sie nicht leisten. Wir werden eine Wetterstation zu Hause bauen, die auch effizient und wirtschaftlich ist. Es ist sehr einfach, es zu Hause zu machen, indem Komponenten verwendet werden, die auf dem Markt leicht verfügbar sind.

In diesem Artikel werden wir eine Wetterstation mit dem erstellen ESP32 und BME280 Sensoren. Der Sensor erkennt den jeweiligen Parameter und sendet ihn über eine lokale WLAN-Verbindung an eine Webseite. Dazu schreiben wir Code und brennen ihn auf die Mikrocontroller-Karte.

Wie erstelle ich eine Wetterstation mit ESP32 und BME280?

Da wir jetzt die Zusammenfassung des Projekts kennen, lassen Sie uns fortfahren und weitere Informationen sammeln, um mit der Arbeit an dem Projekt zu beginnen.

Schritt 1: Sammeln der Komponenten

Der beste Ansatz, um ein Projekt zu starten, besteht darin, eine Liste der Komponenten zu erstellen und diese Komponenten kurz zu untersuchen, da niemand nur wegen einer fehlenden Komponente in der Mitte eines Projekts bleiben möchte. Eine Liste der Komponenten, die wir in diesem Projekt verwenden werden, finden Sie unten:

Schritt 2: Erstellen einer Tabelle in HTML

Lassen Sie uns nun sehen, wie eine Tabelle in HyperText Markup Language (HTML) erstellt und im Webbrowser angezeigt wird. HTML ist eine Sprache, mit der die Struktur von Webseiten erstellt wird. Es besteht aus einer Reihe von Elementen, die dem Browser mitteilen, wie die Elemente auf der Seite angezeigt werden sollen. Diese Elemente werden durch Tags dargestellt. Der Browser liest den in HTML geschriebenen Code und rendert den Inhalt auf dem Bildschirm, ohne die Tags anzuzeigen.

Um eine Tabelle im Browser zu erstellen, verwenden wir die

Etikett. Um Zeilen darin zu erstellen, werden wir verwenden Tags, was Tabellenzeile bedeutet. Um die Überschriften in der Tabelle anzugeben, werden wir verwenden Tag, was Tabellenüberschrift bedeutet. Um jede Zelle in der Tabelle zu definieren, werden wir verwenden Etikett. Den Code zum Erstellen der erforderlichen Tabelle finden Sie im folgenden Code.

Menge, deren Wert wir messen. 
MESSUNG WERT
Temp. Celsius --- * C.
Temp. Fahrenheit --- * F.
Druck --- hPa
Ca. Höhe --- Meter
Feuchtigkeit --- %

Im obigen Code werden zwei Zellen der ersten Spalten als Messung und Wert bezeichnet. Darunter werden sechs Zeilen erstellt, die jeweils für die unterschiedliche zu messende Größe bestimmt sind. Schreiben Sie diesen Code auf den Notizblock. Klick auf das Datei Menü in der oberen oberen linken Ecke des Bildschirms. Klicke auf Speichern als und benennen Sie Ihre Datei mit der Erweiterung .html.Ändern Sie nun den Dateityp in ALLE.Klicken Sie auf die Schaltfläche Speichern, um die Datei zu speichern. In dem Ordner, in dem sich diese Textdatei befindet, wird ein Browser erstellt. Klicken Sie auf diese Datei, um Ihre Tabelle im Browser anzuzeigen.

Wenn Sie die Datei im Browser öffnen, sieht sie wie folgt aus. In dieser Tabelle sind die Stile nicht enthalten. Wenn Sie einen Rahmen hinzufügen möchten, um eine stilvolle Tabelle Ihrer Wahl zu erstellen, müssen Sie CSS hinzufügen. Klicken Sie hier, um CSS hinzuzufügen.

Schritt 3: Zusammenbau der Komponenten

Lassen Sie uns nun weitermachen und den Sensor an das anschließen ESP32 Tafel. Bevor Sie diese Verbindungen herstellen, sollten Sie die Konfiguration der Stifte des Sensors kurz untersuchen.

EIN BME280 Der Sensor hat sieben Stifte. Ein Pin ist der Vcc-Pin, der zum Einschalten des Sensors verwendet wird, und der zweite Pin ist ein Erdungsstift. Die Eingangsversorgung des Vcc-Pins muss im Bereich von 1,8 V bis 3,6 V liegen. Das i2C Die serielle Datenübertragung (bidirektional) kann durch die SDA und SCL Stift. SCK wird für die Taktleitung im Übertragungsprozess verwendet. SDO Der Pin wird für die Daten verwendet, die aus dem BME280-Sensor kommen. SDI Der Pin wird für die Daten verwendet, die vom BME280-Sensor ausgehen. Der ausgewählte Aktiv-Niedrig-Chip ist der CS Stift.

Das Protokoll, das wir in diesem Projekt verwenden werden, ist die 12C-Kommunikation mit dem BME280-Sensormodul. Zu diesem Zweck werden wir die verwenden SDA und SCL Stift des Sensors. Der Verbindungsstift 21 des ESP32 ist mit dem SDA-Stift des Sensors verbunden, und der Stift 22 des ESP32 ist mit der SCL des Sensors verbunden.

Wenn alle Verbindungen hergestellt sind, schließen Sie die Mikrocontroller-Karte an den Computer an und brennen Sie den Code darin. Drücken Sie die Enable-Taste, um es zu starten. Die Verbindungen des Diagramms sehen folgendermaßen aus:

Schritt 4: Erste Schritte mit ESP32

Wenn Sie zuvor noch nicht an der Arduino IDE gearbeitet haben, machen Sie sich keine Sorgen, da unten eine schrittweise Anleitung zum Einrichten der Arduino IDE aufgeführt ist.

  1. Laden Sie die neueste Version von Arduino IDE von Arduino herunter.
  2. Schließen Sie Ihr Arduino-Board an den PC an und öffnen Sie die Systemsteuerung. Klicke auf Hardware und Sound.Jetzt offen Geräte und Drucker und suchen Sie den Port, an den Ihre Karte angeschlossen ist. In meinem Fall ist es COM14aber es ist bei verschiedenen Computern unterschiedlich.
  3. Klicken Sie auf Datei und dann auf Einstellungen. Kopieren Sie den folgenden Link in die Zusätzliche Board Manager-URL. „https://dl.espressif.com/dl/package_esp32_index.json ”
  4. Um ESP32 mit Arduino IDE zu verwenden, müssen wir spezielle Bibliotheken importieren, mit denen wir Code auf ESP32 brennen und verwenden können. Diese beiden Bibliotheken sind unter dem unten angegebenen Link angehängt. Um die Bibliothek einzuschließen, gehe zu Sketch > Bibliothek einschließen > ZIP-Bibliothek hinzufügen. Ein Feld wird angezeigt. Suchen Sie den ZIP-Ordner auf Ihrem Computer und klicken Sie auf OK, um die Ordner einzuschließen. Diese Bibliothek ist zusammen mit dem Code im folgenden Link angehängt.
  5. Nun gehe Skizze> Bibliothek einschließen> Bibliotheken verwalten.
  6. Ein Menü wird geöffnet. Geben Sie in die Suchleiste ein adafruit bme280. Dieses Paket wird zur Integration verwendet das BME280 Sensor und Messwerte daraus entnehmen. Das Paket wird auf dem Bildschirm angezeigt. Installieren Sie das Paket, indem Sie auf die Schaltfläche Installieren klicken.
  7. Suchen Sie im selben Bibliotheksverwalter nach Adafruit Unified Sensor.Diese Bibliothek hilft auch bei der Verwendung des BME280-Sensors mit ESP32. Im Feld wird eine Liste angezeigt. Gehen Sie zum Ende der Liste und wählen Sie die Bibliothek aus, die im Bild unten gezeigt wird. Klicken Sie auf die Schaltfläche Installieren, um die Bibliothek zu installieren.
  8. Ein Menü wird geöffnet. Geben Sie in die Suchleiste ein Arduino JSON.Eine Liste wird angezeigt. Installieren Arduino JSON von Benoit Blanchon.
  9. Klicken Sie nun auf die Werkzeuge.Ein Dropdown-Menü wird angezeigt. Stellen Sie die Platine auf ESP Dev Module.
  10. Klicken Sie erneut auf das Menü Tool und stellen Sie den Port ein, den Sie zuvor in der Systemsteuerung beobachtet haben.
  11. Laden Sie nun den im obigen Link angehängten Code hoch und klicken Sie auf die Schaltfläche zum Hochladen, um den Code auf dem ESP32-Mikrocontroller zu brennen.

Wenn Sie nun den Code hochladen, kann ein Fehler auftreten. Dies ist der häufigste Fehler, der auftreten kann, wenn Sie eine neue Version der Arduino IDE und des Arduino JSON verwenden. Im Folgenden sind die Fehler aufgeführt, die möglicherweise auf dem Bildschirm angezeigt werden.

In der Datei aus C: \ Benutzer \ Pro \ Dokumente \ Arduino \ Bibliotheken \ IOXhop_FirebaseESP32-master / IOXhop_FirebaseESP32.h: 8: 0 aus C: \ Benutzer \ Pro \ Desktop \ smartHome \ code \ code.ino: 2: C. : \ Benutzer \ Pro \ Dokumente \ Arduino \ Bibliotheken \ IOXhop_FirebaseESP32-master / IOXhop_FirebaseStream.h: 14: 11: Fehler: StaticJsonBuffer ist eine Klasse von ArduinoJson 5. Weitere Informationen zum Aktualisieren Ihres Programms auf ArduinoJson finden Sie unter arduinojson.org/upgrade Version 6 StaticJsonBuffer jsonBuffer; ^ In der Datei aus C: \ Benutzer \ Pro \ Dokumente \ Arduino \ Bibliotheken \ IOXhop_FirebaseESP32-master / IOXhop_FirebaseESP32.h: 8: 0 aus C: \ Benutzer \ Pro \ Desktop \ smartHome \ code \ code.ino: 2: C: \ Benutzer \ Pro \ Dokumente \ Arduino \ Bibliotheken \ IOXhop_FirebaseESP32-master / IOXhop_FirebaseStream.h: 65: 11: Fehler: StaticJsonBuffer ist eine Klasse von ArduinoJson 5. Weitere Informationen zum Aktualisieren Ihres Programms finden Sie unter arduinojson.org/upgrade ArduinoJson Version 6 gibt StaticJsonBuffer zurück() .parseObject (_data); ^ Für "WiFi.h" wurden mehrere Bibliotheken gefunden. Verwendet: C: \ Benutzer \ Pro \ AppData \ Local \ Arduino15 \ Pakete \ esp32 \ Hardware \ esp32 \ 1.0.2 \ Bibliotheken \ WiFi Nicht verwendet: C: \ Programme ( x86) \ Arduino \ library \ WiFi Verwenden von Library WiFi in Version 1.0 im Ordner: C: \ Users \ Pro \ AppData \ Local \ Arduino15 \ packages \ esp32 \ hardware \ esp32 \ 1.0.2 \ library \ WiFi Verwenden der Bibliothek IOXhop_FirebaseESP32-master im Ordner: C: \ Benutzer \ Pro \ Dokumente \ Arduino \ Bibliotheken \ IOXhop_FirebaseESP32-master (Legacy) Verwenden der Bibliothek HTTPClient in Version 1.2 im Ordner: C: \ Benutzer \ Pro \ AppData \ Local \ Arduino15 \ packages \ esp32 \ hardware \ esp32 \ 1.0.2 \ Bibliotheken \ HTTPClient Verwenden der Bibliothek WiFiClientSecure in Version 1.0 im Ordner: C: \ Benutzer \ Pro \ AppData \ Local \ Arduino15 \ Pakete \ esp32 \ Hardware \ esp32 \ 1.0.2 \ Bibliotheken \ WiFiClientSecure Verwenden der Bibliothek ArduinoJson unter Version 6.12.0 im Ordner: C: \ Benutzer \ Pro \ Dokumente \ Arduino \ Bibliotheken \ ArduinoJson-Exit-Status 1 Fehler beim Kompilieren für das Board ESP32 Dev Module.

Es gibt keinen Grund zur Sorge, da wir diese Fehler durch Befolgen einiger einfacher Schritte beseitigen können. Diese Fehler treten auf, weil die neue Version von Arduino JSON stattdessen eine andere Klasse hat StaticJsonBuffer.Dies ist die Klasse von JSON 5. Wir können diesen Fehler also einfach beseitigen, indem wir die Version von Arduino JSON unserer Arduino IDE herabstufen. Einfach gehen zu Skizze> Bibliothek einschließen> Bibliotheken verwalten.Suchen nachArduino JSON von Benoit Blanchondass Sie zuvor installiert haben. Deinstallieren Sie es zuerst und setzen Sie dann seine Version auf 5.13.5. Nachdem wir eine alte Version von Arduino JSON festgelegt haben, installieren Sie sie erneut und kompilieren Sie den Code neu. Dieses Mal wird Ihr Code erfolgreich kompiliert.

Klicken Sie hier, um den Code herunterzuladen.

Schritt 5: Den Code verstehen

Der Code dieses Projekts ist sehr einfach und gut kommentiert. Trotzdem wird der Code unten kurz erklärt.

1. Zu Beginn sind Bibliotheken enthalten, damit die ESP32-Karte zu Hause oder im Büro mit der lokalen WLAN-Verbindung verbunden werden kann. Die Bibliotheken, die dem ESP32 helfen, den BME280-Sensor in ihn zu integrieren, sind ebenfalls enthalten. Anschließend werden der Name und das Kennwort Ihrer lokalen WLAN-Verbindung definiert, damit der ESP32 mit dem WLAN verbunden werden kann.

// Lade die Wi-Fi Bibliothek #include             // libray um wifi #include zu benutzen  #einschließen  // Bibliothek zur Verwendung des BME280-Sensors #include  // Bibliothek zur Verwendung des BME280-Sensors

2. Danach werden einige Zeilen kommentiert. Diese Leitungen werden verwendet, wenn Sie das SPI-Protokoll für die Kommunikation des Sensors verwenden. Wir werden sie kommentieren, da wir das 12C-Protokoll verwenden.

/*#einschließen  #define BME_SCK 18 #define BME_MISO 19 #define BME_MOSI 23 #define BME_CS 5 * /

3. Eine Variable wird erstellt, um den Wert des Meeresspiegeldrucks in Hektopascal zu speichern. 1 Hektopascal entspricht einer Millibar. Die Höhe für den gegebenen Druck wird geschätzt und diese Variable vergleicht sie dann mit dem Meeresspiegeldruck. Danach, bmeist ein Objekt, das zur weiteren Verwendung erstellt wird.

#define SEALEVELPRESSURE_HPA (1013.25) // Variable zum Vergleich des gefundenen Drucks mit dem Meeresspiegel Adafruit_BME280 bme; // I2C

4. Danach ist der Name Ihrer WLAN-Verbindung und deren Stromversorgung im Code enthalten, damit der ESP32 mit dem WLAN verbunden werden kann. Danach wird die Portnummer für die Kommunikation mit dem Webserver festgelegt und eine Variable zum Speichern der HTTP-Anforderung deklariert.

const char * ssid = "IHRE SSID"; // Name Ihrer lokalen WLAN-Verbindung const char * password = "IHR PASSWORT"; // Passwort Ihrer lokalen WLAN-Verbindung WiFiServer Server (80); // Setze die Portnummer des Webservers auf 80 String header; // Variable zum Speichern der HTTP-Anfrage

5. void setup ()ist eine Funktion, in der wir die INPUT- oder OUTPUT-Pins initialisieren. Diese Funktion stellt auch die Baudrate mithilfe von ein Serial.begin () Befehl. Die Baudrate ist die Kommunikationsgeschwindigkeit des Mikrocontrollers. Hier werden einige Codezeilen hinzugefügt, um den ESP32 mit der lokalen WLAN-Verbindung zu verbinden. Die Karte versucht, eine Verbindung zur lokalen WLAN-Verbindung herzustellen, und druckt "Verbindung." im seriellen Monitor. Es wird gedruckt "In Verbindung gebracht" wenn die Verbindung hergestellt ist. Um dies zu überwachen, ist es besser, den seriellen Monitor zu öffnen und dort seinen Zustand zu überprüfen.

void setup () {Serial.begin (115200); // Einstellen der Baudrate bool status; // Standardeinstellungen // (Sie können auch ein Wire-Bibliotheksobjekt wie & Wire2 übergeben) // status = bme.begin (); if (! bme.begin (0x76)) {// prüft, ob der Sensor für Serial.println bestimmt ist ("Konnte keinen gültigen BME280-Sensor finden, Verdrahtung prüfen!"); während (1); } // Mit SSID und Passwort eine Verbindung zum Wi-Fi-Netzwerk herstellen Serial.print ("Connecting to"); Serial.println (ssid); WiFi.begin (ssid, Passwort); while (WiFi.status ()! = WL_CONNECTED) {delay (500); Serial.print ("."); } // Lokale IP-Adresse drucken und Webserver starten Serial.println (""); Serial.println ("WiFi verbunden"); Serial.println ("IP-Adresse:"); // IP-Adresse auf dem seriellen Monitor drucken Serial.println (WiFi.localIP ()); server.begin (); }}

6. void loop ()ist eine Funktion, die wiederholt in einer Schleife ausgeführt wird. In dieser Schleife schreiben wir einen Code, der der Mikrocontroller-Karte mitteilt, welche Aufgaben wie ausgeführt werden sollen. In diesem Code wird zunächst eine Verbindung mit einem neuen Client hergestellt. Wenn die Verbindung hergestellt ist, wird die Webseite im Browser angezeigt. Dann wird die Tabelle erstellt und die Sensorwerte werden in diese Tabelle eingetragen. Wenn die Tabelle gefüllt ist, wird die Verbindung geschlossen.

void loop () {WiFiClient client = server.available (); // Auf eingehende Clients warten if (client) {// Wenn ein neuer Client eine Verbindung herstellt, Serial.println ("New Client."); // drucke eine Nachricht in der seriellen Schnittstelle aus String currentLine = ""; // Erstellen Sie einen String, um eingehende Daten vom Client zu speichern, während (client.connected ()) {// Schleife, während der Client verbunden ist, wenn (client.available ()) {// wenn Bytes vom Client gelesen werden müssen, char c = client.read (); // ein Byte lesen, dann Serial.write (c); // drucke den seriellen Monitor-Header aus + = c; if (c == '\ n') {// Wenn das Byte ein Zeilenumbruchzeichen ist // Wenn die aktuelle Zeile leer ist, erhalten Sie zwei Zeilenumbruchzeichen in einer Zeile. // das ist das Ende der Client-HTTP-Anfrage, also sende eine Antwort: if (currentLine.length () == 0) {// HTTP-Header beginnen immer mit einem Antwortcode (zB HTTP / 1.1 200 OK) // und a Inhaltstyp, damit der Client weiß, was kommt, dann eine leere Zeile: client.println ("HTTP / 1.1 200 OK"); client.println ("Inhaltstyp: text / html"); client.println ("Verbindung: schließen"); client.println (); // Anzeige der HTML-Webseite client.println (""); client.println (""); client.println (""); // CSS zum Formatieren der Tabelle client.println ("

ESP32 mit BME280

"); client.println (""); client.println (""); client.println (""); client.println (""); client.println (""); client.println (""); client.println ("
MESSUNGWERT
Temp. Celsius"); client.println (bme.readTemperature ()); client.println (" * C.
Temp. Fahrenheit"); client.println (1.8 * bme.readTemperature () + 32); client.println (" * F.
Druck"); client.println (bme.readPressure () / 100.0F); client.println (" hPa
Ca. Höhe"); client.println (bme.readAltitude (SEALEVELPRESSURE_HPA)); client.println (" m
Feuchtigkeit"); client.println (bme.readHumidity ()); client.println ("%
"); // Die HTTP-Antwort endet mit einer weiteren Leerzeile client.println (); // Brechen Sie aus der while-Schleife aus;} else {// Wenn Sie eine neue Zeile haben, löschen Sie currentLine currentLine =" ";}} else if (c! = '\ r') {// Wenn Sie etwas anderes als ein Wagenrücklaufzeichen haben, currentLine + = c; // fügen Sie es am Ende der currentLine hinzu}}} // Löschen Sie den Header der Header-Variablen = ""; // Verbindung schließen client.stop (); Serial.println ("Client getrennt."); Serial.println ("");}}

Dies war das gesamte Verfahren zum Erstellen einer Wetterstation mit ESP32, nachdem Sie die Hardwarekomponenten vom Markt gesammelt und Ihre eigenen erstellt haben. Viel Glück!

Facebook Twitter Google Plus Pinterest