WaveShare ESP32 mit Waveshare Display

Hallo,

ich bin neu im ESP-Land. Habe im Haus ioBroker unter Linux laufen und würde gerne per ESP32 plus E-Ink Display z.b. die Außentemperatur-Daten vom ioBroker (Sonoff TH16) per MQTT dort anzeigen lassen.

Nun habe ich folgende Hardware gekauft:

Universal e-Paper Raw Panel Driver HAT SKU: 13512
ESP32 One, mini Development Board with WiFi / Bluetooth SKU: 19188
7.5inch E-Paper (B) E-Ink Raw Display, 800×480, Red/Black/White, SPI, Without PCB SKU: 13380

(Einfach die SKU Nummer im Shop suchen bei WaveShare.com), aufgrund das ich neu bin hier kann ich nicht mehrere Links posten.

So ich habe dann gleich alles zusammengebaut. Also das Driver Board auf den ESP32 gesteckt, das es wie im "Sandwich" übereinander Steckt wie auf der Waveshare Homepage zu sehen ist.

Genau so schaut es bei mir aus. Auch alle Kabel sind genauso angeschlossen.

Nun, soweit so gut. Danach habe ich das Arduino Installiert, und den ESP "eingebunden" nach diesem Video:

ESP32 in drei Minuten installieren = ESP32 Installation unter Arduino IDE in 3 Minuten - YouTube

Es klappt auch, ich bekomme die Rückmeldung wie im Video am Ende zu sehen.

So dann habe ich auf der Waveshare Seite das Display plus Examples installiert. Klappt alles, er kompiliert und es kommt keine Fehlermeldung. Aber auf dem Display erscheint nichts.

Was mache ich falsch oder was habe ich vergessen damit das Display an geht? Kommt beim einschalten nicht irgendwas auf dem Display? Bei mir ist es "tot", es erscheint nie was.

Oder habe ich eine nicht passende Hardware erwischt die untereinander nicht zurecht kommt?

Danke für eure Antworten, ich hoffe ich bekomme hier Hilfe. Leicht verzweifelt und kommt nicht weiter...

Oder ist das alles der falsche Weg/umständliche Weg um ioBroker Daten an den ESP32 zu senden?

mfg

Hast Du in dem Beispielcode von Waveshare denn auch Dein korrektes Display einkommentiert?
Wenn ja, was hast Du genau gemacht?

Hast Du die Schalter auf dem "Driver HAT" korrekt eingestellt? Display Config auf "B"? SPI korrekt eingestellt? 3/4 Pin?

Edit: siehe https://www.waveshare.com/wiki/E-Paper_Driver_HAT

Gruß, Jürgen

Danke für eure Antworten.

Ich habe den Display Schalter auf B stehen, und den Interface Config Schalter auf 0.

Und ja, habe Beispielcodes getestet, aber ohne Erfolg.

/* Includes ------------------------------------------------------------------*/
#include "DEV_Config.h"
#include "EPD.h"
#include "GUI_Paint.h"
#include "imagedata.h"
#include <stdlib.h>

/* Entry point ----------------------------------------------------------------*/
void setup()
{
  printf("EPD_7IN5BC_test Demo\r\n");
  DEV_Module_Init();

  printf("e-Paper Init and Clear...\r\n");
  EPD_7IN5BC_Init();
  EPD_7IN5BC_Clear();
  DEV_Delay_ms(500);

  //Create a new image cache named IMAGE_BW and fill it with white
  UBYTE *BlackImage, *RYImage;
  UWORD Imagesize = ((EPD_7IN5BC_WIDTH % 8 == 0) ? (EPD_7IN5BC_WIDTH / 8 ) : (EPD_7IN5BC_WIDTH / 8)) * EPD_7IN5BC_HEIGHT;
  if ((BlackImage = (UBYTE *)malloc(Imagesize)) == NULL) {
    printf("Failed to apply for black memory...\r\n");
    while(1);
  }
  if ((RYImage = (UBYTE *)malloc(Imagesize)) == NULL) {
    printf("Failed to apply for red memory...\r\n");
    while(1);
  }
  printf("NewImage:BlackImage and RYImage\r\n");
  Paint_NewImage(BlackImage, EPD_7IN5BC_WIDTH, EPD_7IN5BC_HEIGHT, 0, WHITE);
  Paint_NewImage(RYImage, EPD_7IN5BC_WIDTH, EPD_7IN5BC_HEIGHT, 0, WHITE);

  //Select Image
  Paint_SelectImage(BlackImage);
  Paint_Clear(WHITE);
  Paint_SelectImage(RYImage);
  Paint_Clear(WHITE);

#if 1   // show image for array    
  printf("show image for array\r\n");
  EPD_7IN5BC_Display(gImage_7in5bc_b, gImage_7in5bc_ry);
  DEV_Delay_ms(2000);
#endif

#if 1   // Drawing on the image
  /*Horizontal screen*/
  //1.Draw black image
  Paint_SelectImage(BlackImage);
  Paint_Clear(WHITE);
  Paint_DrawPoint(10, 80, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT);
  Paint_DrawPoint(10, 90, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT);
  Paint_DrawPoint(10, 100, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT);
  Paint_DrawPoint(10, 110, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT);
  Paint_DrawLine(20, 70, 70, 120, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
  Paint_DrawLine(70, 70, 20, 120, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
  Paint_DrawRectangle(20, 70, 70, 120, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
  Paint_DrawRectangle(80, 70, 130, 120, BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL);
  Paint_DrawString_EN(10, 0, "waveshare", &Font16, BLACK, WHITE);
  Paint_DrawString_CN(130, 20, "微雪电子", &Font24CN, WHITE, BLACK);
  Paint_DrawNum(10, 50, 987654321, &Font16, WHITE, BLACK);

  //2.Draw red image
  Paint_SelectImage(RYImage);
  Paint_Clear(WHITE);
  Paint_DrawCircle(160, 95, 20, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
  Paint_DrawCircle(210, 95, 20, BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL);
  Paint_DrawLine(85, 95, 125, 95, BLACK, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
  Paint_DrawLine(105, 75, 105, 115, BLACK, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
  Paint_DrawString_CN(130, 0, "你好abc", &Font12CN, BLACK, WHITE);
  Paint_DrawString_EN(10, 20, "hello world", &Font12, WHITE, BLACK);
  Paint_DrawNum(10, 33, 123456789, &Font12, BLACK, WHITE);

  printf("EPD_Display\r\n");
  EPD_7IN5BC_DisplayHalfScreen(BlackImage, RYImage);
  DEV_Delay_ms(2000);
#endif

  printf("Clear...\r\n");
  EPD_7IN5BC_Clear();

  printf("Goto Sleep...\r\n");
  EPD_7IN5BC_Sleep();
  free(BlackImage);
  free(RYImage);
  BlackImage = NULL;
  RYImage = NULL;
}

/* The main loop -------------------------------------------------------------*/
void loop()
{
  //
}

Den Code habe ich getestet, ist ja für mein 7,5Zoll Display V2 (dreifarbig). Bin noch bei der Einarbeitung, ist doch viel Code-Programmierung. Keine Ahnung ob ich das überhaupt hinbekomme. Nicht ganz einfach.

Aber ein einfaches "Hello World" auf dem Display wäre schonmal ein Anfang. Bisher ist das Display Schneeweiss und hat nie was angezeigt.

mfg

Mach doch mal ein Foto vom Aufbau, das man erkennt, wie du das verkabelt hast.

Siehe Bild oben. Genau so. Auch die Beschriftung des Kabels ist oben. Exakt wie auf dem Foto "Zusammenbau" (Beitrag 1) weiter oben. Das Dev-Board mit dem Driver Board zusammengesteckt und das Display verbunden. Nur das es eben ein 7.5 Zoll V2 Display ist mit drei Farben.

Habe schon aus Verzweiflung ein ESP3286 bestellt, da geht ja das Display dran ohne Driver Board. So hoffe ich, wenn ich da richtig liege.

Folgendes habe ich Bestellt:

Waveshare Universal e-Paper Raw Panel Driver Board, ESP32 WiFi/Bluetooth (WS15823)
Waveshare Universal e-Paper Raw Panel Driver Board ESP8266 WiFi Wireless (WS14138)

Wenn es ohne Driver Board läuft ist das ganze noch kompakter. Und wenn ich richtig liege kann ich das Display direkt an den Anschluss an die bestellten Boards anschließen. Wenn es damit dann auch nicht geht, dann ist evtl. das Display defekt. Aber bis ich die Boards bekomme teste ich mit diesem weiter :slight_smile:

mfg

Wieso verwendest Du diesen Democode? Der dürfte falsch sein.
Richtig sollte "epd7in5b_V2-demo" aus den Beispielen sein. Laut Webseite sollte Dein Display die neue Ausführung mit 800x480 Pixel sein.
Probiere es mal damit.

Das ESP32 Board habe ich seit einer Woche auch. Mein altes 3 farbiges 7,5" Display(weiß/schwarz/gelb) funktioniert damit, wenn ich den chinesischen Font komplett rausnehme. Irgendwie mag mein Rechner die chinesischen Fonts nicht...
Das mit dem vermutlich falschen Testcode ist mir leider erst heute aufgefallen, da ich heute mein vor einem Jahr gekauftes Dispaly endlich ausgepackt habe.

Gruß, Jürgen

Den Code werde ich mal testen. Heute nicht mehr eher später dann :).

Danke für den Hinweis.

Edit:

/* Includes ------------------------------------------------------------------*/
#include "DEV_Config.h"
#include "EPD.h"
#include "GUI_Paint.h"
#include "imagedata.h"
#include <stdlib.h>

/* Entry point ----------------------------------------------------------------*/
void setup()
{
  printf("EPD_7IN5BC_test Demo\r\n");
  DEV_Module_Init();

  printf("e-Paper Init and Clear...\r\n");
  EPD_7IN5BC_Init();
  EPD_7IN5BC_Clear();
  DEV_Delay_ms(500);

  //Create a new image cache named IMAGE_BW and fill it with white
  UBYTE *BlackImage, *RYImage;
  UWORD Imagesize = ((EPD_7IN5BC_WIDTH % 8 == 0) ? (EPD_7IN5BC_WIDTH / 8 ) : (EPD_7IN5BC_WIDTH / 8)) * EPD_7IN5BC_HEIGHT;
  if ((BlackImage = (UBYTE *)malloc(Imagesize)) == NULL) {
    printf("Failed to apply for black memory...\r\n");
    while(1);
  }
  if ((RYImage = (UBYTE *)malloc(Imagesize)) == NULL) {
    printf("Failed to apply for red memory...\r\n");
    while(1);
  }
  printf("NewImage:BlackImage and RYImage\r\n");
  Paint_NewImage(BlackImage, EPD_7IN5BC_WIDTH, EPD_7IN5BC_HEIGHT, 0, WHITE);
  Paint_NewImage(RYImage, EPD_7IN5BC_WIDTH, EPD_7IN5BC_HEIGHT, 0, WHITE);

  //Select Image
  Paint_SelectImage(BlackImage);
  Paint_Clear(WHITE);
  Paint_SelectImage(RYImage);
  Paint_Clear(WHITE);

#if 1   // show image for array    
  printf("show image for array\r\n");
  EPD_7IN5BC_Display(gImage_7in5bc_b, gImage_7in5bc_ry);
  DEV_Delay_ms(2000);
#endif

#if 1   // Drawing on the image
  /*Horizontal screen*/
  //1.Draw black image
  Paint_SelectImage(BlackImage);
  Paint_Clear(WHITE);
  Paint_DrawPoint(10, 80, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT);
  Paint_DrawPoint(10, 90, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT);
  Paint_DrawPoint(10, 100, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT);
  Paint_DrawPoint(10, 110, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT);
  Paint_DrawLine(20, 70, 70, 120, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
  Paint_DrawLine(70, 70, 20, 120, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
  Paint_DrawRectangle(20, 70, 70, 120, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
  Paint_DrawRectangle(80, 70, 130, 120, BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL);
  Paint_DrawString_EN(10, 0, "waveshare", &Font16, BLACK, WHITE);
  Paint_DrawString_CN(130, 20, "微雪电子", &Font24CN, WHITE, BLACK);
  Paint_DrawNum(10, 50, 987654321, &Font16, WHITE, BLACK);

  //2.Draw red image
  Paint_SelectImage(RYImage);
  Paint_Clear(WHITE);
  Paint_DrawCircle(160, 95, 20, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
  Paint_DrawCircle(210, 95, 20, BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL);
  Paint_DrawLine(85, 95, 125, 95, BLACK, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
  Paint_DrawLine(105, 75, 105, 115, BLACK, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
  Paint_DrawString_CN(130, 0, "你好abc", &Font12CN, BLACK, WHITE);
  Paint_DrawString_EN(10, 20, "hello world", &Font12, WHITE, BLACK);
  Paint_DrawNum(10, 33, 123456789, &Font12, BLACK, WHITE);

  printf("EPD_Display\r\n");
  EPD_7IN5BC_DisplayHalfScreen(BlackImage, RYImage);
  DEV_Delay_ms(2000);
#endif

  printf("Clear...\r\n");
  EPD_7IN5BC_Clear();

  printf("Goto Sleep...\r\n");
  EPD_7IN5BC_Sleep();
  free(BlackImage);
  free(RYImage);
  BlackImage = NULL;
  RYImage = NULL;
}

/* The main loop -------------------------------------------------------------*/
void loop()
{
  //
}

Habe den Code auf den ESP geladen aber da kommt dann nichts. Alles einwandfrei durchgelaufen beim Kompilieren bis auf diese Meldungen:

In file included from E:\Markus\Documents\Arduino\libraries\esp32-waveshare-epd\examples\epd7in5bc-demo\epd7in5bc-demo.ino:3:
E:\Markus\Documents\Arduino\libraries\esp32-waveshare-epd\src/EPD.h:1:18: warning: extra tokens at end of #ifndef directive
#ifndef _utility/EPD_H
^
E:***********\Arduino\libraries\esp32-waveshare-epd\src/EPD.h:2:18: warning: ISO C++11 requires whitespace after the macro name
#define _utility/EPD_H
^
Der Sketch verwendet 325505 Bytes (24%) des Programmspeicherplatzes. Das Maximum sind 1310720 Bytes.
Globale Variablen verwenden 13288 Bytes (4%) des dynamischen Speichers, 314392 Bytes für lokale Variablen verbleiben. Das Maximum sind 327680 Bytes.

Aber mal wieder blieb das Display weiß. Könnte es sein das Arduino davon ausgeht das das Display direkt an z.b. einem ESP3286 direkt angeschlossen ist? Ich habe ja auf den GPIOs das Display Driver Board drauf. Keine Ahnung, meine Bestellten ESP3286 sind wohl nicht auf Lager, dauert noch länger bis ich diese bekomme.

mfg

Das ist das Herstellerfoto und nicht Dein Aufbau.
Ich hab hier schon Dinge erlebt, die kann man nicht beschreiben...

Aber Du musst nicht.

Kein Problem hier das Foto :slight_smile:

mfg

Bist Du Dir sicher, das die Verbindung des Display am FPC-Verbinder richtig ist?
Irgendwie sieht mir das so aus, als wäre versucht worden das Kabel Folienkabel nur einzustecken. Die Konmtaktflächen sind in der Regel nicht so weit offen.

Der Verbinder geht aufzumachen, dann Kabel rein, dann zuklappen.
Ist das Folienkabel auf beiden Seiten blank?
FPC_Verbinder

Also ich hab den Hebel nochmal aufgemacht, das Flachband reingeschoben bis es nicht mehr geht und den Hebel wieder geschlossen. Schaut aus wie vorher, das war ganz drinnen.

Am Displaykabel ist nur die Oberseite "Blank", unten ist es nicht "blank". Also nach oben wie auf dem Foto sieht man die Kontakte.

mfg

Jetzt ist die Kontaktfläche des Kabel oben.
Ich frage also nochmal:
Hat das Kabel auf der Unterseite auch eine solche Fläche?

Im Normalfall ist auf der Gegenseite eine Verstärkung - dann muss der Verbinder "Kopfüber" angetackert werden.

Ich schiebe ja das Flachbandkabel soweit rein bis nichts mehr geht und dann lege ich die Arretierung um. Den Hebel den ich ja öffnen muss damit man das Kabel weit genug reinbekommt. Ich kenne solche Kabel, denke ich macht da nichts falsch. Rein bis nichts mehr geht bei offenem Verschluss und denn dann schließen wenn das Kabel ganz drinnen ist. Und fest ist das Kabel dann, weil es ja der Hebel/Arretierung festhält. Und da das Kabel nur einseitig offen ist (Kontakte sichtbar) ist ein verdrehen eher unwahrscheinlich.

mfg

doch, doch, das geht durchaus, mechanisch ist da jedenfalls kein 'verdreh-Schutz' weil ja elektrisch nichts passiert , wenn das Kabel verkehrt rum sitzt. und zwar passirt da elektrisch dann im wahrsten Sinne des Wortes nichts - rein gar nichts, kein Kurzschluss und keine Funktion.
Nimm das kabel nochmals raus und sieh Dir die Kontakte in der Buchse an, wie diese liegen und wo sie kontaktieren.

Habe ich schon. Zweimal raus und wieder rein, ohne sichtbare Änderung. Man sieht sogar auf den Kontakten wo die Arretierung "gegriffen" hat. Das ist ca. 1-2mm vom Anfang des Kabels weg eine kleine Linie in den Kontakten.

Zum Glück kann man es nicht verdrehen, da sonst was kaputt gehen könnte. Da hat echt mal einer mitgedacht bei der Entwicklung des Anschlusses ;).

mfg

Dann nimm ma ne andere lib:

Thread dazu:

Und als Example das:
GxEPD_WiFi_Example.ino - das ist auf den ESP zugeschnitten.

Mit den Beispielen (egal welche in diesem Paket), bekommt ich immer diese Fehlermeldung beim Kompilieren. Gibt auch eine Version 2 von dem Paket da kommt der selbe Fehler.

mfg

Keine Bilder von Fehlermeldungen!
rauskopieren und in codetags hier einfügen.
Nu hab ich zum Glück gesehen, was es ist. Aus der Beschreibung:
The E-Paper display base class is a subclass of Adafruit_GFX, to have graphics and text rendering. (Edit: link-Tag entfernt)

Also brauchst Du die auch noch.

Okay keine Bilder mehr, sorry.

Woher bekomme ich die Datei? Ich schau mal ob mir der Internet hilft :). Dein Link führt mich zu meinem Beitrag, hmm.

Die Datei hier?

mfg