Inhaltsverzeichnis:

Eine ESP-Now-Heimwetterstation - Gunook
Eine ESP-Now-Heimwetterstation - Gunook

Video: Eine ESP-Now-Heimwetterstation - Gunook

Video: Eine ESP-Now-Heimwetterstation - Gunook
Video: Немецкий язык, 8 урок. Eine, meine, deine. Отрицание kein / keine в немецком языке. Nicht или kein? 2024, November
Anonim
Eine ESP-Now-Heimwetterstation
Eine ESP-Now-Heimwetterstation

Ich wollte schon seit geraumer Zeit eine Wetterstation für zu Hause haben und eine, die jeder in der Familie leicht auf Temperatur und Luftfeuchtigkeit überprüfen kann. Neben der Überwachung der Außenbedingungen wollte ich auch bestimmte Räume im Haus und meine Garagenwerkstatt überwachen. Das würde uns wissen lassen, wann es Zeit ist, das Haus zu lüften oder den Luftentfeuchter zu betreiben (im Winter regnet es hier viel). Was ich erstellt habe, ist ein ESP-Now-basiertes Sensorsystem, das an einen lokalen Webserver berichtet, den jeder von seinem Computer oder Telefon aus überprüfen kann. Für das Telefon habe ich eine einfache Android-App geschrieben, um das noch einfacher zu machen.

Schritt 1: Designdetails

Designdetails
Designdetails

Ich wollte verschiedene Sensorstationen haben, die ich an verschiedenen Orten platzieren und sie an eine Hauptstation (oder einen Hub) zurückmelden kann, die die Informationen speichern würde. Nachdem ich verschiedene Ideen ausprobiert hatte, entschied ich mich für das ESP-Now-Protokoll von Espressif, da es eine schnelle Kommunikation direkt zwischen Geräten ermöglichte. Sie können hier ein wenig über ESP-Now lesen und dieses GitHub-Repo war ein großer Teil meiner Inspiration.

Das erste Bild zeigt den Aufbau des Systems. Jeder Sensor meldet seine Messwerte an ein Gateway-Gerät, das die Daten über eine fest verdrahtete serielle Verbindung an den Hauptserver weiterleitet. Der Grund dafür ist, dass das ESP-Now-Protokoll nicht gleichzeitig mit der WIFI-Verbindung aktiv sein kann. Damit ein Benutzer auf die Webseite zugreifen kann, müsste das WIFI ständig eingeschaltet sein, und dies macht es dann unmöglich, die ESP-Now-Kommunikation auf demselben Gerät zu verwenden. Während das Gateway-Gerät ein Espressif-basiertes Gerät (mit ESP-Now-Fähigkeit) sein muss, kann der Hauptserver ein beliebiges Gerät sein, das eine Webseite ausführen kann.

Einige Sensorstationen würden Batterien (oder solargeladene Batterien) entladen und andere würden einfach über das Stromnetz verfügen. Ich wollte jedoch, dass alle so wenig Strom wie möglich verbrauchen, und hier ist die für ESP8266- und ESP32-Geräte verfügbare "Deepsleep" -Funktion äußerst hilfreich. Die Sensorstationen wachen regelmäßig auf, nehmen Messungen vor und senden sie an das Gateway-Gerät und schlafen für eine vorprogrammierte Zeitdauer wieder ein. Ihre Wake-Periode von nur etwa 300 ms alle 5 Minuten (in meinem Fall) reduziert ihren Stromverbrauch erheblich.

Schritt 2: Sensoren

Sensoren
Sensoren
Sensoren
Sensoren

Zur Messung von Umweltparametern stehen verschiedene Sensoren zur Auswahl. Ich entschied mich, nur bei I2C-Kommunikationsfähigen Sensoren zu bleiben, da sie schnelle Messungen ermöglichten und auf allen Geräten funktionieren würden, die ich hatte. Anstatt direkt mit ICs zu arbeiten, suchte ich nach gebrauchsfertigen Modulen mit den gleichen Pinbelegungen, um meine Designs zu vereinfachen. Ich wollte zunächst nur Temperatur und Luftfeuchtigkeit messen und habe mich daher für ein SI7021-basiertes Modul entschieden. Später wollte ich einen Sensor, der auch Druck messen kann und beschloss, die BME280-basierten Sensormodule auszuprobieren. Für einige Locations wollte ich sogar die Lichtverhältnisse überwachen und dafür war das BH1750-Modul als separates Sensormodul ideal. Ich habe meine Sensormodule bei ebay gekauft und dies sind die Module, die ich erhalten habe:

  • BME280 (GY-BMP/E280), misst Temperatur, Luftfeuchtigkeit und Druck
  • SI7021 (GY-21), misst Temperatur und Luftfeuchtigkeit
  • BH1750 (GY-302), misst Licht

