Wetterstation mit E-Paper Display und WLAN-Anbindung

Der folgende Beitrag wurde uns von dem Gastautor Niklas Heinzel zur Verfügung gestellt.

Nach einiger Zeit war es nun mal wieder soweit: Ein neues Projekt stand an und die Wahl fiel auf ein Projekt, welches am Ende eine fertige Wetterstation mit WLAN-Anbindung werden sollte.

In Foren, YouTube-Videos oder Blogs wie diesen hier, entschied man sich zumeist für eine Variante aus TFT-Display (touch/non-touch), OLED-Display, Monochrom-Display oder anderen populären Displaytechnologien.

In diesem Projekt soll es aber vielmehr um den Einsatz eines E-Paper-Displays gehen. Genauer gesagt das 4.2“ 400×300 ePaper Display Modul mit SPI Interface von Waveshare in Kombination mit dem ESP32 aus dem AZ-Delivery Shop.

Zunächst machte ich mich natürlich an die Verkabelung der beiden Komponenten, sehr komfortabel, wenn man keine weitere Peripherie anschließen muss, wie Sensoren, Spannungswandler usw.

Hierzu einmal das Verbindungsdiagram, welches bei allen Displaygrößen gleich bleibt durch die standardisierte SPI-Kommunikation:

Schaltbild

 

Quellcode

Nachdem alle Verbindungen erfolgreich hergestellt sind (Beim Verlöten der Jumper-Kabel mit dem Display nicht wundern, dies kann etwas Zeit in Anspruch nehmen, da das Display auf der Rückseite eine Kupferschicht hat, welche die Wärme des Lötkolbens sehr gut ableitet und den Kolben kühlt), können wir uns nun an die Programmierung des ESP32 machen.

Hierzu benutze ich die hervorragende Bibliothek namens „ESP32-e-Paper-Weather-Display“ von David Bird, einem hervorragenden Maker aus Großbritannien. Er hat mir dabei geholfen die Bibliothek anzupassen, wodurch es nun möglich ist, alles angepasst auf die DACH-Region korrekt anzeigen zu lassen. Am Ende des Blogs werde ich hierzu den Code und die Ergänzungsdateien zum “Main-Code“ als Download bereitstellen.

Hier ein Link zu seinem Github-Repository:

https://github.com/G6EJD/ESP32-e-Paper-Weather-Display

Dabei ist es nur noch nötig wenige Zeilen Code anzupassen für den individuellen Einsatzzweck/Standort. Diese gehen wir nun im Folgenden durch:

Zunächst schauen wir uns die owm_credentials.h Datei an.

// Change to your WiFi credentials
const char* ssid     = "WLAN-SSID";
const char* password = "WLAN-PASSWORT";

// Use your own API key by signing up for a free developer account at https://openweathermap.org/
String apikey       = "hier den API-KEY eintragen!";                      // See: https://openweathermap.org/
const char server[] = "api.openweathermap.org";
//http://api.openweathermap.org/data/2.5/forecast?q=Melksham,UK&APPID=your_OWM_API_key&mode=json&units=metric&cnt=40
//http://api.openweathermap.org/data/2.5/weather?q=Melksham,UK&APPID=your_OWM_API_key&mode=json&units=metric&cnt=1
//Set your location according to OWM locations
String City             = "NAME DES HEIMATORTES";                      // Your home city See: http://bulk.openweathermap.org/sample/
String Country          = "DE";                            // Your _ISO-3166-1_two-letter_country_code country code, on OWM find your nearest city and the country code is displayed
                                                           // https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes
String Language         = "DE";                            // NOTE: Only the weather description is translated by OWM
                                                           // Examples: Arabic (AR) Czech (CZ) English (EN) Greek (EL) Persian(Farsi) (FA) Galician (GL) Hungarian (HU) Japanese (JA)
                                                           // Korean (KR) Latvian (LA) Lithuanian (LT) Macedonian (MK) Slovak (SK) Slovenian (SL) Vietnamese (VI)
String Hemisphere       = "north";                         // or "south"  
String Units            = "M";                             // Use 'M' for Metric or I for Imperial 
const char* Timezone    = "CET-1CEST,M3.5.0,M10.5.0/3";  // Choose your time zone from: https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv 
                                                           // See below for examples
const char* ntpServer   = "0.europe.pool.ntp.org";                  // Or, choose a time server close to you, but in most cases it's best to use pool.ntp.org to find an NTP server
                                                           // then the NTP system decides e.g. 0.pool.ntp.org, 1.pool.ntp.org as the NTP syem tries to find  the closest available servers
                                                           // EU "0.europe.pool.ntp.org"
                                                           // US "0.north-america.pool.ntp.org"
                                                           // See: https://www.ntppool.org/en/                                                           
int   gmtOffset_sec     = 0;    // UK normal time is GMT, so GMT Offset is 0, for US (-5Hrs) is typically -18000, AU is typically (+8hrs) 28800
int  daylightOffset_sec = 3600; // In the UK DST is +1hr or 3600-secs, other countries may use 2hrs 7200 or 30-mins 1800 or 5.5hrs 19800 Ahead of GMT use + offset behind - offset

