ESP32 mit 7,5 Zoll epaper-Display als Anzeige

Begonnen von smmmo, 13 Mai 2018, 21:28:36

Vorheriges Thema - Nächstes Thema

DavidR

#45
Ich hab mal etwas rumexperimentiert - Das Problem scheint nicht die noch bestehende Verbindung zu sein, sondern viel mehr der Watchdog, der den Reset auslöst.
Wenn ich das display.update in der Funktion onDisconnectHandler auskommentiere geht er wie geplant in Deep Sleep und wartet auch relativ genau die eingestellte 60s ab. Klar, ohne das Display Update macht die ganze Funktion keinen Sinn aber offensichtlich dauert dies zu lange, so dass der Watchdog ausgelöst wird.

Hat hier eventuell jemand Erfahrungen wie man das auslösen verhindern kann oder zumindest zu verlängern?


void onDisconnectHandler(void *r, AsyncClient *client){
  Serial.println("OnDisconnect");
  /** display.update(); */
  transmitDone();
}

max333

#46
Hallo,

ich habe mich auch an die docx gehalten, nur bekomme ich die Wettericons nicht angezeigt. Ich sehe nur die Buchstaben.

Was habe ich da falsch gemacht?


Die hier verlinkte Schriftart funktioniert https://forum.fhem.de/index.php/topic,80337.msg725801.html#msg725801

Den laufenden Reset habe ich auch noch, aber das scheint ein anderes Problem zu sein: https://github.com/jamct/DoorsignEPD/issues/5

LarsLWO

#47
Hallo ihr,

ich versuche jetzt seit Tagen, mein epaper Display ans Laufen zu kriegen, aber es passiert halt nichts - das Display bleibt weiß. Ansonsten habe mich weitgehend an diese Anleitung gehalten, hatte aber dennoch einige Hürden zu nehmen, aber was solls, ich glaube jetzt ist der ESP richtig konfiguriert. Habe mich bei den Versionsständen an die Angaben aus dem doorsignepd Projekt auf Github gehalten.

Dann mit dem WLAN des ESP verbunden, meine W-Lan Config eingetragen, hat auch geklappt, dann mein Script auf einem Server abgelegt, lässt sich per Browser super aufrufen (ct-Beispiel-Grafik).

Aus dem Serial Monitor:
Zitat10:03:38.295 -> OnData: 574 Bytes
10:03:38.295 -> HTTP/1.1 302 Moved Temporarily
10:03:38.295 -> Date: Sat, 12 Oct 2019 08:03:38 GMT
10:03:38.295 -> Content-Type: text/html
10:03:38.295 -> Content-Length: 138
10:03:38.295 -> Connection: close
10:03:38.295 -> Location: https://(hostname)/?debug=false&content=static_image&display=7.5
10:03:38.295 -> Server: nginx
10:03:38.295 -> Referrer-Policy: strict-origin-when-cross-origin
10:03:38.295 -> Strict-Transport-Security: max-age=172800
10:03:38.295 -> X-Content-Type-Options: nosniff
10:03:38.295 -> X-Xss-Protection: 1; mode=block
10:03:38.295 -> X-Frame-Options: SAMEORIGIN
10:03:38.295 -> ProductionMode: 0
10:03:38.295 -> Printing 138 Bytes to the screen
10:03:38.295 -> OnDisconnect
10:03:40.165 -> Not going to deep sleep. Reason: Not in production mode
10:03:40.165 -> Ongoing connection

Aufgrund der Ausgabe, und dass das Bild im Browser richtig angezeigt wird (wenn debug=true; vielen Dank übrigens für den Hinweis), gehe ich davon aus, dass eigentlich alles funktionieren müsste.

ABER: Das Display bleibt halt weiß. Übrigens, ebenso bei dem GxEPD Example. Dort erhalte ich im Serial Monitor immer nur etwas wie "DrawingBitmap" und ansonsten "Busy Timeout".

Ich habe ein Waveshare 7,5" s/w Display, und als ESP32 verwende ich:
E-Paper ESP32 Driver Board (https://www.waveshare.com/wiki/E-Paper_ESP32_Driver_Board)

Hat jemand eine Idee? Pinbelegung oder sowas?

Wäre schön, wenn noch jemand hier vorbeischaut und vielleicht einen Tipp geben kann :)

LarsLWO

Kleiner Zusatz: Waveshare gibt die Pinbelegung für das Display im Manual an, aber wo kann ich die ändern? Denke immer mehr, dass das der Grund sein dürfte...

max333

in der doorsignEPD ist folgendes zu ändern:

#define CHIP_SELECT 15

GxIO_Class io(SPI, CHIP_SELECT, 27, 26);
GxEPD_Class display(io, 26, 25);

und in der AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\variants\esp32\pins_arduino.h

static const uint8_t SS    = 15;
static const uint8_t MOSI  = 14;
static const uint8_t MISO  = 12;
static const uint8_t SCK   = 13;

ABER es funktioniert bei mir nur das Setup, danach wird das Display aktualisiert, alles invertiert, und dann RESET...

LarsLWO

Sehr geil, es funktioniert! Besten Dank :D

Aus Interesse: Warum musste ich das PIN-Mapping anpassen? Sind die speziell bei diesem Board (E-Paper ESP32 Display Driver) anders als bei den anderen?

max333

#51
Der SPI-Bus ist bei dem Waveshare über andere PINs realisiert.

Damit der ESP32 läuft, muss man sich unbedingt an das halten was bei doorsignEPD angegeben wird:

Tested dependencies
This project was tested with the following Library versions:

GxEPD v3.0.4 from github
Basecamp v0.1.8 via Arduino library manager
Adafruit_GFX v1.3.6 via Arduino library manager
AsyncTCP from github (ac551716aa655672cd3e0f1f2c137a710bccdc42, v1.0.3) https://github.com/me-no-dev/AsyncTCP/tree/ac551716aa655672cd3e0f1f2c137a710bccdc42
ESPAsyncWebServer from github (95dedf7a2df5a0d0ab01725baaacb4f982dedcb2, v1.2.0) https://github.com/me-no-dev/ESPAsyncWebServer/tree/95dedf7a2df5a0d0ab01725baaacb4f982dedcb2
ArduinoJson v5.13.4 via Arduino library manager
ESP32 Arduino core by espressif: version 1.0.1

LarsLWO

#52
Hat denn jemand dieses Projekt in letzter Zeit zum Laufen bekommen? Ich habs jetzt mit 2 unterschiedlichen Boards probiert: Waveshare ESP32 Driver Board, und ESP32 Devkit v1. Bei beiden funktioniert das GxEPD Beispiel (Display wird also richtig angesprochen). Aber bei beiden funktioniert nicht das DoorsignEPD Projekt. Es lässt sich zwar flashen, die Konfiguration einstellen, aber statt einer grafischen Ausgabe blinkt das Display nur schwarz weiß.

Die Ausgabe vom Serial Monitor lässt darauf schließen, dass das Bild richtig abgerufen wird - korrekte HTTP Header sind da zu sehen. Wenn ich bewusst eine ungültige URL angebe, etwa google.de, dann zeigt das Display immerhin ein paar kryptische Zeichen ;-)

Ich glaube, dass es einfach schwierig ist, zum jetzigen Zeitpunkt noch den Versionsstand für ein funktionierendes Setup herzustellen. Probiert hab ich zuletzt hiermit:

* Arduino IDE 1.8.8
* ESP32 Arduino Core by Espressif, 1.0.1
* GxEPD v3.0.4 from github
* Basecamp v0.1.8 via Arduino library manager
* Adafruit_GFX v1.3.6 via Arduino library manager
* AsyncTCP from github (ac551716aa655672cd3e0f1f2c137a710bccdc42, v1.0.3)
* ESPAsyncWebServer from github (95dedf7a2df5a0d0ab01725baaacb4f982dedcb2, v1.2.0)
* ArduinoJson v5.13.4 via Arduino library manager

Nach einem neuen Setup meckert er grundsätzlich, dass ihm die Library "async-mqtt-client" fehlen würde - das sollte er wohl eigentlich nicht tun. Der Fehler legt sich, wenn man die Library einfügt, aber wie gesagt, das Endergebnis stimmt einfach nicht. Angefordert wird die Library wohl durch ESPAsyncWebServer, aber dessen Version ist mit Commit-Hash genau beim doorsign-Projekt angegeben.

Hab auch mal probiert, vom doorsignEPD eine Version aus der Zeit 02/2018 (Erscheinen des c't-Artikels) zu nehmen. Löste bei mir auch kein einziges Problem...

Vielleicht hat noch jemand einen hilfreichen Tipp?

EDIT: Hier nochmal ein bisschen Ausgabe vom Serial Monitor
Zitat23:55:15.047 -> Not going to deep sleep. Reason: Not in production mode
23:55:15.047 -> Ongoing connection
23:55:16.965 -> transmitDone
23:55:17.068 -> Not going to deep sleep. Reason: Not in production mode
23:55:19.059 -> Wait till the client is connected
23:55:19.059 -> Not going to deep sleep. Reason: Not in production mode
23:55:19.059 -> Connection setup in progres
23:55:19.059 -> OnConnect
23:55:19.059 ->
23:55:19.093 -> OnData: 591 Bytes
23:55:19.093 -> HTTP/1.1 302 Moved Temporarily
23:55:19.093 -> Date: Tue, 15 Oct 2019 21:55:19 GMT
23:55:19.093 -> Content-Type: text/html
23:55:19.093 -> Content-Length: 138
23:55:19.093 -> Connection: close
23:55:19.126 -> Location: https://domain/index.php?debug=false&content=weather_station&display=7.5&display=7.5
23:55:19.126 -> Server: nginx
23:55:19.126 -> Referrer-Policy: strict-origin-when-cross-origin
23:55:19.126 -> Strict-Transport-Security: max-age=172800
23:55:19.126 -> X-Content-Type-Options: nosniff
23:55:19.126 -> X-Xss-Protection: 1; mode=block
23:55:19.126 -> X-Frame-Options: SAMEORIGIN
23:55:19.126 -> ProductionMode: 0
23:55:19.126 -> Printing 138 Bytes to the screen
23:55:19.164 -> OnDisconnect
23:55:21.044 -> Not going to deep sleep. Reason: Not in production mode
23:55:21.044 -> Ongoing connection
23:55:23.042 -> Not going to deep sleep. Reason: Not in production mode
23:55:23.042 -> Ongoing connection
23:55:24.958 -> transmitDone
23:55:25.065 -> Not going to deep sleep. Reason: Not in production mode
23:55:27.048 -> Wait till the client is connected
23:55:27.048 -> Not going to deep sleep. Reason: Not in production mode
23:55:27.048 -> Connection setup in progres
23:55:27.083 -> OnConnect
23:55:27.083 ->
23:55:27.117 -> OnData: 591 Bytes
23:55:27.117 -> HTTP/1.1 302 Moved Temporarily
23:55:27.117 -> Date: Tue, 15 Oct 2019 21:55:27 GMT
23:55:27.117 -> Content-Type: text/html
23:55:27.117 -> Content-Length: 138
23:55:27.117 -> Connection: close

LarsLWO

#53
Okay, jetzt geht alles. Hier die Auflösung:

Der Webserver darf die Inhalte nicht gzip-komprimiert ausliefern. Das ist inzwischen aber bei vielen Linux Distributionen, wenn man den Apache2 installiert, direkt vorkonfiguriert. Normalerweise ist auch vorkonfiguriert, dass etwa Bilder nicht komprimiert werden sollen (die gängigen Bildformate sind alle bereits komprimiert). Aber das Raw-Bild, das für den ESP32 ausgegeben wird, wenn debug=false eingestellt ist, geht eben nicht als Bild durch, sondern als Textdokument.

Zusammengefasst läuft es bei mir unter folgenden Umständen:
* Arduino IDE 1.8.10

Die Versionen der Arduino Libraries entsprechen bei mir denen aus dem DoorsignEPD Projekt:
* GxEPD v3.0.4 (github)
* Basecamp v0.1.8 (Arduino library manager)
* Adafruit_GFX v1.3.6 (Arduino library manager)
* AsyncTCP v1.0.3 (github)
* ESPAsyncWebServer v1.2.0 (github)
* ArduinoJson v5.13.4 (Arduino library manager)

Die ESP32 Core Library, wie hier in der Anleitung (Word-Dokument, Posting 1) beschrieben:
* ESP32 Arduino core by espressif: version 1.0.2, URL: https://dl.espressif.com/dl/package_esp32_index.json

Und folgende Library ist nötig:
* AsyncMqttClient, v. 0.8.2

Diese Library steht hier in der Anleitung (Word-Dokument, Posting 1) mit drin; im Doorsign-Projekt und im heise-Artikel steht sie nicht drin, und in den Forenbeiträgen auf heise.de zu dem Artikel wird sogar fälschlicherweise darauf verwiesen, dass dieses Plugin nur beim ESP8266 nötig wäre (oder zumindest lässt die Formulierung der Antwort darauf schließen), was aber definitiv nicht so ist. Mit der Verwendung von ESPAsyncWebServer wird auch dieses Plugin benötigt. Auch beim ESP32.

Und für den Webservice, der mit DoorsignEPD mitgeliefert wird (falls man ihn denn benutzen möchte, und den ESP32 nicht anders mit Content befeuert):
* PHP 7.2.19
* Apache Webserver mit deinstalliertem deflate-Modul (damit wird nicht gzip-komprimiert; gibt natürlich noch andere Wege, das zu unterbinden)
* PHP-GD-Library 2.2.5

Vielleicht helfen diese Infos jemandem weiter, der sie noch gebrauchen könnte. Vielen Dank und viel Spaß weiterhin :D

UPDATE 10.11.2019:
Die ESP32 Arduino core Library nicht wie oben beschrieben in Version 1.0.2 verwenden, sondern in der neuesten Version (bei mir: 1.0.4). Ich hatte Stabilitätsprobleme, insbesondere beim Ansprechen der Touch-PINs und der Verwendung dieser als Sleep Interrupt. Es funktioniert gut mit 1.0.4.

max333

Wesentlich flexibler kann man die Anzeige gestalten, wenn man z.B. die Datei weather_station.php so anpasst, dass diese direkt die Daten aus fhem per telnet abfragt und darstellt. Auch die Textfarbe lässt sich dann entsprechend anpassen, z.B. rot bei Frost.

Midrag

Hallo zusammen,

ich habe die Anzeige mit dem neueren Waveshare 7,5" 800x480 Display nachgebaut.
In dem Rahmen habe ich ein Gehäuse designt. Vielleicht ist das für den einen oder anderen Interessant:
https://www.thingiverse.com/thing:4204655

Damit das neuere Display mit der hier geposteten Anleitung geht ist folgendes zu tun:

Sketch DoorsignEPD anpassen
Zeile 8/9

//#define BASECAMP_NOOTA 1
//#define BASECAMP_NOMQTT


Zeile 65/66 anpassen

#if DISPLAY_TYPE == '7.5'
//#include <GxGDEW075T8/GxGDEW075T8.h>      // 7.5" b/w
#include <GxGDEW075T7/GxGDEW075T7.h>        // 7.5" b/w 800x480
bool hasRed = false;
String displayType = "7.5";
#endif

kkoeniger

Zitat von: Midrag am 06 März 2020, 10:48:49
Hallo zusammen,

ich habe die Anzeige mit dem neueren Waveshare 7,5" 800x480 Display nachgebaut.
In dem Rahmen habe ich ein Gehäuse designt. Vielleicht ist das für den einen oder anderen Interessant:
https://www.thingiverse.com/thing:4204655

...

Danke - nach so etwas habe ich schon gesucht.
Ich habe mir erlaubt, auf Dein Gehäuse in einem anderen Thread hinzuweisen, wo es auch um Waveshare-Displays geht: https://forum.fhem.de/index.php/topic,104171.msg1029840.html#msg1029840
LG,
Karl

maltejahn

Zitat von: max333 am 12 Oktober 2019, 00:29:39
Hallo,

ich habe mich auch an die docx gehalten, nur bekomme ich die Wettericons nicht angezeigt. Ich sehe nur die Buchstaben.

Was habe ich da falsch gemacht?


Die hier verlinkte Schriftart funktioniert https://forum.fhem.de/index.php/topic,80337.msg725801.html#msg725801

Den laufenden Reset habe ich auch noch, aber das scheint ein anderes Problem zu sein: https://github.com/jamct/DoorsignEPD/issues/5

Ich muss das aufgreifen da ich wohl zu doof bin das aus den "Buchstaben" die entsprechenden Symbole werden.

Wenn ich das ganze im TabletUI teste mit
                <div class="weather">
                    <div data-icon="R" class="weather-icon meteocons"></div>
                </div>

so wird auch das passende Symbol für "R" auf der Webseite dargestellt. -> also sollte der Font richtig installiert sein
Auf dem Display erscheint dann nur der Buchstabe.

Im Dummy steht der richtige State, also z.B. "B". Also das ersetzen des Wetterstatus mit der Funktion klappt
Das reading lautet z.B. WetterIcon_fc0_morning_dy:state Entsprechend wird der Eintrag im Template auch richtig ersetzt, allerdings erscheint eben nur der Buchstabe "B"

Was mache ich falsch?

Grüße
Malte


bart0190

Hallo,
Nach genau 2 Jahren musste ich das Display tauschen und hoffe, dass ich nun nicht mehr alles neu erfinden muss.

Zitat von: Midrag am 06 März 2020, 10:48:49
Hallo zusammen,

ich habe die Anzeige mit dem neueren Waveshare 7,5" 800x480 Display nachgebaut.
In dem Rahmen habe ich ein Gehäuse designt. Vielleicht ist das für den einen oder anderen Interessant:
https://www.thingiverse.com/thing:4204655

Damit das neuere Display mit der hier geposteten Anleitung geht ist folgendes zu tun:

Sketch DoorsignEPD anpassen
Zeile 8/9

//#define BASECAMP_NOOTA 1
//#define BASECAMP_NOMQTT


Zeile 65/66 anpassen

#if DISPLAY_TYPE == '7.5'
//#include <GxGDEW075T8/GxGDEW075T8.h>      // 7.5" b/w
#include <GxGDEW075T7/GxGDEW075T7.h>        // 7.5" b/w 800x480
bool hasRed = false;
String displayType = "7.5";
#endif


@Midrag,
Da ich nur mehr ein 7.5" b/w 800x480 bekam, ist das ganze natürlich sehr relevant für mich. :)
Ich hab nun die Library wie von dir oben beschrieben eingefügt (Zeile 65/66). Das mit Zeile 8/9 ist mir nicht ganz klar, da es #define BASECAMP_NOOTA 1 ja gar nicht gibt zum Auskommentieren. Mit oder ohne das Auskommentieren kommt jetzt zwar was an, es ist aber so 5x ein überlagertes Bild. :(

Muss man an einer anderen Stelle auch noch was ändern?

lg
bart
Raspberry Pi 4 - FHEM, Homematic HM-CFG-LAN, ESP32 mit ePaper Display, Raspberry Pi 3 - BT Lokalisierung, PC - Squeezebox Server, Raspberry Pi 2 +HifiBerry - SB Player1, Raspberry Pi 2 +AVReceiver - SB Player2, nVidia Shield TV +AVReceiver - SB Player3, 2x Logitech Harmony Hub, echo dot Gen3