Lerne, wie man eine Wetterstation mit einem ESP32 baut, die lokale oder Internet-Wetterinformationen auf einem e-Paper-Display anzeigt.
In diesem Tutorial lernst du, wie man eine batteriebetriebene Wetterstation baut, die den ESP32 Deep-Sleep-Modus und ein e-Paper-Display für eine lange Laufzeit nutzt. Wir bauen tatsächlich zwei Versionen. Eine Version zeigt die Umgebungstemperatur, Luftfeuchtigkeit und den Luftdruck, die über einen BME280 Sensor erfasst werden. Die andere Version liest Wetterdaten aus dem Internet mit OpenWeather und verwendet die ESP32-e-Paper-Weather-Display Software, um sie anzuzeigen.
Lass uns loslegen!
Benötigte Teile
Für dieses Projekt verwende ich ein älteres ESP32-Board (ESP32 lite), das zwar veraltet ist, aber noch erhältlich ist. Das ist das unten aufgeführte Modell. Es gibt ein Nachfolgemodell (Amazon) mit verbesserten Spezifikationen. Und das Standardboard, das die ESP32-e-Paper-Weather-Display Bibliothek verwendet, ist ein LOLIN D32, das einen integrierten Batteriemonitor hat.
Aber auch andere ESP32, ESP8266 oder Arduino (mit WiFi) funktionieren. Bevorzugt solltest du jedoch ein Entwicklungsboard mit Batterieladefunktion und niedrigem Deep-Sleep-Stromverbrauch verwenden, wie die oben genannten ESP32-Boards.

2,9″ e-Paper Display

ESP32 lite

BME280 Sensor

USB-Datenkabel

Dupont-Kabelset

Breadboard
Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.
E-Paper Display
Ein kurzes Wort zum e-Paper-Display, das wir für unsere Wetterstation verwenden. E-Paper-Displays, auch e-Ink-Displays genannt, haben den Vorteil, sehr wenig Strom zu verbrauchen. Tatsächlich wird nur Strom benötigt, um das Display zu aktualisieren. Nach der Aktualisierung bleibt der angezeigte Inhalt praktisch unbegrenzt erhalten, ohne Strom zu verbrauchen.

Ein weiterer Vorteil eines e-Paper-Displays ist, dass es fantastische Betrachtungswinkel (>170 Grad) hat und auch bei Sonnenlicht gut lesbar ist.
Die Nachteile sind die langsame Aktualisierungszeit, die begrenzte Farbpalette und dass es keine Hintergrundbeleuchtung gibt; man kann es also im Dunkeln nicht lesen.
Normalerweise dauert es 2 Sekunden, bis ein e-Paper-Display aktualisiert ist, obwohl Teilaktualisierungen von Displayabschnitten viel schneller sind (0,3 Sekunden). Das gilt für Schwarz-Weiß-Displays. Farbdisplays sind viel, viel langsamer beim Aktualisieren (> 20 Sekunden), haben nur wenige Farben und sind deutlich teurer.
Für eine batteriebetriebene Wetterstation, die ihre Daten nur alle paar Minuten aktualisiert, sind e-Paper-Displays jedoch eine großartige Wahl und sehen wirklich gut aus.
2,9″ e-Paper-Display-Modul
Für dieses Projekt verwende ich speziell ein 2,9″ e-Paper-Display-Modul mit 296×128 Pixel Auflösung und einem eingebetteten Controller mit SPI-Schnittstelle.