// Example time zones
//const char* Timezone = "MET-1METDST,M3.5.0/01,M10.5.0/02"; // Most of Europe
//const char* Timezone = "CET-1CEST,M3.5.0,M10.5.0/3";       // Central Europe
//const char* Timezone = "EST-2METDST,M3.5.0/01,M10.5.0/02"; // Most of Europe
//const char* Timezone = "EST5EDT,M3.2.0,M11.1.0";           // EST USA  
//const char* Timezone = "CST6CDT,M3.2.0,M11.1.0";           // CST USA
//const char* Timezone = "MST7MDT,M4.1.0,M10.5.0";           // MST USA
//const char* Timezone = "NZST-12NZDT,M9.5.0,M4.1.0/3";      // Auckland
//const char* Timezone = "EET-2EEST,M3.5.5/0,M10.5.5/0";     // Asia
//const char* Timezone = "ACST-9:30ACDT,M10.1.0,M4.1.0/3":   // Australia

Durch diese ausgelagerten Zeilen Code lassen sich fast alle Einstellungen, die für den erfolgreichen Betrieb von Nöten sind. Alle wichtigen Parameter habe ich voreingestellt. Die gelb hinterlegten Spezifizierungen müssen von Ihnen getroffen werden. Zunächst müssen die WLAN SSID und das Passwort eingetragen werden. Danach den API Key Ihres http://www.openweathermap.org Accounts eingeben, wodurch Sie berechtigt sind, Wetterdaten abzurufen über die frei zugängliche API. Anschließend gilt es nur noch den Namen Ihrer Stadt/Ihres Ortes zu definieren und in Großbuchstaben einzutragen.

Mithilfe dieser ausgelagerten Informationen ist es dem ESP32 nun möglich, über Ihr WLAN auf die API von OpenWeatherMap zuzugreifen und so die benötigten Wetterdaten zu erlangen.

Wenden wir uns nun dem Arduino-Code zu, bei dem in den meisten Fällen kaum Änderungen nötig sein werden. Der Code benötigt neben den vorinstallierten Libraries und den eingebundenen Dateien owm_credentials.h und lang_gr.h (von mir angepasste Sprachenbibliothek) nur die Libraries U8g2_for_Adafruit_GFX, Adafruit_GFX und GxEPD2, die Sie über die Bibliotheksverwaltung installieren können.

(Bitte beachten, dass je nach Version unterschiedliche Definitionen im Code notwendig sind. Der hier gezeigte Code baut auf den neuesten Versionen zum Zeitpunkt der Veröffentlichung auf.)

#include "owm_credentials.h"  // See 'owm_credentials' tab and enter your OWM API key and set the Wifi SSID and PASSWORD
#include <ArduinoJson.h>       // https://github.com/bblanchon/ArduinoJson
#include <WiFi.h>              // Built-in
#include "time.h"              // Built-in
#include <SPI.h>               // Built-in
#define  ENABLE_GxEPD2_display 0
#include <GxEPD2_BW.h>
#include <GxEPD2_3C.h>
#include <U8g2_for_Adafruit_GFX.h>
#include "epaper_fonts.h"
#include "forecast_record.h"
//#include "lang.h"
//#include "lang_cz.h"                // Localisation (Czech)
//#include "lang_fr.h"                // Localisation (French)
#include "lang_gr.h"                // Localisation (German)
//#include "lang_it.h"                // Localisation (Italian)
//#include "lang_nl.h"                // Localisation (Dutch)
//#include "lang_pl.h"                // Localisation (Polish)

#define SCREEN_WIDTH  400.0    // Set for landscape mode, don't remove the decimal place!
#define SCREEN_HEIGHT 300.0

Falls Sie dem Verbindungsdiagramm nicht gefolgt sein sollten, gibt es auch die Möglichkeit, in der .ino-Datei die Anschlüsse vom Display zum ESP32 zu verändern.

// Connections for e.g. LOLIN D32
static const uint8_t EPD_BUSY = 4;  // to EPD BUSY
static const uint8_t EPD_CS   = 5;  // to EPD CS
static const uint8_t EPD_RST  = 16; // to EPD RST
static const uint8_t EPD_DC   = 17; // to EPD DC
static const uint8_t EPD_SCK  = 18; // to EPD CLK
static const uint8_t EPD_MISO = 19; // Master-In Slave-Out not used, as no data from display
static const uint8_t EPD_MOSI = 23; // to EPD DIN

Sketch Download

Gehäuse aus dem 3D-Drucker

Damit wären alle Voraussetzungen für den erfolgreichen Start des Displays geschaffen! Alle Diagramme, Beschriftungen und Routinen sind vorprogrammiert und müssen nicht verändert werden.

Es besteht auch die Möglichkeit, an den ADC des ESP32 einen Akku anzuschließen. Der Akkustand wird dann oben rechts auf dem Display angezeigt. Durch den Deep-Sleep-Mode des ESP32 und der Aktualisierungsrate von 30 Minuten, ist der Akkubetrieb sehr empfehlenswert, da dadurch das Gerät mehrere Wochen mit schon kleineren Akkukapazitäten (<1000mAh) auskommt.

