Wetterstation mit E-Paper Display und WLAN-Anbindung - AZ-Delivery

The following article was made available to us by the guest author Niklas Heinzel.

After a while, it was time again: a new project was on and the choice fell on a project, which in the end should be a finished weather station with a WLAN connection.

In forums, YouTube videos, or blogs like this, you mostly decided on a variant from TFT display (touch/non-touch), OLED display, monochrome display, or other popular display technologies.

This project, however, should be about the use of an e-paper display. More precisely that 4.2 “400 × 300 EPAPER DIFFORM Module With SPI interface of Waveshare in combination with the ESP32 from the AZ-Delivery Shop.

First of all, I made myself the cabling of the two components, very comfortable if you don't have to connect another periphery, such as sensors, voltage converters, etc.

On this one that Connecting diagram, remains the same for all display sizes due to the standardized SPI communication:

Circuit diagram


Source Code

After all the connections have been successfully established (do not be surprised with the display when soldering the jumper cable, this can take some time because the display on the back has a copper layer that derives the heat of the soldering iron very well and cools the piston), we can now start programming the ESP32.

To do this, I use the excellent library called “ESP32-e paper-Weather display“By David Bird, an excellent maker from Great Britain. He helped me adapt the library, which means that it is now possible to correctly display everything adapted to the roof region. At the end of the blog, I will provide the code and supplementary files for the “main code” for download.

Here is a link to his Github repository:

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

It is only necessary to adapt a few lines of code for the individual application/location. We are now going through this below:

First, we'll see them owm_crediales.h File.

// Change to your wifi credentials
const char* SSID     = "WLAN SSID";
const char* password = "WLAN password";

// use your own API key by signing up for a free developmentoper account at https://openweathermap.org/
String Apikey       = "Enter the API key here!";                      // Lake: 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 of the hometown";                      // your home city lake: http://bulk.openweathermap.org/sample/
String Country          = "De";                            // your _ISO-3166-1_TWO-LETTER_CODETRY_CODE COUNTY 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 (yes)
                                                           // Korean (kr) Latvian (la) lithuanian (LT) Macedonian (MK) Slovak (SK) Slovenian (SL) Vietnamese (VI)
String Hemisphere       = "North";                         // Or "South"
String Unit            = "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 
                                                           // Lake 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 server
                                                           // EU "0.Europe.pool.ntp.org"
                                                           // us "0.north-arica.pool.ntp.org"
                                                           // Lake: https://www.ntppool.org/en/                                                           
intimately   GMTOFFSET_SEC     = 0;    // UK normal time is GMT, so GMT OFFSET IS 0, for us (-5hrs) is typicalally -18000, au is typical (+8HRS) 28800
intimately  daylightoffset_sec = 3600; // In the UK DST IS + 1HR OR 3600-SECs, other Countries May Use 2HRS 7200 OR 30mins 1800 OR 5.5HRS 19800 AHAD 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

With these outsourced lines of code, almost all settings that are necessary for successful operation can be used. I have prescribed all important parameters. The yellow stored specification must be hit by them. First, the WLAN SSID and the password must be entered. Then the API key yours http://www.openweathermap.org Enter Accounts, which enables you to access weather data via the freely accessible API. Afterward, it is only important to define the name of your city/place and to enter them in capital letters.

With the help of this outsourced information, the ESP32 is now possible to access the API from OpenWeatherMap via your WLAN and thus obtain the required weather data.

Now let's turn to the Arduino code, in which hardly any changes will be necessary in most cases. In addition to the pre-installed libraries and the integrated files, the code needs owm_crediales.h and Lang_gr.H (Language library I adapted) only the Libraries U8G2_FOR_ADAFRUIT_GFX, adafruit_gfx, and Gxepd2that you can install through the library management.

(Please note that different definitions in the code are necessary depending on the version. The code shown here builds on the latest versions at the time of publication.)

#include "owm_crediales.h"  // See 'owm_crediales' 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 "long.h"
//#include "Lang_cz.H" // Localization (Czech)
//#include "Lang_fr.H" // Localization (French)
#include "Lang_Gr.H"                // Localization (German)
//#include "Lang_it.H" // Localization (Italian)
//#include "Lang_nl.h" // Localization (Dutch)
//#include "Lang_pl.h" // Localization (polish)

#define Screen_Width  400.0    // Set for Landscape Mode, Don't Remove the Decimal Place!
#define Screen_height 300.0

If you do not follow the connection diagram, changing the connections from the display to the ESP32 in the .ino file is also possible.