Beachte, dass die meisten e-Paper-Display-Module mit SPI einen kleinen Schalter oder Jumper haben, mit dem man von 4-Draht-SPI auf 3-Draht-SPI umschalten kann. Wir verwenden hier den Standard 4-Draht-SPI.
Das Display-Modul läuft mit 3,3V oder 5V, hat einen superniedrigen Schlafstrom von 0,01µA und verbraucht nur etwa 26,4mW beim Aktualisieren seines Inhalts. Das bedeutet, du kannst ein e-Paper-Display auch mit einer kleinen Batterie lange betreiben.
Für mehr Informationen zu e-Paper-Displays schau dir unser Tutorial Interfacing Arduino To An E-ink Display an.
BME280 Sensor
Für unsere Wetterstation wollen wir auch einige Umgebungsdaten messen, wie Temperatur, Luftfeuchtigkeit und Luftdruck. Ich verwende hier einen BME280 sensor. Der Hauptgrund ist, dass er auch einen stromsparenden Schlafmodus hat, in dem er nur 0,1µA verbraucht (3,6 μA im Normalmodus).
In Kombination mit einem e-Paper und dem ESP32-lite mit einem Deep-Sleep-Strom von 5,65mA (bei 5V) ergibt das eine sehr stromsparende Lösung, die lange mit Batterie betrieben werden kann.
Der BME280 Sensor selbst ist winzig und wird typischerweise auf einem Breakout-Board mit I2C-Schnittstelle geliefert; siehe Bild unten.

Die I2C-Schnittstelle macht den Anschluss und die Nutzung sehr einfach. Der Sensor kann Druck von 300 hPa bis 1100 hPa, Temperatur von -40°C bis +85°C und Luftfeuchtigkeit von 0% bis 100% messen. Für mehr Informationen zum BME280 lies unser Tutorial zu How To Use BME280 Pressure Sensor With Arduino.
Anschluss und Test des e-Paper
Bevor wir etwas Kompliziertes versuchen, verbinden und testen wir die Funktion des e-Paper-Displays. Das folgende Bild zeigt die komplette Verkabelung für Strom und SPI.

Und hier ist die Tabelle mit allen Verbindungen. Beachte, dass du das Display mit 3,3V oder 5V versorgen kannst, aber der ESP32-lite hat nur einen 3,3V-Ausgang und die SPI-Datenleitungen müssen 3,3V sein.
| e-Paper Display | ESP32 lite |
|---|---|
| CS/SS | 5 |
| SCL/SCK | 18 |
| SDA/DIN/MOSI | 23 |
| BUSY | 15 |
| RES/RST | 2 |
| DC | 0 |
| VCC | 3.3V |
| GND | G |
Installation der GxEPD2 Bibliothek
Bevor wir das e-Paper-Display nutzen können, müssen wir zwei Bibliotheken installieren. Die Adafruit_GFX Bibliothek ist eine Kern-Grafikbibliothek, die eine gemeinsame Menge von Grafikprimitiven (Text, Punkte, Linien, Kreise usw.) bereitstellt. Und die GxEPD2 Bibliothek stellt die Grafiktreiber-Software zur Steuerung eines E-Paper-Displays via SPI bereit.
Installiere die Bibliotheken einfach auf die übliche Weise. Nach der Installation solltest du sie im Library Manager wie folgt sehen.