In meinem Fall habe ich mich für den Betrieb mit einem kleinen 5V Netzteil entschieden, da standorttechnisch ein Akkubetrieb wenig sinnhaft direkt neben einer Steckdose wäre.

Um dem Projekt eine schöne Behausung zu geben, habe ich mich mit Autodesk Fusion 360 an das Design eines 3D-Druck-Gehäuses gemacht und folgendes Design ist dabei entstanden:

3D-Entwurf

Es setzt sich zusammen aus einer Art “Bilderrahmen“ für das E-Paper-Display inkl. Aussparungen für das Herausführen der Kabel und einer daran anliegenden Box für den ESP32. Das Gehäuse ist angeschrägt, sodass es nicht vertikal auf dem Tisch oder ähnlichem steht. In dem Vorderteil sind Löcher für threaded inserts integriert, sodass die beiden Teile einfach verschraubt werden können.

Nach dem Druck der Teile habe ich nun die Komponenten zusammengefügt und schon ist alles fertig. Leider konnte ich aus Zeitgründen nur den 3D-Drucker bei meinem Betrieb verwenden, dieser hat jedoch mit starkem Warping zu kämpfen, weshalb ich die verbogenen Gehäuseteile entschuldige.

fertiges Display

fertiges Display 2

Download 3D-Druck-Dateien

Und schon haben wir eine fertige E-Paper-Wetterstation mit ESP32, die zu jeder Tages- und Nachtzeit geeichte Wetterdaten anschaulich präsentiert. Ich hoffe, Sie werden mit dem Projekt Spaß haben und freue mich über die Kommentare und potenzielle Adaptionen. :D

Viele Grüße

Niklas Heinzel

Anmerkung:

schauen Sie auch in die Blogreihe zum Thema E-Paper Display (Teil 1, Teil 2)

 

DisplaysEsp-32Projekte für anfängerSmart home

45 Kommentare

Siegfried

Siegfried

Es hat schon alles sehr gut funktioniert. Nach einem Stromausfall kommet jetzt an der seriellen Schnittstelle folgende Meldung:
WiFi connected at: 192.168.178.92
Failed to obtain time
Busy Timeout!
Entering 1800-secs of sleep time
Awake for : 22.431-secs
Starting deep-sleep period…
und das war’s.
Hat jemand eine Ahnung woran das liegen kann?
Gruß Siegfried

Andreas Wolter

Andreas Wolter

@Bernd: externe Industriesensoren zu verwenden, ist etwas schwierig, da sie meist nicht quelloffen sind. Ich habe folgendes Buch gefunden, in dem scheinbar auch die Verwendung dieser Sensoren mit einem Raspi beschrieben wird: https://www.amazon.de/Raspberry-Pi-Erfassung-von-Umweltdaten/dp/3907857283
Vielleicht hilft das etwas weiter.

Wenn nicht klar ist, wie die Übertragungsprotokolle aussehen, wird man zum Detektiv. Man müsste dann mit einem Logic Analyzer die Datenpakete analysieren. Einen Beitrag zum Analyzer hatten wir auch kürzlich hier im Blogbereich.

Grüße,
Andreas Wolter
AZ-Delivery Blog

Bernd

Bernd

Zuerst einmal vielen Dank an Niklas Heinzel und Andreas Wolter für das tolle Projekt.
Ich trage mich schon länger mit dem Gedanken eine WLAN-Wetterstation selbst zu bauen, habe aber Aussensensoren je einer Velleman WS3080 und einer Ventus W830 (433 MHz) Funk-Wetterstation und würde diese lokalen Informationen gerne in die E-Paper Wetterstation einbinden. Hat jemand eine Idee wie ich an die Sensordaten rankommen kann? Bei den Herstellern, Verkäufern und im Internet hab ich leider noch nichts gefunden wie ich das Funkprotokoll empfangen und auswerten könnte. Hätte da vielleicht jemand einen Tipp oder Link?
MfG
Bernd

Andreas Wolter

Andreas Wolter

@Pascal: kann das eventuell am daylightOffset liegen?

Pascal

Pascal

Hallo zusammen,
bei mir Funktioniert alles soweit ganz gut habe auch begonnen mein eigenes Design auf Basis des Programms zu machen nun ist mir aufgefallen das die Sonnenaufgangs und Untergangszeit nicht mit dem Übereinstimmt was openweathermap.org auf der Internetseite schreibt ich liege 2 Stunden zu früh. Die der Zeitzone stimmt, der ntpServer stimmt und die Uhrzeit wird auch korrekt angezeigt nur eben nicht die Zeiten des Sonnen- auf/untergangs. Hat das Problem noch jemand oder sogar gelöst bekommen?

Wolfgang Rohne

Wolfgang Rohne

Die Änderung von asize + 28 auf asize + 12 hat auch bei mir funktioniert…
@Andreas Wolter
@Atze
Danke für den Tip

Andreas Wolter

Andreas Wolter