// 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

Housing from the 3D printer

This would create all the prerequisites for the successful start of the display! All diagrams, labels, and routines are inevitable and do not have to be changed.

There is also the possibility to connect a battery to the ADC of the ESP32. The battery level is then displayed on the top right of the display. Due to the Deep Sleep mode of the ESP32 and the update rate of 30 minutes, the battery operation is highly recommended, as this creates the device with smaller battery capacities (<1000mAh) for several weeks.

In my case, I chose the operation with a small 5V power supply, since a battery operation in terms of location in terms of location would be not very sensible right next to a socket.

In order to give the project a nice dwelling, I started with Autodesk Fusion 360 on the design of a 3D print housing, and the following design was created:

3D design

It is made up of a kind of “picture frame” for the e-paper display including recesses for the cables to remove the cables and a box for the ESP32. The housing is arched so that it is not vertically on the table or the like. Holes for threaded inserts are integrated into the front part so that the two parts can be simply screwed.

After printing the parts, I have now put together the components and everything is ready. Unfortunately, due to time constraints, I was only able to use the 3D printer during my operation, but it has to deal with strong warping, which is why I excuse the bent housing parts.

finished display

Finished display 2

Download 3D print files

And we already have a finished e-paper weather station with ESP32, which is clearly presented at any time of the day and night. I hope you will have fun with the project and I look forward to the comments and potential adaptations. : D

Best regards

Niklas Heinzel

Annotation:

Also look at the blog series on e-paper display (Part 1, Part 2)


DisplaysEsp-32Projekte für anfängerSmart home

58 comments

Michael

Michael

Schade dass die Autodesk Fusion Quelldateien nicht dabei sind, sonst könnte man das Gehäuse noch etwas anpassen.
Ansonsten ein schöner Beitrag, danke!

Christian

Christian

Zum Thema Batterieanzeige: die ist bereits im Code drinnen. Man muss einen Spannungsteiler zwischen Bat+ und GND aus 2 Stück 100kOhm Widerständen aufbauen und diesen mit GPIO 35 verbinden. Dann erscheint das Batterie-Symbol.

Christian

Christian

Hi,
würde das gern nachbauen und für 1:1 würden meine bescheidenen Fähigkeiten wohl auch reichen. Ich würde aber gern einen echten Außensensor mit darstellen, dessen Dasten bereits per MQTT in meinem Netzwerk verfügbar sind. Das ist mit Sicherheit nicht schwierig und ich stelle die Daten bereits auf einem anderen ESP8266 mit SPI Display auf Basis von EasyESP dar, trotzdem wäre ich für einige Hinweise dankbar!

Andreas Wolter

Andreas Wolter

@Klaus-Hermann Otto Plöger: danke für den Hinweis. Ja das ist tatsächlich etwas verwirrend. Das wurde im Original schon so angelegt. Ich hatte es nur bearbeitet und erweitert.

Grüße,
Andreas Wolter
AZ-Delivery Blog

Klaus-Hermann Otto Plöger

Klaus-Hermann Otto Plöger

Moin
Mir gefällt der Beitrag sehr gut, da er für mein etwas hochgestochenen Ziele, leicht erweiterungsfähig ist. Mit der Übersetzung habe ich etwas Magenschmerzen, weil “gr” der Ländercode für Griechenland ist. Deshalb habe ich die Datei lang_gr.h in lang_de.h umbenannt. Gerne wieder Klaus

Thorsten Ahlborn

Thorsten Ahlborn

Hallo,
Bei mir werden auch die falschen Auf-Untergangszeiten angezeigt.
Lösung:
drawString(x + 7, y + 70, ConvertUnixTime(WxConditions0.Sunrise).substring(0, (Units == “M” ? 5 : 7)) + " " + TXT_SUNRISE, LEFT);
drawString(x + 7, y + 85, ConvertUnixTime(WxConditions0.Sunset).substring(0, (Units == “M” ? 5 : 7)) + " " + TXT_SUNSET, LEFT);

durch:

drawString(x + 7, y + 70, ConvertUnixTime(WxConditions0.Sunrise + WxConditions0.Timezone).substring(0, 5) + " " + TXT_SUNRISE, LEFT);
drawString(x + 7, y + 85, ConvertUnixTime(WxConditions0.Sunset + WxConditions0.Timezone).substring(0, 5) + " " + TXT_SUNSET, LEFT);

ersetzen.

Das 3D Gehäuse hier ist leider zu mittig, Es wird die oberste Zeile vom Display ausgeblendet und unten der Silikonrand mit angezeigt.

Als sehr gut passend hat sich dieses Gehäuse gezeigt: https://www.thingiverse.com/thing:5157668/files

Viele Grüße

minimaxer

minimaxer

@Andreas Ja, vielen Dank! Werde ich probieren und hätte da auch mal selbst drauf kommen können🤔

Andreas Wolter

Andreas Wolter

@Minimaxer: mir ist nichts bekannt darüber, dass automatisch auf dem Display eine Akkuladestandsanzeige eingeblendet wird. Das müsste man programmieren und es ist auch etwas Hardware notwendig. Ich habe dazu das hier gefunden:
https://www.pangodream.es/esp32-getting-battery-charging-level
(in englische Sprache)

Anschließend muss man den Code in den aus diesem Blogbeitrag hier integrieren.

Grüße,
Andreas Wolter
AZ-Delivery Blog

Minimaxer

Minimaxer

Hallo,

ich benutze das Board ESP32 Lolin LOLIN32 hier aus dem Shop zusammen mit dem 4,2 " E-Paper. Es gibt auch keine Probleme – alles wird korrekt anzeiget. Wenn ich den Lipo 3,7v anschließe leuchtet auch die blaue LadeLED. Nur auf dem Display wird keine Akku Anzeige angezeigt. Das Board hat doch schon einen Batterie Monitor? Was kann ich da noch tun?
Serial.print "Voltage.. " wird nicht angezeigt.

Beste Grüße Uwe

Andreas Wolter

Andreas Wolter

@David S.: ich habe dazu den Autoren Niklas Heinzel kontaktiert. Bei ihm läuft das Projekt problemlos im Dauerzustand mit den im Beitrag verwendeten Komponenten. Sollten Sie andere Mikrocontroller verwenden, müssten Sie nachsehen, ob und wie ein deep sleep möglich ist und wie man ihn umsetzt. Sollten Sie einen ESP32 verwenden, prüfen Sie bitte die verwendeten Pins, ob diese eventuell den deep sleep verhindern.

Grüße,
Andreas Wolter
AZ-Delivery Blog

David S.

David S.

Hallo,

Ich Hab mir die Wetterstation mit dem 7.5" Display aufgebaut. Soweit funktioniert auch alles wunderbar, bis auf das awake.

Zwar startet die Wetterstation um 7 und aktualisiert einmal, aber dann friert das Programm ein, sodass erst nach einem Neustart wieder alle 30 min. aktualisiert wird.

Hat da jemand eine Idee woran das liegen könnte?

Grüße
David

Andreas Wolter

Andreas Wolter

@Pepe: das Aufspielen ist relativ einfach. Für den Einstieg in die Arduino-IDE empfehle ich u.a. die Beitragsreihe in unserem Blog:
https://www.az-delivery.de/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/arduino-ide-programmieren-fuer-einsteiger-teil-1

Man muss für die ESP-Mikrocontroller einiges vorbereiten. Dafür empfehle ich diesen Beitrag:
https://www.az-delivery.de/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/esp32-jetzt-mit-boardverwalter-installieren

Sie müssen also Schritt für Schritt vorgehen.
1. Arduino IDE installieren
2. ESP Arduino Core installieren
3. Benötigte Bibliotheken installieren
4. Unter Werkzeuge→ Board den ESP auswählen
5. Eventuell muss ein Treiber für die Serielle Schnittstelle des ESPs unter Windows installiert werden. (wenn unter “port” kein COMx angezeigt wird
6. Den Sketch aus dem Beitrag herunterladen und in der Arduino IDE öffnen

Grüße,
Andreas Wolter
6. Sketch uploaden (die BOOT-Taste gedrückt halten, wenn connecting…. in der Ausgabe erscheint)

Pepe

Pepe

Wer kann mir ein bisschen Hilfe geben bzgl. der Aufspielung der Code. Bin interessiert aber Anfänger. Da sich meine Frau eine Wetterstation wünscht, wäre dies ein schönes Geschenk. Über jede Hilfe wäre ich dankbar.

Grüße Pepe

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

Leave a comment

All comments are moderated before being published

Recommended blog posts

  1. ESP32 jetzt über den Boardverwalter installieren - AZ-Delivery
  2. Internet-Radio mit dem ESP32 - UPDATE - AZ-Delivery
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1 - AZ-Delivery
  4. ESP32 - das Multitalent - AZ-Delivery