Testcode
Hier ist ein einfacher Testcode, der den Text „Hello Makers!“ auf dem Display anzeigt. Schau dir zuerst den kompletten Code an, danach besprechen wir einige Details.
#define ENABLE_GxEPD2_GFX 0
#include "GxEPD2_BW.h"
#include "Fonts/FreeMonoBold9pt7b.h"
//CS(SS)=5, SCL(SCK)=18, SDA(MOSI)=23, BUSY=15, RES(RST)=2, DC=0
GxEPD2_BW<GxEPD2_290_BS, GxEPD2_290_BS::HEIGHT> epd(GxEPD2_290_BS(5, 0, 2, 15));
void initDisplay() {
epd.init(115200, true, 50, false);
epd.setRotation(1);
epd.setFont(&FreeMonoBold9pt7b);
epd.setTextColor(GxEPD_BLACK);
epd.setFullWindow();
epd.fillScreen(GxEPD_WHITE);
}
void displayText() {
epd.setCursor(20, 20);
epd.print("Hello");
epd.setCursor(20, 40);
epd.print("Makers!");
}
void setup() {
initDisplay();
displayText();
epd.display();
epd.hibernate();
}
void loop() {
}
Lass uns den Code in seine Komponenten zerlegen, um zu verstehen, wie er funktioniert.
Konstanten und Bibliotheken
Der Code beginnt mit der Definition einer Konstante ENABLE_GxEPD2_GFX als 0. Du kannst sie auf 1 setzen, was laut Dokumentation der Basisklasse GxEPD2_GFX erlaubt, Referenzen oder Zeiger auf die Display-Instanz als Parameter zu übergeben. Das benötigt aber ~1,2k mehr Code und wir brauchen es nicht, daher ist sie auf 0 gesetzt.
#define ENABLE_GxEPD2_GFX 0
Als nächstes binden wir die GxEPD2_BW.h Header-Datei für ein Schwarz-Weiß (BW) e-Paper-Display und die Schriftart ein, die wir verwenden wollen. Wenn du ein 3-Farben-Display hast, müsstest du GxEPD2_3C.h oder GxEPD2_4C.h für ein 4-Farben-Display und GxEPD2_7C.h für ein 7-Farben-Display einbinden.
#include "GxEPD2_BW.h" #include "Fonts/FreeMonoBold9pt7b.h"
Die Adafruit_GFX Bibliothek enthält viele verschiedene Schriftarten, die du im Bibliotheksordner unter {application_path}\Arduino\libraries\Adafruit_GFX_Library\Fonts findest.
Display-Objekt
Die nächste Zeile ist wichtig. Sie erstellt das Display-Objekt und hängt vom Displaytyp oder Hersteller ab. Ich habe ein WeAct und ein WaveShare Display ausprobiert und die folgende Zeile funktioniert für beide.
GxEPD2_BW<GxEPD2_290_BS, GxEPD2_290_BS::HEIGHT> epd(GxEPD2_290_BS(5, 0, 2, 15));
Die Readme für die GxEPD2 Bibliothek listet eine riesige Anzahl unterstützter Displays auf, die Details findest du in den Header-Dateien, z.B. GxEPD2.h.
Display-Initialisierung
Die initDisplay() Funktion ist verantwortlich für die Initialisierung des e-Paper-Displays. Sie setzt Parameter wie Kommunikationsgeschwindigkeit, Rotation, Schriftart, Textfarbe und Bildschirmfüllfarbe. Wenn du Probleme mit der Aktualisierung hast, musst du eventuell mit dem Parameter der init() Funktion experimentieren.
void initDisplay() {
epd.init(115200, true, 50, false);
epd.setRotation(1);
epd.setFont(&FreeMonoBold9pt7b);
epd.setTextColor(GxEPD_BLACK);
epd.setFullWindow();
epd.fillScreen(GxEPD_WHITE);
}
Text anzeigen
Die displayText() Funktion positioniert den Cursor auf dem Display und gibt den Text „Hello“ und „Makers!“ an bestimmten Koordinaten aus.
void displayText() {
epd.setCursor(20, 20);
epd.print("Hello");
epd.setCursor(20, 40);
epd.print("Makers!");
}
Setup-Funktion
In der setup() Funktion wird das Display mit initDisplay() initialisiert, Text mit displayText() angezeigt und dann der Inhalt auf dem e-Paper-Bildschirm dargestellt. Schließlich wird das Display in den Ruhezustand versetzt. Das schaltet das Display aus und versetzt den Display-Controller in den Deep-Sleep-Modus.
void setup() {
initDisplay();
displayText();
epd.display();
epd.hibernate();
}
Loop-Funktion
Die loop() Funktion ist in diesem Code leer, da der Displayinhalt in der setup() Funktion gesetzt wird und nicht kontinuierlich aktualisiert werden muss. Der ESP32 führt im Loop keine speziellen Aktionen aus.
void loop() {
}
Code hochladen und ausführen
Jetzt sind wir bereit, den Code hochzuladen und auszuführen. Wähle im Board-Manager das Board aus, das du hast. In meinem Fall ist es das WEMOS LOLIN32 Lite, das unter den benötigten Teilen aufgeführt ist.

Dann drücke Upload und nach einigem Flackern sollte dein Display folgenden Text anzeigen:

Wenn das funktioniert, können wir zu etwas Komplexerem übergehen. Falls nicht, überprüfe die Verkabelung und die Zeile, in der das Display-Objekt erstellt wird. Insbesondere, welche Pins für die SPI-Schnittstelle zugewiesen sind.
Anschluss des e-Paper und BME280 an ESP32
Wir wollen Umgebungstemperatur, Luftfeuchtigkeit und Luftdruck mit dem BME280 Sensor anzeigen. Das Hinzufügen des Sensors ist dank der I2C-Schnittstelle einfach. Verbinde einfach SDA mit Pin 33 und SCL mit Pin 25, wie unten gezeigt.

Du kannst andere Pins für I2C verwenden, aber wenn du das tust, vergiss nicht, den Code im nächsten Abschnitt entsprechend anzupassen.
Beachte, dass es 5V- und 3,3V-Versionen des BME280 Breakout-Boards gibt. Ich verwende die 3,3V-Version und verbinde daher VCC mit dem 3,3V-Pin des ESP32.
Da das WEMOS LOLIN32 Lite einen eingebauten Batterieanschluss und Ladegerät hat, kannst du das gesamte System mit einer LiPo-Batterie betreiben. Das Bild unten zeigt die komplette Verkabelung mit einer LiPo-Batterie angeschlossen:

Selbst mit der kleinen 420mAh LiPo-Batterie, die hier verwendet wird, konnte ich das System mehrere Tage laufen lassen (mit einem 5-Minuten-Aktualisierungszyklus).
Im nächsten Abschnitt schreiben wir den Code, um die Sensordaten auf dem e-Paper-Display anzuzeigen.
Code für lokale Wetterstation
Der folgende Code liest alle 5 Minuten Umgebungstemperatur, Luftfeuchtigkeit und Luftdruck vom BME280 und zeigt diese Informationen plus die Höhe auf dem e-Paper-Display an. Die Ausgabe sieht wie folgt aus:

Zwischen den 5-Minuten-Intervallen gehen ESP32, e-Paper und BME280 alle in den Deep-Sleep-Modus, was den Stromverbrauch des Systems stark reduziert. Schau dir zuerst den kompletten Code an, danach betrachten wir die Details:
#define ENABLE_GxEPD2_GFX 0
#include "Wire.h"
#include "GxEPD2_BW.h"
#include "Fonts/FreeMonoBold9pt7b.h"
#include "Fonts/FreeMono9pt7b.h"
#include "Fonts/FreeMonoBold18pt7b.h"
#include "Adafruit_BME280.h"
#include "esp_sleep.h"
#define SECONDS (1000 * 1000)
#define SEALEVELPRESSURE_HPA 1013.25
#define BME280_ADDRESS 0x76
Adafruit_BME280 bme;
GxEPD2_BW<GxEPD2_290_BS, GxEPD2_290_BS::HEIGHT> epd(GxEPD2_290_BS(5, 0, 2, 15));
void initDisplay() {
epd.init(115200, true, 50, false);
epd.setRotation(0);
epd.setFullWindow();
epd.setTextColor(GxEPD_BLACK);
epd.fillScreen(GxEPD_WHITE);
}
void initSensor() {
Wire.begin(33, 25); // Software I2C for BME280
bme.begin(BME280_ADDRESS, &Wire);
bme.setSampling(Adafruit_BME280::MODE_FORCED,
Adafruit_BME280::SAMPLING_X1, // temperature
Adafruit_BME280::SAMPLING_X1, // pressure
Adafruit_BME280::SAMPLING_X1, // humidity
Adafruit_BME280::FILTER_OFF);
}
void displayText(int x, int y, const GFXfont* f, const char* text) {
epd.setFont(f);
epd.setCursor(x, y);
epd.print(text);
}
void displayHLine(int y) {
int o = 8;
epd.drawFastHLine(o, y, 128 - 2 * o, GxEPD_BLACK);
}
void displayLargeValue(int y, const char* name, float val, const char* unit) {
static char buffer[32];
sprintf(buffer, "%7.1f", val);
displayText(8, y, &FreeMono9pt7b, name);
displayText(4, y + 30, &FreeMonoBold9pt7b, buffer);
displayText(86, y + 30, &FreeMono9pt7b, unit);
displayHLine(y + 50);
}
void displaySmallValue(int y, char* name, float val, char* unit) {
static char buffer[32];
sprintf(buffer, "%5.1f", val);
displayText(8, y, &FreeMono9pt7b, name);
displayText(4, y + 35, &FreeMonoBold18pt7b, buffer);
displayText(110, y + 35, &FreeMono9pt7b, unit);
displayHLine(y + 50);
}
void setup() {
initSensor();
initDisplay();
int o = 20, d = 76;
bme.takeForcedMeasurement();
float temp = bme.readTemperature();
displaySmallValue(o, "temp", temp, "C");
float hum = bme.readHumidity();
displaySmallValue(o + d, "hum", hum, "%");
float alt = bme.readAltitude(SEALEVELPRESSURE_HPA);
displayLargeValue(o + 2 * d, "alt", alt, "m");
float pres = bme.readPressure() / 100.0;
displayLargeValue(o + 3 * d, "pres", pres, "hPa");
epd.display();
epd.hibernate();
esp_sleep_enable_timer_wakeup(5 * 60 * SECONDS);
esp_deep_sleep_start();
}
void loop() {
}
Im obigen Code zeigen wir Temperatur-, Luftfeuchtigkeits- und Luftdruckwerte eines BME280 Sensors auf einem e-Paper-Display an. Der Sensor ist über Software-I2C angeschlossen und das Display wird mit der GxEPD2 Bibliothek gesteuert.
Konstanten und Bibliotheken
Wir beginnen mit dem Einbinden der benötigten Bibliotheken plus drei verschiedener Schriftbibliotheken. Beachte, dass du die Adafruit_BME280 library installieren musst, falls noch nicht geschehen.
#define ENABLE_GxEPD2_GFX 0 #include "Wire.h" #include "GxEPD2_BW.h" #include "Fonts/FreeMonoBold9pt7b.h" #include "Fonts/FreeMono9pt7b.h" #include "Fonts/FreeMonoBold18pt7b.h" #include "Adafruit_BME280.h" #include "esp_sleep.h" #define SECONDS (1000 * 1000) #define SEALEVELPRESSURE_HPA 1013.25 #define BME280_ADDRESS 0x76
Die I2C-Adresse des BME280 Sensors ist typischerweise 0x76, kann aber abweichen. Bei manchen Breakout-Boards kannst du zwischen zwei Adressen wechseln. Die Konstante SEALEVELPRESSURE_HPA wird von der BME280 Bibliothek verwendet, um die Höhe basierend auf dem Luftdruck zu berechnen. Diese musst du an deinen Standort anpassen. Siehe unser Tutorial zu How To Use BME280 Pressure Sensor With Arduino für mehr Details.
Sensor- und Display-Objekte
Als nächstes erstellen wir die Objekte für den BME280 Sensor und das e-Paper-Display. Wie bereits erwähnt, musst du bei anderem Display oder anderer Verkabelung die Konstruktion des Display-Objekts anpassen.
Adafruit_BME280 bme; GxEPD2_BW<GxEPD2_290_BS, GxEPD2_290_BS::HEIGHT> epd(GxEPD2_290_BS(5, 0, 2, 15));
Initialisierungsfunktionen
Die initDisplay() Funktion initialisiert das e-Paper-Display, indem sie Kommunikation, Rotation, Farbe einstellt und den Bildschirm löscht. Die initSensor() Funktion initialisiert den BME280 Sensor, startet die I2C-Kommunikation und konfiguriert die Sensoreinstellungen.
void initDisplay() {
...
}
void initSensor() {
Wire.begin(33, 25); // Software I2C for BME280
bme.setSampling(Adafruit_BME280::MODE_FORCED,
..
)
}
Da wir Software-I2C für den BME280 Sensor verwenden, müssen wir Wire.begin(33, 25) mit den verwendeten SDA- und SCL-Pins aufrufen. Wenn du den BME280 an andere Pins anschließt, musst du den Code hier anpassen.
Beachte, dass wir den BME280 Sensor mit der MODE_FORCED Einstellung betreiben. In forced mode führt der Sensor eine Messung durch, speichert die Ergebnisse und geht dann in den Deep-Sleep. Das ist genau das, was wir wollen, da wir zwischen den Messungen auch den ESP32 und das e-Paper in den Deep-Sleep versetzen.
Display-Funktionen
Es gibt mehrere Funktionen, um Text, horizontale Linien, große Werte (Druck, Höhe) und kleine Werte (Temperatur, Luftfeuchtigkeit) auf dem e-Paper-Display anzuzeigen. Diese Funktionen kümmern sich um die Formatierung und Positionierung der anzuzeigenden Daten.
void displayText(int x, int y, const GFXfont* f, const char* text) {
// Display text code
}
void displayHLine(int y) {
// Display horizontal line code
}
void displayLargeValue(int y, const char* name, float val, const char* unit) {
// Display large value code
}
void displaySmallValue(int y, char* name, float val, char* unit) {
// Display small value code
}
Setup-Funktion
In der setup() Funktion werden Sensor und Display initialisiert. Sensorwerte für Temperatur, Luftfeuchtigkeit, Höhe und Druck werden erfasst und auf dem e-Paper-Bildschirm angezeigt. Das Display wird aktualisiert und in den Ruhezustand versetzt.
Danach versetzen wir auch den ESP32 in den Deep-Sleep-Modus und wecken ihn automatisch nach 5 Minuten wieder auf.
void setup() {
initSensor();
initDisplay();
bme.takeForcedMeasurement();
float temp = bme.readTemperature();
displaySmallValue(o, "temp", temp, "C");
...
epd.display();
epd.hibernate();
esp_sleep_enable_timer_wakeup(5 * 60 * SECONDS);
esp_deep_sleep_start();
}
Loop-Funktion
Die loop() Funktion ist leer, da der ESP32 nach Setup in den Deep-Sleep geht und nie in die Loop-Funktion eintritt. Er wacht aber alle 5 Minuten auf und führt dann die Setup-Funktion erneut aus.
Jede Aktualisierung des Displays dauert 2-3 Sekunden und geht mit viel Flackern einher, was ziemlich störend ist und nicht gut aussieht. Du kannst das vermeiden, indem du eine Teilaktualisierung durchführst. Für mehr Details siehe das Partial Refresh of e-Paper Display Tutorial.
Abgesehen davon hast du jetzt eine schöne, kleine, batteriebetriebene Wetterstation, die Umgebungstemperatur, Luftfeuchtigkeit, Luftdruck und Höhe anzeigt und aktualisiert!
Code für Internet-Wetterstation
Wenn du eine fortgeschrittenere Wetterstation möchtest, die ihre Daten aus dem Internet bezieht, gibt es die fantastische ESP32-e-Paper-Weather-Display Bibliothek, die das für dich erledigt.
Je nach Displaygröße zeigt sie Temperatur, Luftfeuchtigkeit, Druck, Windrichtung, Mondphasen, Wetterbedingungen, Wettervorhersage und mehr an. Auf dem 2,9″ e-Paper-Display, das ich hier verwende, sieht das so aus:

Installation der ESP32-e-Paper-Weather-Display Bibliothek
Um die ESP32-e-Paper-Weather-Display Bibliothek zu installieren, musst du die ZIP-Datei aus dem GitHub-Repo herunterladen und dann über Sketch -> Include Library -> Add .ZIP Library ... installieren.

Du benötigst außerdem die GxEPD2 library und die Adafruit_GFX library, aber die hast du bereits in den vorherigen Abschnitten installiert.
Einrichtung der ESP32-e-Paper-Weather-Display Bibliothek
Bevor du Internet-Wetterdaten mit der ESP32-e-Paper-Weather-Display Bibliothek anzeigen kannst, gibt es ein paar Schritte. Zuerst brauchst du einen API-Schlüssel von OpenWeather, dann musst du Beispielcode für dein Display herunterladen und schließlich die Einstellungsdatei im Beispielcode mit dem API-Schlüssel und deinen WLAN-Zugangsdaten aktualisieren.
OpenWeather API-Schlüssel
Die ESP32-e-Paper-Weather-Display Bibliothek nutzt den kostenlosen OpenWeather Dienst, um Wetterdaten aus dem Internet zu beziehen. Bevor du eine der OpenWeather APIs nutzen kannst, brauchst du einen API-Schlüssel und dafür ein Konto. Um ein kostenloses Konto zu erstellen, gehe auf die sign-up page und gib dort deine Daten ein.