@Raphael: auch in diesem Fall empfehle ich, die GxEPD2 Beispiele zu verwenden, um herauszufinden, wie das Display arbeitet. Die Liste der unterstützten Displays ist sehr lang. Das sieht man dort in den Konfigurationsdateien. Sie arbeiten in verschiedenen Modi. Eventuell wird der hier im Beitrag verwendete Modus von dem Display nicht unterstützt, oder er muss anders angewendet werden. Das findet man mit den Beispielen heraus.

Wenn der Inhalt einfach überschrieben wird, ohne vorher gelöscht zu werden, könnte man vor der Ausgabe des neuen Bildes ein display.clear() ausführen. Das wäre ein Workaround. Normalerweise sollte der Puffer des Displays mit display.display(false); aktualisiert werden.

Grüße,
Andreas Wolter
AZ-Delivery Blog

Raphael

Raphael

Hallo zusammen,
möchte die Infos auf dem dreifarbigen (b/w/r) 7,5Zoll ePaper von Waveshare mit 800×480 anzeigen lassen. Aber irgendwie funktioniert das Refreshen nicht, also er löscht den Inhalt auf dem Display nicht sondern schreibt nur die neuen Inhalte darüber. Vor allem bei der Windrichtung hat man dann mehrere Dreiecke oder der Aktualisierungszeitpunkt ist irgendwann nur noch ein schwarzer Balken.
Was mache ich falsch? Andere Projekte werden richtig angezeigt, die Verkabelung sollte also ok sein.

Andreas Wolter

Andreas Wolter

@Fabrizio Maria Bianchi: there is the pinout: https://cdn.shopify.com/s/files/1/1509/1638/files/ESP-32_NodeMCU_Developmentboard_Pinout.pdf?v=1609851295
(product page)

If you have problems with the e-paper display try the GxEPD2 example “Hello World” to find the correct settings.

Regards,
Andreas Wolter
AZ-Delivery Blog

Fabrizio Maria Bianchi

Fabrizio Maria Bianchi

Hi, I’ve implemented your project on an ESP-WROOM-32 module, purchased from AZ-Del, and a Waveshare ePaper 4.2" display. The sketch compiles perfectly, without any error, and I can load it into the ESP32 memory. On the serial monitor I see the device connecting with success to the local WiFi but the display remains white.
I assume it’s a matter of pin assignation as I’ve seen that the pinout of the Lolin 32 is different from ESP-WROOM-32. Do you have the right pin assignation for this latter modul? I’ve tried some changes but with no success. I thank you in advance for any help you may give to me
Regards
Fabrizio

Atze

Atze

@Andreas Wolter
Jo, das war’s. Bei der Berechnung der x- und y-Position jeweils “(asize + 12)” statt “(asize + 28)”, und schon passt der Kittel. Super, danke.
Gruß Atze

Andreas Wolter

Andreas Wolter

@Atze: das müsste die Funktion arrow() (Zeile 390) sein. dort wird die Anzeige des Dreiecks berechnet und ausgegeben.

@Rolf: ich kann Ihnen (wie auch Peter Spiller) nur den Tipp geben, einen oder mehrere Schritte zurückzugehen. Es sieht so aus, als würde die Arduino IDE generell nicht so laufen, wie sie sollte. Daher würde ich dort Schritt für Schritt ansetzen, um das zum Laufen zu kriegen. Zuerst das Blink Beispiel. Danach dann die einzelnen Komponenten wie Sensoren und das Display und ganz am Ende den Sketch für die Wetterstation.

Atze

Atze

Hallo,
also bei mir hat eigentlich alles auf Anhieb funktioniert. Coole Sache…
Allerdings ist mir aufgefallen, dass der “Pfeil” (schwarzes Dreieck) für die Windrichtung außerhalb des Kreises ist, wie man es auch auf dem Bild mit dem gedruckten Rahmen sieht. Wenn man sich aber die original Bilder auf Github ansieht, sollte er innerhalb liegen. Hat jemand eine Ahnung, wie man das fixen kann?
Gruß Atze

Rolf

Rolf

@Andreas Wolter
Danke für den Hinweis. Leider haben die Tipps nichts gebracht. Ich verwende tatsächlich Linux. Ein Nachinstallieren von Python und den Modulen brachte keinen Erfolg.
Merkwürdigerweise läuft der Sketch unter Win10 ohne Probleme durch den Compiler, obwohl ich unter Win10 Python überhaupt nicht installiert habe.

Peter Spiller

Peter Spiller

Hallo zusammen
Ich habe lange mit dem ePaper 4.2 und dem Programm Wetterstation probiert und es nicht hinbekommen. Das Programm lief korrekt ab (Anzeigen im seriellen Monitor waren zu sehen), das ePaper Display zeigte keine Reaktion.
Auf Anregung von Andreas Wolter habe ich dann mein ePaper mit dem Beispiel GxEPD2_HelloWorld getestet. Dort habe alle Versionen des ePaper 4.2 getestet. Bei einer Version startete das Display, es war die Color Version. Ich hatte eine schwarz-weiß Version gekauft, wahrscheinlich aber eine Farbversion erhalten. Daraufhin habe ich im Programm die entsprechende Zeile (etwa 60) geändert (siehe Beitrag von Andreas Wolter vom 10. Februar und Wolfgang Rohne vom 15. Februar).
Jetzt ist die Anzeige der Wetterdaten wie sie sein soll.

