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

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

66 comentarios

Andreas Wolter

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

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

Paul

Ich habe den Fehler gefunden!
Es lag an der neuen ESP32 Bibliothek.
Habe eine ältere Installiert und es funktioniert!

Gruß Gerrit

Gerrit

Gerrit

Herzlichen Dank für den Hinweis.
Interessant wäre natürlich, welche Versionen der Bibliotheken verwendet wurden.
Gruß Gerrit

Andreas Wolter

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

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

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

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

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

Deja un comentario

Todos los comentarios son moderados antes de ser publicados