Es gibt zwei Arten von GY-BMP/E280 PCB-Modulen. Beide teilen sich die gleiche Pinbelegung für die Pins 1 bis 4. Ein Modul hat zwei zusätzliche Pins, CSB und SDO. Diese beiden Pins sind bei der 4-Pin-Version des Moduls vorbelegt. Der Pegel des SDO-Pins bestimmt die I2C-Adresse (Ground = Default 0x76, VCC = 0x77). Der CSB-Pin muss mit VCC verbunden sein, um die I2C-Schnittstelle auszuwählen. Ich bevorzuge das 4-Pin-Modul, da es für meinen Zweck gebrauchsfertig ist.

Im Allgemeinen sind diese Module sehr bequem zu verwenden, da sie bereits Pullup-Widerstände für die Kommunikationsleitungen installiert haben und alle mit 3,3 V betrieben werden, sodass sie mit ESP8266-basierten Boards kompatibel sind. Beachten Sie, dass die Pins dieser Sensor-ICs im Allgemeinen nicht 5V-tolerant sind. Wenn Sie sie also direkt mit etwas wie einem Arduino Uno verbinden, können sie dauerhaft beschädigt werden.

Schritt 3: Sensorstationen

Sensorstationen
Sensorstationen

Wie bereits erwähnt, wären die Sensorstationen alle Espressif-Geräte, die das ESP-Now-Kommunikationsprotokoll verwenden. Aus früheren Projekten und Experimenten standen mir mehrere verschiedene Geräte zur Verfügung, um meine ersten Tests durchzuführen und sie in das endgültige Design zu integrieren. Ich hatte folgende Geräte zur Hand:

  • zwei ESP-01 Module
  • zwei Wemos D1 Mini-Entwicklungsboards
  • ein Lolin ESP8266 Entwicklungsboard
  • eine serielle ESP12E-WIFI-Kit-Platine
  • ein GOOUUU ESP32-Board (ein 38-Pin-Entwicklungsboard)

Ich hatte auch ein Wemos D1 R2-Entwicklungsboard, aber es gab Probleme damit, dass es nicht aus dem Tiefschlaf aufwachen konnte und als Gateway-Gerät abstürzte und nicht richtig neu gestartet wurde. Ich habe es später repariert und es wurde Teil des Garagentoröffner-Projekts. Damit "Deepsleep" funktioniert, muss der RST-Pin des ESP8266 mit dem GPIO16-Pin verbunden werden, damit der Sleep-Timer das Gerät aufwecken kann. Idealerweise sollte diese Verbindung mit einer Schottky-Diode (Kathode zu GPIO16) erfolgen, damit der manuelle Reset über die USB-TLL-Verbindung während der Programmierung noch funktioniert. Ein Widerstand mit niedrigem Wert (300 Ohm) oder sogar eine direkte Drahtverbindung kann jedoch immer noch erfolgreich sein.

ESP-01-Module ermöglichen keinen einfachen Zugriff auf den GPIO16-Pin und man muss direkt an den IC löten. Dies ist keine einfache Aufgabe und ich würde dies nicht jedem empfehlen. Das serielle WIFI-Kit-Board ESP12E war ein kleines Novum und erforderte einige Änderungen, damit es für meinen Zweck nützlich war. Die am einfachsten zu verwendenden Boards waren die Wemos D1 Mini-Boards und das Lolin-Board. ESP32-Geräte erfordern keine Änderungen, damit Deepsleep funktioniert. Andreas Spiess hat dazu ein schönes Instructable.

Schritt 4: ESP-01 Sensorstation

ESP-01 Sensorstation
ESP-01 Sensorstation
ESP-01 Sensorstation
ESP-01 Sensorstation
ESP-01 Sensorstation
ESP-01 Sensorstation

An allen Sensorstationen werden die Sensormodule vertikal montiert, um die Staubansammlung auf ihnen zu reduzieren. Nicht alle sind in Gehäusen und ich darf sie nicht in Gehäusen montieren. Der Grund dafür ist, dass sich die Geräte bei unzureichender Belüftung erwärmen und die Temperatur- und Luftfeuchtigkeitswerte beeinflussen können.

