Forum: Mikrocontroller und Digitale Elektronik wo gibt es noch Libraries für EPD


von Egon M. (knut735)


Lesenswert?

Hallo

ich wollte ein E-paper (2,13" von Waveshare) an einem ESP32 betreiben. 
Dazu habe ich in der Arduino-IDE in Bibliotheksverwaltung alle möglichen 
Sachen installiert, die irgendwie mit EPD zusammenhängen (GxEPD, GxEPD2, 
EPD, Adafruit-EPD usw).

Hat aber nichts geholfen: Wenn ich so einen Beispielcode wie Hello World 
kompiliere, bricht es ab mit dem Hinweis, das "display...." nicht 
gefunden wurde. Also fehlt wohl irgendeine library.

Weiß vielleicht jemand, wo ich die finden kann?

VG

knut735

von 🕵︎ Joachim L. (Gast)


Lesenswert?

Komplette Fehlermeldung mit Crtl-C kopieren und mit Ctrl-V hier posten. 
Kot in den Anhang.
Dann schaun wir mal! (Copyright Franz Beckenbauer)

von Oliver R. (orb)


Lesenswert?

Egon M. schrieb:
> Also fehlt wohl irgendeine library.

Ich befürchte, da fehlt eher der richtige Anschluss oder der richtige 
Eintrag der Pins.
Du brauchst nur eine Bibliothek, GxEPD2 ist die aktuelle.
Wenn irgendwas fehlt meckert Arduino.

von Egon M. (knut735)


Lesenswert?

Hier ist das Programm:
1
// GxEPD_Hello World Example by Jean-Marc Zingg
2
// Created by Jean-Marc Zingg based on demo code from Good Display,
3
// available on http://www.e-paper-display.com/download_list/downloadcategoryid=34&isMode=false.html
4
//

Und das ist die Fehlermeldung beim Versuch, es zu kompilieren:
1
C:\Users\mails\AppData\Local\Temp\arduino_modified_sketch_243817\GxEPD2_HelloWorld.ino: In function 'void setup()':
2
GxEPD2_HelloWorld:27:3: error: 'display' was not declared in this scope
3
   display.init(115200);
4
   ^~~~~~~
5
C:\Users\mails\AppData\Local\Temp\arduino_modified_sketch_243817\GxEPD2_HelloWorld.ino:27:3: note: suggested alternative: 'delay'
6
   display.init(115200);
7
   ^~~~~~~
8
   delay
9
C:\Users\mails\AppData\Local\Temp\arduino_modified_sketch_243817\GxEPD2_HelloWorld.ino: In function 'void helloWorld()':
10
GxEPD2_HelloWorld:36:3: error: 'display' was not declared in this scope
11
   display.setRotation(1);
12
   ^~~~~~~
13
C:\Users\mails\AppData\Local\Temp\arduino_modified_sketch_243817\GxEPD2_HelloWorld.ino:36:3: note: suggested alternative: 'delay'
14
   display.setRotation(1);
15
   ^~~~~~~
16
   delay
17
exit status 1
18
'display' was not declared in this scope

VG

knut735

von Egon M. (knut735)


Lesenswert?

Oliver R. schrieb:
> Ich befürchte, da fehlt eher der richtige Anschluss oder der richtige
> Eintrag der Pins.

Die Pins sind gar nicht angeschlossen. Mir kam es zunächst darauf an, ob 
das Programm überhaupt für einen ESP32 kompiliert wird oder ob ich einen 
Arduino Uno nehmen muß.

Mir ist nicht bewußt, daß beim Kompilieren schon irgendwelche 
Verbindungen zur Hardware, so vollständig oder unvollständig sie sein 
mag, bestehen.

VG

von J. S. (jojos)


Lesenswert?

Da das eine Lib für viele verschiedene Displays ist, muss man vermutlich 
das verwendete definieren.

von Egon M. (knut735)


Lesenswert?

J. S. schrieb:
> Da das eine Lib für viele verschiedene Displays ist, muss man vermutlich
> das verwendete definieren.

Das habe ich getan. Ich vermute aber, daß das den Kompiler überhaupt 
nicht interessiert

: Bearbeitet durch User
von Joachim B. (jar)


Lesenswert?

Egon M. schrieb:
> GxEPD2_HelloWorld:27:3: error: 'display' was not declared in this scope
>    display.init(115200);

die Fehlermeldung ist doch eindeutig, nur müsste man sie auch lesen und 
verstehen.

von Εrnst B. (ernst)


Lesenswert?

Egon M. schrieb:
> Das habe ich getan.

Das würde bedeuten, dass du die Kommentarzeilen vor einer der 
Display-Definitionen in der GxEPD2_display_selection.h entfernt hast.
In der Zeile wird "display" definiert. d.H. danach taucht die 
Fehlermeldung
"'display' was not declared in this scope" nicht mehr auf.

Vorsicht, muss in der ESP32-Sektion der Datei sein, nicht in der 
ESP8266-, STM32 oder AVR-Sektion.

von Joachim B. (jar)


Lesenswert?

"was not declared" -> cpp Kurs oder Buch beschaffen.

von Egon M. (knut735)


Lesenswert?

Hier ist noch mal die zuletzt benutzte Version des 
Hallo-World-Programmes samt Fehlermeldung. Die includierten Dateien sind 
alle noch drin. Selbst da, wo zwischen old style und new style 
unterschieden wird, habe ich beide drin gelassen. Es sind also zuviel 
und nicht zu wenige ...h - Dateien includiert (gibt sicher kein 
lauffähiges Programm). Aber:In keiner der zugehörigen Dateien scheint 
"display" enthalten zu sein. In die ...h und ...cpp - Ddateien habe ich 
noch nicht hineingeschaut.

Nebenbei: weshalb dauert das Kompilieren 10-15 Minuten?

Hier das kompltte Programm:
1
// GxEPD2_HelloWorld.ino by Jean-Marc Zingg
2
3
// see GxEPD2_wiring_examples.h for wiring suggestions and examples
4
// if you use a different wiring, you need to adapt the constructor parameters!
5
6
// uncomment next line to use class GFX of library GFX_Root instead of Adafruit_GFX
7
//#include <GFX.h>
8
9
#include <GxEPD2_BW.h>
10
#include <GxEPD2_3C.h>
11
#include <Fonts/FreeMonoBold9pt7b.h>
12
13
// select the display class and display driver class in the following file (new style):
14
#include "GxEPD2_display_selection_new_style.h"
15
16
// or select the display constructor line in one of the following files (old style):
17
#include "GxEPD2_display_selection.h"
18
#include "GxEPD2_display_selection_added.h"
19
20
// alternately you can copy the constructor from GxEPD2_display_selection.h or GxEPD2_display_selection_added.h to here
21
// e.g. for Wemos D1 mini:
22
//GxEPD2_BW<GxEPD2_154_D67, GxEPD2_154_D67::HEIGHT> display(GxEPD2_154_D67(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEH0154D67
23
24
void setup()
25
{
26
  display.init(115200);
27
  helloWorld();
28
  display.hibernate();
29
}
30
31
const char HelloWorld[] = "Hello World!";
32
33
void helloWorld()
34
{
35
  display.setRotation(1);          <<<<<<<< diese Zeile wird beanstandet
36
                                   <<< aber display.init weiter oben nicht                                                                         
37
38
  display.setFont(&FreeMonoBold9pt7b);
39
  display.setTextColor(GxEPD_BLACK);
40
  int16_t tbx, tby; uint16_t tbw, tbh;
41
  display.getTextBounds(HelloWorld, 0, 0, &tbx, &tby, &tbw, &tbh);
42
  // center the bounding box by transposition of the origin:
43
  uint16_t x = ((display.width() - tbw) / 2) - tbx;
44
  uint16_t y = ((display.height() - tbh) / 2) - tby;
45
  display.setFullWindow();
46
  display.firstPage();
47
  do
48
  {
49
    display.fillScreen(GxEPD_WHITE);
50
    display.setCursor(x, y);
51
    display.print(HelloWorld);
52
  }
53
  while (display.nextPage());
54
}
55
56
void loop() {};

Und hier die Fehlermeldung:
1
K:\Dat-KPC2\Arduino-Prgm\libraries\GxEPD2\examples\GxEPD2_HelloWorld\GxEPD2_HelloWorld.ino: In function 'void setup()':
2
GxEPD2_HelloWorld:26:3: error: 'display' was not declared in this scope
3
   display.init(115200);
4
   ^~~~~~~
5
K:\Dat-KPC2\Arduino-Prgm\libraries\GxEPD2\examples\GxEPD2_HelloWorld\GxEPD2_HelloWorld.ino:26:3: note: suggested alternative: 'delay'
6
   display.init(115200);
7
   ^~~~~~~
8
   delay
9
K:\Dat-KPC2\Arduino-Prgm\libraries\GxEPD2\examples\GxEPD2_HelloWorld\GxEPD2_HelloWorld.ino: In function 'void helloWorld()':
10
GxEPD2_HelloWorld:35:3: error: 'display' was not declared in this scope
11
   display.setRotation(1);
12
   ^~~~~~~
13
K:\Dat-KPC2\Arduino-Prgm\libraries\GxEPD2\examples\GxEPD2_HelloWorld\GxEPD2_HelloWorld.ino:35:3: note: suggested alternative: 'delay'
14
   display.setRotation(1);
15
   ^~~~~~~
16
   delay
17
exit status 1
18
'display' was not declared in this scope

: Bearbeitet durch User
von J. S. (jojos)


Lesenswert?

Vielleicht mal lesen was bei den include Kommentaren so steht.

von Εrnst B. (ernst)


Lesenswert?

Egon M. schrieb:
> Nebenbei: weshalb dauert das Kompilieren 10-15 Minuten?

Virenscanner abschalten oder eine Ausnahme für die Arduino-Directories 
einrichten.

Egon M. schrieb:
> Hier das kompltte Programm:

Das ist nicht komplett. Da gehören die Dateien dazu, in denen du 
auswählst, was für ein Display du hast, und damit die "display"-Variable 
deklarierst.
Also Eine der "*_display_selection*.h"- Dateien.

von Joachim B. (jar)


Lesenswert?

Egon M. schrieb:
> Mir ist nicht bewußt, daß beim Kompilieren schon irgendwelche
> Verbindungen zur Hardware, so vollständig oder unvollständig sie sein
> mag, bestehen.

so funktioniert aber cpp, nicht die Verbindung zur Hardware aber die 
Deklaration der FUNKTION

Egon M. schrieb:
> 'display' was not declared in this scope

kannst du deswegen nicht nutzen weil du:

Egon M. schrieb:
> //GxEPD2_BW<GxEPD2_154_D67, GxEPD2_154_D67::HEIGHT>
> display(GxEPD2_154_D67(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2,
> /*BUSY=D2*/ 4)); // GDEH0154D67

die Funktion "display" 3te Zeile -> display(G....
ja immer noch auskommentiert hast

Zur Hardware geht es erst wenn in der Deklaration die Pins richtig 
gesetzt werden.

von Egon M. (knut735)


Lesenswert?

Joachim B. schrieb:
> Egon M. schrieb:
>> //GxEPD2_BW<GxEPD2_154_D67, GxEPD2_154_D67::HEIGHT>
>> display(GxEPD2_154_D67(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2,
>> /*BUSY=D2*/ 4)); // GDEH0154D67
>
> die Funktion "display" 3te Zeile -> display(G....
> ja immer noch auskommentiert hast

Ja, nachdem ich die Auskommentierung entfernt habe,lief das Kompilieren 
bis zum Ende durch!

Nach diesem hilfreichen Hinweis werde ich mich nun darum kümmern, an 
welche Pins des ESP-WROOM 32 das EPD angeschlossen werden muß und wie 
ich die passende Sequenz für mein 2.13"-EPD im Programm unterbringe. 
Vielleicht funktioniert es dann.

Gruß

knut735

von Dirk B. (garag)


Lesenswert?

Aus dem obigen Sourcecode ist auch folgendes zu lesen:
1
// select the display class and display driver class in the following file (new style):
2
#include "GxEPD2_display_selection_new_style.h"

Anscheinend soll der Benutzer wohl in der include Datei 
"GxEPD2_display_selection_new_style.h" das richtige Display auswählen. 
Die 3te Zeile ist halt eine Alternative dazu, muß jedoch an das Display 
angepasst werden. Es gibt halt sehr viele verschiedene Displays.

Gruß
Dirk

von 🕵︎ Joachim L. (Gast)


Angehängte Dateien:

Lesenswert?

Hier ist diese Zeile von meinem WetterESP32 mit 1,54 Zoll Display. Und 
Fotos vom Anschluss.

GxEPD2_3C<GxEPD2_154c, GxEPD2_154c::HEIGHT> display(GxEPD2_154c(/*CS=5*/ 
SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4));

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

von Egon M. (knut735)


Lesenswert?

Joachim L. schrieb:
> Hier ist diese Zeile von meinem WetterESP32 mit 1,54 Zoll Display. Und
> Fotos vom Anschluss.
>
> GxEPD2_3C<GxEPD2_154c, GxEPD2_154c::HEIGHT> display(GxEPD2_154c(/*CS=5*/
> SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4));

Sieht sehr schön aus! Ich möchte es für Temperaturmessung im Aquarium 
nebst Alarmmeldung benutzen - was man da zu kaufen bekommt, gefällt mir 
nicht.

An Deinem Gerät beeindruckt mich die schöne Gestaltung des Displays. 
Hast Du das selber programmiert?

Gruß

knut735

von 🕵︎ Joachim L. (Gast)


Lesenswert?

Egon M. schrieb:
> Joachim L. schrieb:


> An Deinem Gerät beeindruckt mich die schöne Gestaltung des Displays.
> Hast Du das selber programmiert?

Diesen Teil schon. Wie bei Dir. Das von der Stange gefiel mir nicht. 
Kann ich dir aber im Quellcode zur Verfuegung stellen, falls Du dir 
einen flashen willst.Hat das jetzt geklappt mit der SPI Verdrahtung?

von Egon M. (knut735)


Lesenswert?

Joachim L. schrieb:
> Kann ich dir aber im Quellcode zur Verfuegung stellen, falls Du dir
> einen flashen willst.
Das wäre sehr nett.

> Hat das jetzt geklappt mit der SPI Verdrahtung?

Habe es noch nicht versucht, weil ich noch anderweitig beschäftigt bin.

VG
knut735

von 🕵︎ Joachim L. (Gast)


Lesenswert?

https://github.com/StrandedAlien/TempweatherEgon/blob/main/Waveshare_1_54.ino

du brauchst noch den Rest der Dateien von:
https://github.com/G6EJD/ESP32-e-Paper-Weather-Display

und musst deine eigenen Daten in own_credentials.h eintragen. Sag' bitte 
hier Bescheid wenn du es runtergeladen hast.

von Egon M. (knut735)


Lesenswert?

Hallo nixiefan,

danke, ich habe es soeben heruntergeladen und gespeichert.

Mal sehen, ob ich es hinkriege und dann später an meine Verhältnisse 
anpassen kann. Ist mein erster Versuch mit einem grafischen Display. 
Allerdings komme ich in den nächsten Tagen nicht dazu (Gartenarbeit 
usw.).

Nochmals vielen Dank!

knut735

von 🕵︎ Joachim L. (Gast)


Lesenswert?

OK. Viel Spass.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.