Danach gehe zum api-key creation page und erstelle einen API-Schlüssel. Der API-Schlüssel ist die lange Zeichenkette wie „sdfd87fakeby6apikeysf4z“, die du im Screenshot unten siehst. Dein Schlüssel wird anders aussehen.

Wenn du mehr Hilfe brauchst, schau dir unser Tutorial an: Simple ESP32 Internet Weather Station.
Lade als nächstes den Beispielcode für deine Displaygröße und -typ aus dem GitHub-Repo der ESP32-e-Paper-Weather-Display Bibliothek herunter. Ich habe zum Beispiel den Code für das Waveshare_2_9 example heruntergeladen.
Alternativ kannst du die Arduino IDE verwenden, die auch einige, aber nicht alle Beispiele enthält:

Einstellungsdatei owm_credential.h
Öffne schließlich die .ino-Datei (z.B. Waveshare_2_9.ino) in der Arduino IDE und klicke auf den Tab für die owm_credential.h Datei.
Diese Datei enthält alle spezifischen Einstellungen für deine Wetterstation wie Standort, Einheiten, Sprache, Zeitzone und so weiter. Am wichtigsten sind die Konstanten für deine WLAN-Zugangsdaten (ssid, Passwort) und den OpenWeather API-Schlüssel, die du dort eintragen musst.

owm_credential.h Datei mit Einstellungen für ESP32-e-Paper-Weather-DisplayWie erwähnt, zeigt die ESP32-e-Paper-Weather-Display Bibliothek je nach Größe des e-Paper-Displays mehr oder weniger detaillierte Wetterinformationen an. Auf einem großen 7,5″ Display erhältst du eine sehr umfangreiche Wetterdatenanzeige, die fantastisch aussieht:

Batteriemonitor
Schließlich zeigt die ESP32-e-Paper-Weather-Display Bibliothek auch nativ Batteriedaten an, wenn du ein Lolin D32 board verwendest, das GPIO-35 als ADC-Eingang hat:

Bei anderen Boards musst du die analogRead(35) Anweisung im Code ändern und den Pin angeben, an dem dein Spannungsmonitor angeschlossen ist.

Ein Spannungsmonitor kann ein einfacher Spannungsteiler sein, der an die Batterieklemmen angeschlossen ist. Siehe How to Monitor Battery Voltage for Battery Powered Projects für mehr Details dazu. Für genauere Batterieladestandsmessungen kannst du spezielle Batteriemonitor-ICs verwenden, wie den MAX1704X.
Fazit
In diesem Tutorial hast du gelernt, wie man eine batteriebetriebene Wetterstation mit einem ESP32, einem BME280 Sensor und einem e-Paper-Display baut.
Wir haben einen BME280 Sensor verwendet, um Umgebungstemperatur, Luftfeuchtigkeit und Luftdruck zu messen. Und wir haben die ESP32-e-Paper-Weather-Display Software genutzt, um Wetterdaten aus dem Internet anzuzeigen.
Damit hast du alle Bausteine, um deine eigene Version zu bauen, die zum Beispiel Internet-Wetterdaten mit lokalen Wetterinformationen kombiniert. Du könntest auch Informationen von entfernten Sensoren sammeln und auf dem Display hinzufügen.
Viel Spaß beim Basteln und wenn du Fragen hast, frag gerne 😉