ESP-01-Boards sind sehr kompakt und haben wenige digitale IO-Pins zum Arbeiten, aber es reicht für die I2C-Schnittstelle. Die Boards erfordern jedoch eine knifflige Modifikation, damit "Deepsleep" funktioniert. Auf dem gezeigten Foto wurde ein Draht vom Eckstift (GPIO16) zum RST-Pin am Header gelötet. Der Draht, den ich verwendet habe, ist ein isolierter "Reparaturdraht" mit einem Durchmesser von 0,1 mm. Die Isolationsbeschichtung schmilzt beim Erhitzen weg, sodass sie gelötet werden kann, um Leiterbahnen usw. in PCBs zu reparieren, ohne sich Gedanken über Kurzschlüsse zu machen, wenn der Draht andere Komponenten berührt. Seine Größe macht es schwierig, damit zu arbeiten, und ich habe diesen Draht unter einem (Hobbyisten- / Briefmarkensammler-) Mikroskop an Ort und Stelle gelötet. Denken Sie daran, dass der Header auf der rechten Seite einen Stiftabstand von 0,1" (2,54 mm) hat. Eine Schottky-Diode hier zu installieren wäre überhaupt nicht einfach, also habe ich beschlossen, es einfach nur mit dem Kabel zu versuchen, und beide Geräte laufen seit über einen Monat ohne Probleme.

