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:
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
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:
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.
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)
66 commenti
Andreas Wolter
@Thomas Stein: Ich tippe drauf, dass es die letzte Arduino IDE vor Ver 2.0 war. Ich glaube 1.8.19
Ich gehe davon aus, dass das Hauptproblem der ESP Core ist. Da müssten Sie leider im Boardverwalter einzeln testen, wie weit Sie zurück müssen.
Die Versionsupdates sind bei diesen Projekten leider ein grundlegendes Problem.
Dazu kommt, dass openweather den Zugang zur API verändert hat.
Wir können leider nicht regelmäßig alle Projekte auf den neuesten Stand bringen. Daher werden sie in ihrer “Zeitkapsel” bleiben und dienen dann lediglich als Inspiration für ähnliche Projekte.
Grüße,
Andreas Wolter
AZ-Delivery Blog
Thomas Stein
Hallo!
Ich habe das Projekt schon seit geraumer Zeit umgesetzt, leider bekomme ich es nicht mehr funktionsfähig übersetzt, mit den neuen Bibliotheken aus Ardunio IDE 2.3.3
Auch ein Downgrade einzelner Bibliotheken / Boards bringt keine Verbesserung.
Ich nutze ein Lolin 32 Lite (wie empfohlen), habe auch schon einige Boards ausprobiert, läuft aber nicht.
Welche Einstellungen müssen denn definitiv wie genutzt werden (Versionen) um zum Zeil zu gelangen?
Paul
Ich habe den Fehler gefunden!
Es lag an der neuen ESP32 Bibliothek.
Habe eine ältere Installiert und es funktioniert!
Gruß Gerrit
Gerrit
Herzlichen Dank für den Hinweis.
Interessant wäre natürlich, welche Versionen der Bibliotheken verwendet wurden.
Gruß Gerrit
Andreas Wolter
@Gerrit: Ich vermute auch in dem Fall, dass die Bibliotheken verändert wurden.
Ich würde versuchen, die Versionen zurückzustellen auf das VÖ-Datum des Artikels. Andernfalls könnten Sie versuchen, den Code an die neuen Bibliotheken anzupassen. Das ist in der Arduino/ESP-Welt leider ein bekanntes Problem.
Grüße,
Andreas Wolter
AZ-Delivery Blog
Gerrit
Ich bekomme ständig die Meldung:
Compilation error: ‘class WiFiClass’ has no member named ‘setAutoConnect’; did you mean ‘setAutoReconnect’?
Was kann ich tun?
Grüße Gerrit
Andreas Wolter
@Eckhard: es ist ein Bastelprojekt gewesen. Momentan gibt es keine Pläne, es anzupassen. Ich werde den Autoren kontaktieren und nachfragen, was er dazu sagt. Es passiert leider sehr häufig, dass sich Bibliotheken und APIs ändern und die Projekte erst einmal nicht mehr funktionieren.
Wir möchten auch, dass die Leser interaktiv bleiben und selbst Lösungen finden, die sie dann hier mit anderen Lesern teilen. Wir schauen, was wir in diesem Fall daraus machen können.
Grüße,
Andreas Wolter
AZ-Delivery Blog
Eckhard
Die Wetterstation hat mir bisher wirklich gute Dienste geleistet. Eure super Anleitung hat mich dazu bewogen ebenfalls so eine schicke Wetterstation zu bauen.
Openweathermap hatte leider vor einiger Zeit beschlossen seine ursprüngliche freie api 2.5 zu ändern.
Der Entwickler der Software für die Wetterstation hat entsprechend reagiert und Änderungen auf seiner Webseite bereitgestellt.
Durch die Umstellung auf openweathermap-api one call 3.0 besteht aber leider der Zwang dort seine Kreditkartendaten zu hinterlegen auch wenn man unter 1000 freien Abrufen pro Tag bleibt.
Ich habe nun im Netz die ein oder andere Kritik vor allem aber zur Bezahlung per Kreditkarte an openweathermap gelesen.
1. Was mich interessieren würde. Geht ihr diesen Weg mit oder hat die Wetterstation nun ausgedient ?
2. Gibt es Bestrebungen die Software entsprechend anzupassen und an andere Provider anzubinden ?
3. Gibt es fertige Projekte die andere Provider anstatt openweathermap verwenden und man die vorhandene Hardware weiter verwenden kann ?
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
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
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
@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
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
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
@Andreas Ja, vielen Dank! Werde ich probieren und hätte da auch mal selbst drauf kommen können🤔
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
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
@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.
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
@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
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
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
@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
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
@Pascal: kann das eventuell am daylightOffset liegen?
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
Die Änderung von asize + 28 auf asize + 12 hat auch bei mir funktioniert…
@Andreas Wolter
@Atze
Danke für den Tip
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
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
@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
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
@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
@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
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
@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
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
@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
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
@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
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
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
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 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
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 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
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
@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
@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
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
@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