Andreas Wolter

Andreas Wolter

@Peter Spiller: Die Ausgabe der Daten sieht ganz normal aus. Ich vermute, dass die Pins nicht korrekt verkabelt sind. Ich schreibe Ihnen dazu eine E-Mail.

Peter Spiller

Peter Spiller

Hallo,
danke für die Schnelle Bearbeitung, ich habe die entsprechende Zeile geändert, das Programm läuft jetzt einwandfrei, die Daten sind im seriellen Monitor zu sehen.
Leider habe ich noch ein Problem, das EPaper Disaplay zeigt keine Reaktion. Ich habe es mit beiden Varianten unter void InitialiseDisplay und auch mit einem ESP32 DEVkitV1 probiert, keione Reaktion.
Beim Hochladen kommen folgende Meldungen:

esptool.py v3.1
Serial port COM3
Connecting….
Chip is ESP32-D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: 94:b9:7e:d9:56:b0
Uploading stub…
Running stub…
Stub running…
Changing baud rate to 921600
Changed.
Configuring flash size…
Flash will be erased from 0×0000e000 to 0×0000ffff…
Flash will be erased from 0×00001000 to 0×00005fff…
Flash will be erased from 0×00010000 to 0×000ddfff…
Flash will be erased from 0×00008000 to 0×00008fff…
Compressed 8192 bytes to 47…
Writing at 0×0000e000… (100 %)
Wrote 8192 bytes (47 compressed) at 0×0000e000 in 0.1 seconds (effective 565.6 kbit/s)…
Hash of data verified.
Compressed 17104 bytes to 11804…
Writing at 0×00001000... (100 %)
Wrote 17104 bytes (11804 compressed) at 0×00001000 in 0.5 seconds (effective 261.4 kbit/s)…
Hash of data verified.
Compressed 843712 bytes to 518658…

Wrote 843712 bytes (518658 compressed) at 0×00010000 in 8.7 seconds (effective 778.5 kbit/s)…
Hash of data verified.
Compressed 3072 bytes to 128…
Writing at 0×00008000... (100 %)
Wrote 3072 bytes (128 compressed) at 0×00008000 in 0.1 seconds (effective 460.3 kbit/s)…
Hash of data verified.

Kann mir jemand weiterhelfen ?

Danke

Andreas Wolter

Andreas Wolter

@Peter Spiller und @ Claus: der Fehler tritt auf, da MAX_READINGS das Array mit 24 Elementen deklariert, welches somit von 0 bis 23 zählen darf. Also nicht bis kleiner gleich 24, denn dann würde bis 24 gezählt werden und somit über die Grenze des Arrays laufen, was ein Segmentation Fault auslösen dürfte. Ich habe das im Code geändert. Die Zeile 190 muss so aussehen:
for (int r = 1; r < max_readings; r++)

@Rolf: das ESPTool ist u.a. für den Upload zum Mikrocontroller zuständig. Damit kann man auch den Flash löschen und solche Dinge. Es scheint, als wäre der ESP32 Arduino Core nicht korrekt installiert. Ich schlage vor, den nochmal zu deinstallieren. Mir scheint, dass Sie Linux verwenden. Ich denke, dass Sie Python 3 installieren sollten, falls das noch nicht installiert ist (war ein Hinweis aus einem Forum). Ich verwende folgenden Link als als zusätzliche Boardverwalter URL für den ESP32 Core:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

Vielleicht diesen testen und danach über den Boardverwalter den ESP32 Core erneut installieren.

Grüße,
Andreas Wolter
AZ-Delivery Blog

Peter Spiller

Peter Spiller

Hallo zusammen,
ich versuche seit Tage das Epaper Display zum Laufen zu bringen.
Ich beutze einen ESP32 Lolin und Waveshare 4.2 e-Paper Modul Rev 2.1
Sketch wird kompiliert, es erscheinen die Meldungen:
C:\Arduino\WaveshareWetter\WaveshareWetter.ino: In function ‘void DrawForecastSection(int, int)’:
C:\Arduino\WaveshareWetter\WaveshareWetter.ino:201:45: warning: iteration 23 invokes undefined behavior [-Waggressive-loop-optimizations]
temperature_readings® = WxForecast®.Temperature;
~~~~~~~~~~~~^~~~~~~~~~~
C:\Arduino\WaveshareWetter\WaveshareWetter.ino:192:21: note: within this loop
for (int r = 1; r <= max_readings; r++) {
der Sketch wird hochgeladen, die Wetteranzeige im serillen Monitor funktioniert, aber das ePaper bleibt zeig tkeine Reaktion, egal welche Einstellung in void InitialiseDisplay ich benutze.
Vielleicht kann mir jemand helfen.
Danke

Rolf

Rolf

Hallo zusammen, beim Kompilieren in der Arduino IDE erhalte ich die Fehlermeldung:
“Traceback (most recent call last):
File “/home/xxxxxx/.arduino15/packages/esp32/tools/esptool_py/3.0.0/esptool.py”, line 38, in
import serial
ImportError: No module named serial"
Es handelt sich um ein Python Modul, das in meiner Installation nicht vorhanden ist. Der Aufruf erfolgt aus einem Tool namens “esptool.py”, dessen Zweck mir nicht ganz klar ist. Ich habe nun versucht, dieses Modul nachzuinstallieren, komme aber nicht mehr weiter.
Welcher Python Profi kann mir dazu Hilfestellung leisten?

Claus

Claus

Hallo, ich habe Probleme beim kompilieren bei der forecast_record.h:
#define max_readings 24

Forecast_record_type WxConditions1;
Forecast_record_type WxForecast[max_readings];

Meldung: was not declared in this scope…

Hatz jemand ne Idee?

danke,

Claus

Andreas Wolter

Andreas Wolter

@Andreas Wisskirchen: es scheint, als wäre diese Bibliothek nicht installiert (Siehe Absatz Quellcode).
https://github.com/G6EJD/ESP32-e-Paper-Weather-Display

Dort die ZIP runterladen und in der Arduino IDE unter Sketch→Bibliothek einbinden→ .ZIP Bibliothek hinzufügen.

Grüße,
Andreas Wolter
AZ-Delivery Blog

Andreas Wisskirchen

Andreas Wisskirchen

jetzt habe ich das:

Wetterstation:92:20: fatal error: common.h: No such file or directory
#include
^
compilation terminated.
exit status 1
common.h: No such file or directory

Andreas Wolter

Andreas Wolter

@Andreas Wisskirchen: wenn Sie in der Arduino IDE die Bibliotheksverwaltung öfnen und in die Suche HTTPclient eingeben, finden Sie in den Suchergebnissen die Bibliothek HttpClient von Adrian McEwen. Wenn Sie diese installieren, sollte der Fehler nicht mehr erscheinen.

Grüße,
Andreas Wolter
AZ-Delivery Blog

Andreas Wisskirchen

Andreas Wisskirchen

Ich habe das:
In file included from D:\Programmieren\Wetterstation\Wetterstation.ino:92:0:
common.h:6:24: fatal error: HTTPClient.h: No such file or directory
#include
^
compilation terminated.
exit status 1
HTTPClient.h: No such file or directory

Welche Bib soll das sein?

Wolfgang Rohne

Wolfgang Rohne

@Andreas Wolter
Halli Hallo,
ich habe das W…. 4,2’ Farbdisplay ans laufen bekommen ( zumindest erstmal in BW ).
Dazu folgende Zeile: ( in etwa bei Zeile 60 )
// GxEPD2_BW<GxEPD2_420, GxEPD2_420::HEIGHT> display(GxEPD2_420(/CS=D8/ EPD_CS, /DC=D3/ EPD_DC, /RST=D4/ EPD_RST, /BUSY=D2/ EPD_BUSY));
Geäandert in: ( BW in 3C und 420 in 420c geändert )
GxEPD2_3C<GxEPD2_420c, GxEPD2_420c::HEIGHT> display(GxEPD2_420c(/CS=D8/ EPD_CS, /DC=D3/ EPD_DC, /RST=D4/ EPD_RST, /BUSY=D2/ EPD_BUSY));
Zwar sieht der Refresh vom Display noch merkwürdig aus, aber das bekomme ich auch noch hin. Ebenso einzelne Teile in rot zu färben…
und ganz am Ende
display.init(115200, true, 2, false);
so gelassen. Bei
display.init(0);
initialisierte das Display nicht….
Danke für den Tip
Wolle

Andreas Wolter

Andreas Wolter

@Michael: bei projektunspezifischen Fehlern bitte mal den technischen Support kontaktieren. Die ESPs sind manchmal etwas zickig. Man kann einen 10µF Kondensator von EN nach GND anschließen, um die Taste nicht benutzen zu müssen. Siehe hier: https://randomnerdtutorials.com/solved-failed-to-connect-to-esp32-timed-out-waiting-for-packet-header/

Vielleicht hilft das weiter.

Grüße,
Andreas Wolter
AZ-Delivery Blog

Michael

Michael

Hallo, ich habe das AZ-Del ESP32 und bekomme folgende Fehlermeldung.

Arduino: 1.8.19 (Windows Store 1.8.57.0) (Windows 10), Board: “ESP32 Dev Module, Disabled, Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS), 240MHz (WiFi/BT), QIO, 80MHz, 4MB (32Mb), 921600, None”

Der Sketch verwendet 867362 Bytes (66%) des Programmspeicherplatzes. Das Maximum sind 1310720 Bytes.

Globale Variablen verwenden 60864 Bytes (18%) des dynamischen Speichers, 266816 Bytes für lokale Variablen verbleiben. Das Maximum sind 327680 Bytes.

D:\XXXXXXX\ArduinoData\packages\esp32\tools\esptool_py\3.0.0/esptool.exe —chip esp32 —port COM5 —baud 921600 —before default_reset —after hard_reset write_flash -z —flash_mode dio —flash_freq 80m —flash_size detect 0xe000 D:\XXXXXXX\ArduinoData\packages\esp32\hardware\esp32\1.0.6/tools/partitions/boot_app0.bin 0×1000 D:\XXXXXXX\ArduinoData\packages\esp32\hardware\esp32\1.0.6/tools/sdk/bin/bootloader_qio_80m.bin 0×10000 C:\Users\micha\AppData\Local\Temp\arduino_build_757085/Wetterstation.ino.bin 0×8000 C:\Users\micha\AppData\Local\Temp\arduino_build_757085/Wetterstation.ino.partitions.bin

esptool.py v3.0-dev

Serial port COM5

Connecting……..___

Chip is ESP32-D0WDQ6 (revision 1)

Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None

Crystal is 40MHz

MAC: 9c:9c:1f:e9:f1:d8

Uploading stub…

Running stub…

Stub running…

Changing baud rate to 921600

Changed.

Configuring flash size…

Warning: Could not auto-detect Flash size (FlashID=0xffffff, SizeID=0xff), defaulting to 4MB

Compressed 8192 bytes to 47…

A fatal error occurred: Timed out waiting for packet content

A fatal error occurred: Timed out waiting for packet content

Ich hab schon den Bootknopf gedrückt, ein Video gefunden, nachdem man den Pin G2 auf GND setzen muss.

Hilft alles nichts

Andreas Wolter

Andreas Wolter

@Dieter Möller: die Änderung der Parameter in der display.init() funktionierte bei dem Leser Sven mit dem Wroom 32. Entweder mit einer 0 oder ganz ohne Parameter.
Es gibt dann noch weitere Fehlerquellen. Ganz simpel zum Beispiel das große Breadboard hat getrennte + und – Bahnen. Das sind die äußeren. Dort muss man in der Mitte Brücken stecken. Sieht man nicht sofort.
Dann muss man das richtige Display auswählen. Schauen Sie dazu in die GxEPD2 Bibliothek nach den Examples, ob damit das Display funktioniert.
Die Pjns für die ISP Schnittstelle finden Sie im Datenblatt. Das sind MISO, MOSI, SCK, CS wobei CS oft auch selbst gewählt werden kann. Alle anderen Pins wählen Sie selbst. Allerdings sind die ESPs manchmal etwas eigensinnig, da die Pins mehrfach mit verschiedenen Funktionen belegt sind.

Wenn das nicht hilft, schicken Sie mir über die blogs@… Adresse Fotos von Ihrem Aufbau und dann schauen wir weiter.

Grüße,
Andreas Wolter
AZ-Delivery Blog

Dieter Möller

Dieter Möller

Besten Dank für das wirklich tolle Programm. Leider bleibt bei mir das Display dunkel, trotz aller -hier beschrieben Tips. Ich benutze einen ESP32 WROOM von AZ-Delivery und ein 4.2 epaper Display von W…. Welche PIN Belegung muss ich denn beim ESP32 WROOM anwenden? In den Post`s hier habe ich gelesen, dass es schon jemand geschafft hat, also muss es doch gehen!
Viele Grüsse

Andreas Wolter

Andreas Wolter

@Wolfgang Rohne: das jeweilige Display wird mit dieser Zeile initialisiert:
GxEPD2_BW<GxEPD2_420, GxEPD2_420::HEIGHT> display(GxEPD2_420(/CS=D8/ EPD_CS, /DC=D3/ EPD_DC, /RST=D4/ EPD_RST, /BUSY=D2/ EPD_BUSY));

Das entspricht dem 420er Display in zwei Farben (BW; Black/White). Für das dreifarbige Display müsste es ungefähr so aussehen:
GxEPD2_3C<GxEPD2_420, GxEPD2_420::HEIGHT> display(GxEPD2_420(/CS=D8/ EPD_CS, /DC=D3/ EPD_DC, /RST=D4/ EPD_RST, /BUSY=D2/ EPD_BUSY));

3C steht für 3-Color.
die 3C Bibliothek wird in dem Sketch auch schon inkludiert: #include

Um das vorher zu testen, empfehle ich die Beispiel-Sketches der GxEPD2 Bibliothek. Sie müssen dort in der Display Selection nach dem Block mit ESP32 und den 3C Displays suchen. Die jeweilige Zeile können Sie dann in den Wetterstations-Sketch kopieren und die Pinnummern austauschen.

Um dann Farben zu verwenden, schauen Sie in dem Beispiel nach dieser Zeile:
display.setTextColor(display.epd2.hasColor ? GxEPD_RED : GxEPD_BLACK);

GxEPD_RED nutzt statt Schwarz die rote Farbe z.B.

Probieren Sie es aus und lassen uns bitte wissen, ob es funktioniert hat.

Grüße,
Andreas Wolter
AZ-Delivery Blog

Sven

Sven

Hallo zusammen,

ja, auch ich habe es geschafft :-).
Danke an Tom – mein Waveshare Display erwachte ebenfalls erst nach der Änderung von display.init(115200, true, 2, false); in display.init();

Zuvor hatte ich ein paar dunkle Momente ob der Vielfalt an ESP32-Boards mit der Anpassung der GPIO´s – also PIN Belegung. Eine Nacht drüber geschlafen, läuft nun auf meinem ESP32 WROOM von AZ-Delivery

Herzlichen Dank an Niklas für die Bereitstellung von Sketch/Anleitung/3D Druck Dateien. Die 3D Druck Dateien musste ich auch an das Display anpassen, Waveshare scheint hier auch immer mal wieder am Design zu basteln.

Wolfgang Rohne

Wolfgang Rohne

Hallo und Moin,
würde dieses Projekt auch mit einem 3-Farb 4,2 Display der bekannten Firma W*****funktionieren ?
Oder sind dafür Änderungen am Code notwendig und wenn ja, gibt es Tipps wie und wo ?
Danke und bleibt auf Deck
Wolle

Wolfgang Menzel

Wolfgang Menzel

Oh, Daaannnke!!! Nach den installieren der .zip und display.init(0) funktioniert es. Ich verwende ein Joyit ESP32 mit dem 4.2inch e-Paper. Falls jemand Interesse hat und dieses Display bei AZ noch nicht verfügbar ist, ich habe es über BERRYBASE gekauft.
Danke nochmals und viel Erfolg weiterhin!

Andreas Wolter

Andreas Wolter

@Wolfgang Menzel
Das sind Programmteile der ESP32 E-Paper Bibliothek. Stellen Sie sicher, dass Sie den aktuellen ESP32 Arduino Core installiert und den ESP32 ausgewählt haben. Außerdem brauchen Sie die angegebenen Bibliotheken inklusive dieser hier:
https://github.com/G6EJD/ESP32-e-Paper-Weather-Display
Die können Sie als ZIP herunterladen und in der Arduino IDE als ZIP hinzufügen.

Grüße,
Andreas Wolter

Wolfgang Menzel

Wolfgang Menzel

Hallo,
ich habe versucht, das Projekt zu kompilieren. Leider kommen einige Fehlermeldungen wegen fehlender .h Dateien. Diese habe ich dann vom Originalprojekt heruntergeleden, so dass dieses jetzt funktioniert. Allerdings kommen weitere Fehler, wie zB:
undefined reference to `hPa_to_inHg(float)’
undefined reference to `mm_to_inches(float)’
undefined reference to `mm_to_inches(float)’
undefined reference to `NormalizedMoonPhase(int, int, int)’
DrawMainWeatherSection(int, int)‘:
undefined reference to `TitleCase(String)’
Kann da jemand was dazu sagen?

Gruß
Wolfgang

Andreas Wolter

Andreas Wolter

ich habe den Link zum Display ergänzt. Leider gibt es aktuell keine E-Paper Display im AZ-Shop. Das soll sich aber in Zukunft ändern.

Grüße,
Andreas Wolter

Jürgen

Jürgen

Hi,
wiedermal ein tolles Tutorial von Dir! Vielen Dank dafür!
Da ich schon einige Zeit ein 4,2 400×300 ePaper Display Modul zu liegen hatte, habe ich mich mal mit einem ESP-WROOM-32 an die Umsetzung gemacht und die GPIO’s entsprechend verändert. Das kompilieren ist allerdings immer bei #include hängen geblieben (file not found!?). Nach der Änderung (trial and error ,-) ) in #include “common.h” hat’s dann geklappt.
Vom Display selbst bin ich ein wenig enttäuscht. Mein 1,54inch-Display lässt sich um einiges besser ablesen. Eine Idee woran das liegen könnte?

Ingo

Ingo

Hallo Andreas, vielen Dank für den interessanten Artikel! Kannst Du mir sagen welches Display es genau ist, dass hier verwendet wird oder gibt es ggf. Alternativen?

Danke und Gruß

Ingo

Juergen

Juergen

Bei der Wetterstation.ino erhalte ich folgende Fehlermeldung: ‘obtain_wx_data’ was not declared in this scope. Zeile if (RxForecast == false) …. in void setup().
Ich verwende die Arduino IDE 1.8.16.
MfG
Juergen

Juergen

Juergen

Ich habe die genannte Datei in der Zwischenzeit gefunden.
Hinweis in der Datei: platformio.ini.
MfG
Juergen

Juergen

Juergen

Wo kann ich denn die Datei “M5CoreInk.h” finden ?
Diese Datei wird z.B. für die Beispieldatei "M5_CoreInk.ino benötigt.
Verwendet habe ich: ESP-e-Paper_Weather-Display-master.zip.
MfG
Juergen

Michael Obe

Michael Obe

Hallo,

bei mir reklamiert das Programm die und

Eine Idee, was ich übersehen habe?

Danke

Stefan

Stefan

Cooles Projekt! Schaut klasse aus! Warum gibts denn im Shop keine e-Paper Displays?

Tom

Tom

Hallo,
ich musste lt Pkt. 4 in der README.md auf GitHub die Zeile:
display.init(115200, true, 2, false); durch display.init(); ersetzen.
Erst dann erwachte mein 4,2 Zoll Waveshare Display.
Vielleicht hilft dies ja auch jemanden.
Gruß Tom

Einen Kommentar hinterlassen

Alle Kommentare werden vor der Veröffentlichung moderiert