Die Module wurden auf zwei von mir erstellten Prototypenplatinen installiert. Eines (#1) ist ein Programmierboard, das auch das Installieren und Testen von I2C-Modulen ermöglicht, während das andere (#2) ein Entwicklungs-/Testboard für I2C-Geräte ist. Für die erste Platine habe ich einen alten USB-Stecker und eine kleine Platine zusammengelötet, um das Gerät direkt über einen USB-Wandadapter mit Strom zu versorgen. Das andere Gerät hat eine normale DC-Buchse, die so modifiziert wurde, dass sie in den Schraubklemmen-Header passt, und wird ebenfalls über einen Wandadapter mit Strom versorgt.

Das Schema zeigt, wie sie verbunden sind und wie der Programmierer funktioniert. Ich habe keine anderen ESP-01-Module, daher habe ich den Programmierer nicht sofort benötigt. In Zukunft werde ich wahrscheinlich eine Platine für sie machen. Auf beiden Platinen ist das Sensormodul SI7021 installiert, da ich an Druckmessungen an diesen Stellen nicht so interessiert war.

Schritt 5: ESP 12E Serial WIFI Kit Sensor Station

ESP 12E Serielles WIFI-Kit Sensorstation
ESP 12E Serielles WIFI-Kit Sensorstation
ESP 12E Serielles WIFI-Kit Sensorstation
ESP 12E Serielles WIFI-Kit Sensorstation

Das ESP12E Serial WIFI Kit Board war nicht so sehr für die Entwicklung gedacht, sondern dafür, zu zeigen, was mit diesem Gerät möglich ist. Ich habe es vor langer Zeit gekauft, um etwas über die ESP8266-Programmierung zu lernen, und habe mich schließlich entschieden, es einer neuen Verwendung zuzuführen. Ich habe alle LEDs, die für Demonstrationen installiert waren, entfernt und einen USB-Programmierheader sowie einen für die von mir verwendeten Module geeigneten I2C-Header hinzugefügt. Es hatte einen CdS-Fotowiderstand, der an seinen analogen Eingangspin angeschlossen war, und ich beschloss, ihn dort zu belassen. Dieses spezielle Gerät sollte meine Werkstatt überwachen und der Fotosensor, den es hatte, reichte aus, um mich wissen zu lassen, ob die Lichter versehentlich angelassen wurden. Für die Lichtmessung normalisierte ich die Messwerte, um mir eine prozentuale Leistung zu geben, und alles über „5“in der Nacht bedeutete, dass das Licht angelassen wurde oder eine Tür zum Haus nicht richtig geschlossen war. Die RST- und GPIO16-Pins sind auf der Platine deutlich beschriftet und die sie verbindende Schottky-Diode wurde auf der Unterseite der Platine verbaut. Die Stromversorgung erfolgt über eine serielle USB-Platine, die direkt an ein USB-Wandladegerät angeschlossen ist. Ich habe Extras dieser USB-seriellen Boards und benötige diese im Moment nicht.

Ich habe keinen Schaltplan für dieses Board erstellt und empfehle im Allgemeinen nicht, einen für diesen Zweck zu kaufen. Wesentlich besser geeignet sind die Wemos D1 Mini Boards, die als nächstes besprochen werden. Wenn Sie jedoch eines davon haben und einen Rat benötigen, helfe ich Ihnen gerne.

Schritt 6: D1 Mini-Sensorstationen

D1 Mini-Sensorstationen
D1 Mini-Sensorstationen
D1 Mini-Sensorstationen
D1 Mini-Sensorstationen
D1 Mini-Sensorstationen
D1 Mini-Sensorstationen

Die ESP8266-Entwicklungsboards vom Typ Wemos D1 Mini sind meine bevorzugten, und wenn ich es noch einmal machen müsste, würde ich einfach diese verwenden. Sie verfügen über eine Vielzahl an zugänglichen IO-Pins, lassen sich direkt über die Arduino IDE programmieren und sind dennoch recht kompakt. Der D0-Pin ist auf diesen Boards GPIO16 und das Anschließen einer Schottky-Diode ist ziemlich einfach. Der Schaltplan zeigt, wie ich diese Platinen verkabelt habe und beide das BME2808-Sensormodul verwenden.

Eine der beiden Platinen dient zur Überwachung des Außenwetters und wird von einer Solarstrombatterie betrieben. Ein 165 mm x 135 mm (6 V, 3,5 W) Solarpanel ist an ein TP4056 Li-Ion Batterielademodul angeschlossen (siehe Setup-Diagramm der solarbetriebenen Batteriesensorstation). Dieses spezielle Lademodul (03962A) verfügt über eine Batterieschutzschaltung, die erforderlich ist, wenn die Batterie (Pack) keine enthält. Der Lithium-Ionen-Akku wurde aus einem alten Laptop-Akku recycelt und kann immer noch ausreichend geladen sein, um das D1 Mini-Board zu betreiben, insbesondere bei aktiviertem Tiefschlaf. Das Board wurde in ein Plastikgehäuse gelegt, um es vor den Elementen etwas sicher zu halten. Damit der Innenraum jedoch der Außentemperatur und Feuchtigkeit ausgesetzt ist, wurden auf gegenüberliegenden Seiten zwei Löcher mit einem Durchmesser von 25 mm gebohrt und (von innen) mit schwarzem Landschaftstuch bedeckt. Das Tuch ist so konzipiert, dass Feuchtigkeit eindringen kann und somit die Feuchtigkeit gemessen werden kann. An einem Ende des Gehäuses wurde ein kleines Loch gebohrt und ein durchsichtiges Kunststofffenster installiert. Hier wurde das Lichtsensormodul BH1750 platziert. Das gesamte Gerät wird im Freien im Schatten (keine direkte Sonne) aufgestellt, wobei der Lichtsensor ins Freie zeigt. Es läuft seit fast 4 Wochen bei unserem regnerischen / bewölkten Winterwetter hier mit der solarbetriebenen Batterie.

Schritt 7: Gateway und Webserver

Gateway und Webserver
Gateway und Webserver
Gateway und Webserver
Gateway und Webserver
Gateway und Webserver
Gateway und Webserver

Für das ESP-Now Gateway Gerät wurde ein Lolin NodeMCU V3 (ESP8266) Board und für den Webserver ein ESP32 (GOOUUU Board) verwendet. Fast jedes ESP8266- oder sogar ESP32-Board hätte als Gateway-Gerät dienen können, dies war einfach das Board, das ich "übrig" hatte, nachdem ich alle anderen Boards verwendet hatte, die ich hatte.

Ich habe das ESP32-Board verwendet, da ich ein Board mit etwas mehr Rechenleistung benötige, um die Daten zu sammeln, zu sortieren, im Speicher zu speichern und den Webserver zu betreiben. Zukünftig kann es auch über einen eigenen Sensor und ein lokales (OLED) Display verfügen. Zur Speicherung wurde eine SD-Karte mit einem angepassten Adapter verwendet. Ich habe einen üblichen microSD-auf-SD-Kartenadapter verwendet und einen 7-poligen Stecker (0,1 Pitch) an die plattierten Kontakte gelötet. Ich habe die Ratschläge von diesem GitHub befolgt, um die Verbindungen herzustellen.

Das Prototyping-Setup (mit Dupont-Drähten) enthält kein Sensormodul, aber die fertige Platine, die ich entworfen habe, ermöglicht sowohl ein als auch ein kleines OLED-Display. Details darüber, wie ich diese Leiterplatte entworfen habe, sind Teil eines anderen Instructable.

Schritt 8: Software

Software
Software

ESP8266 (ESP-NOW) Geräte

Die Software für alle Geräte wurde mit der Arduino IDE (v1.87) geschrieben. Jede Sensorstation führt im Wesentlichen den identischen Code aus. Sie unterscheiden sich lediglich darin, welche Pins für die I2C-Kommunikation verwendet werden und mit welchem Sensormodul sie verbunden sind. Vor allem senden sie das identische Messdatenpaket an die ESP-Now Gateway-Station, unabhängig davon, ob sie den gleichen Sensor haben. Dies bedeutet, dass einige Sensorstationen Dummy-Werte für die Druck- und Lichtpegelmessungen ausfüllen, wenn sie keine Sensoren haben, die echte Werte liefern. Der Code für jede Station und das Gateway wurde von Anthony Elders Beispielen auf diesem GitHub angepasst.

Der Gateway-Gerätecode verwendet SoftwareSerial, um mit dem Webserver zu kommunizieren, da ESP8266 nur einen voll funktionsfähigen Hardware-UART hat. Bei einer maximalen Baudrate von 9600 scheint es recht zuverlässig zu sein und ist mehr als ausreichend, um diese relativ kleinen Datenpakete zu senden. Das Gateway-Gerät ist auch mit einer privaten MAC-Adresse programmiert. Der Grund dafür ist, dass bei einem Austausch nicht alle Sensorstationen mit der neuen Empfänger-MAC-Adresse umprogrammiert werden müssen.

ESP32 (Webserver)

Jede Sensorstation sendet ihr Datenpaket an das Gateway-Gerät, das es an den Webserver weiterleitet. Zusammen mit dem Datenpaket wird auch die MAC-Adresse der Sensorstation gesendet, um jede Station zu identifizieren. Der Webserver verfügt über eine "Look-Up"-Tabelle, um den Standort jedes Sensors zu bestimmen und die Daten entsprechend zu sortieren. Das Zeitintervall zwischen den Messungen wurde auf 5 min plus einen Zufallsfaktor eingestellt, um zu vermeiden, dass die Sensoren beim Senden an das Gateway-Gerät miteinander "kollidieren".

Der Heim-WIFI-Router wurde so eingestellt, dass er dem Webserver eine feste IP-Adresse zuweist, wenn er sich mit dem WIFI verbindet. Bei mir war es 192.168.1.111. Wenn Sie diese Adresse in einem beliebigen Browser eingeben, wird eine Verbindung zum Webserver der Wetterstation hergestellt, solange sich der Benutzer innerhalb der WLAN-Reichweite des Heimnetzwerks befindet (und eine Verbindung mit ihm herstellt). Wenn der Benutzer eine Verbindung zur Webseite herstellt, antwortet der Webserver mit einer Tabelle der Messungen und enthält den Zeitpunkt der letzten Messung jedes Sensors. Wenn eine Sensorstation nicht mehr reagiert, kann man dies anhand der Tabelle erkennen, wenn ein Messwert älter als 5-6 Minuten ist.

Die Daten werden in einzelnen Textdateien auf einer SD-Karte gespeichert und können auch von der Webseite heruntergeladen werden. Es kann in Excel oder jede andere Anwendung zum Plotten von Daten importiert werden

Android App

Um es einfacher zu machen, die lokalen Wetterinformationen auf einem Smartphone anzuzeigen, habe ich mit Android Studio eine relativ Android-App erstellt. Es ist auf meiner GitHub-Seite hier verfügbar. Es verwendet die Webview-Klasse, um die Webseite vom Server zu laden und als solche eingeschränkte Funktionalität. Es ist nicht in der Lage, die Datendateien herunterzuladen, und ich brauchte sie sowieso nicht auf meinem Telefon.

Schritt 9: Ergebnisse

Ergebnisse
Ergebnisse

Zum Schluss noch ein paar Ergebnisse für meine Heimwetterstation. Die Daten wurden auf einen Laptop heruntergeladen und in Matlab geplottet. Ich habe meine Matlab-Skripte angehängt und Sie können sie auch in GNU Octave ausführen. Der Außensensor läuft seit fast 4 Wochen mit seiner solargeladenen Batterie und wir haben zu dieser Jahreszeit kaum Sonne. Bisher funktioniert alles gut und jeder in der Familie kann das Wetter selbst nachschauen, anstatt mich jetzt zu fragen!

Empfohlen: