Verbindung eines 2,13" e-ink Display am ESP32-C3-Mini

Hallo zusammen,

ich beschäftige mich erst seit einigen Tagen rund um das wundervolle Thema Mikrocontroller und bin nach einigen hin und her auch immer zum Erfolg gekommen. Nun wollte ich im nächsten Schritt ein Waveshare 2,13" E-Ink Display an mein ESP32-C3-Mini anbinden. Nach vielen Tests und vergeblichen Troubleshooting bin ich aber an einem Punkt wo ich leider nicht weiterkomme. Es scheitert leider schon grundlegend irgendeinen Text am Display anzuzeigen, daher könnte natürlich auch irgendein Defekt vorliegen. Ich gehe aber eher davon aus, dass ich noch irgendeinen Fehler mache. Hat vielleicht jemand eine Idee, warum das Display keinerlei Inhalt anzeigt? Anbei sind drei Bilder von der Verkabelung und hier noch ein Sketch, mit dem ich es unter anderem getestet habe.



PIN-Belegung:
ESP32-C3 GPIO
GPIO6 MOSI / DIN
GPIO7 SCK / CLK
GPIO5 CS
GPIO4 DC
GPIO3 RST
GPIO2 BUSY

Der dazu passende Sketch:

#include <GxEPD2_BW.h>
#include <Fonts/FreeMonoBold9pt7b.h>
#include <SPI.h>

// 🛡️ Sichere Pin-Belegung für ESP32-C3 Mini von Waveshare
#define EINK_CS   5   // Chip Select
#define EINK_DC   4   // Data/Command
#define EINK_RST  3   // Reset
#define EINK_BUSY 2   // Busy

// SPI-Pins
#define EINK_MOSI 6   // DIN
#define EINK_SCK  7   // CLK

// Display-Modell: Waveshare 2.13" V4
GxEPD2_BW<GxEPD2_213_B73, GxEPD2_213_B73::HEIGHT> display(GxEPD2_213_B73(EINK_CS, EINK_DC, EINK_RST, EINK_BUSY));

void setup() {
  Serial.begin(115200);
  delay(1000);
  Serial.println("🚀 Start");

  // SPI-Pins initialisieren
  SPI.begin(EINK_SCK, -1, EINK_MOSI); // SCK, MISO (nicht verwendet), MOSI
  display.init();
  display.setRotation(1); // Querformat
  display.setFont(&FreeMonoBold9pt7b);
  display.setFullWindow();

  // Text zentrieren
  String text = "Hello World";
  int16_t tbx, tby;
  uint16_t tbw, tbh;
  display.getTextBounds(text, 0, 0, &tbx, &tby, &tbw, &tbh);
  int16_t x = (display.width() - tbw) / 2 - tbx;
  int16_t y = (display.height() - tbh) / 2 - tby;

  display.firstPage();
  do {
    Serial.println("⬜ Hintergrund auf Weiß setzen");
    display.fillScreen(GxEPD_WHITE); // Hintergrund auf Weiß setzen
    display.setTextColor(GxEPD_BLACK); // Textfarbe auf Schwarz setzen
    display.setCursor(x, y);
    display.print(text);
    Serial.println("🖨️ Text 'Hello World' in Schwarz anzeigen");
  } while (display.nextPage());
}

void loop() {
  // Keine Aktion im Loop erforderlich
}

Die serielle Ausgabe passt zum Sketch und zeigt an, dass der Text dargestellt wird.

Dies ist der verwendete Board: https://www.waveshare.com/product/esp32-c3-zero.htm
Und das Display: https://www.waveshare.com/2.13inch-e-paper-hat.htm

Hat vielleicht jemand einen Tipp, warum das Display keinerlei Reaktion hierbei zeigt?

Vielen Dank schon mal vorab für jeden Hinweis.
Martin

Ich habe auch ein ePaper-Display (2.9") an einem ESP32 (Lolin) in Betrieb.

Dabei konnte ich auf den #include <SPI.h> und das SPI.begin() verzichten. Die nötigen Informationen werden dem Konstruktor der GxEPD2 ja schon mitgegeben.

@m_mart1n
Bist du sicher, das deine Pinbelegung stimmt ?

Bei mir laufen die TFT SPI (kein e-link) auf diesen Pins am ESP32-C3:

#define TFT_RST GPIO6
#define TFT_CS GPIO7
#define TFT_CLK GPIO8
#define TFT_DC GPIO9
#define TFT_MOSI GPIO10

Hallo,

danke für die Hinweise. Die beiden SPI Zeilen sind auskommentiert und es lässt sich trotzdem einwandfrei kompilieren. Ändert aber nichts am Ergebnis.

Die geänderte PIN-Belegung habe ich ebenfalls probiert. Auch hier ändert sich nichts. Das Display gibt nichts aus. Es zeigt auch keinerlei Reaktion bei der Initialisierung. Bei Youtube Videos sieht man auch wie e-ink Displays bei der Initialisierung mehrmals "blinken" bzw. an und ausgehen.

Sollte die PIN-Belegung aber unabhängig davon nicht egal sein, solang sie korrekt im Sketch definiert wurde?

Hier hast du noch mal einen Beitrag in dem die SPI-Pins gut beschrieben sind. Evtl. stimmen die genutzten Pins bei dir nicht mit den wählbaren überein.

Hast du mal die Library TFT_ eSPI getestet. K. A. ob di mit deinem Display läuft, aber ich habe damit sehr gute Erfahrung gemacht.

Deine Links (Mehrzahl) verweisen doch unten alle auf eine Wiki.

In der Wiki für das Display gibt es auch ein Anleitung für ESP32.

Ich würde mir ein Pin-Layout-Foto von deinen Board besorgen. Dann weiß ich wo welche Schnittstelle / Pin ist. Das Problem ist, das jedes Board die Pins irgendwo anders versteckt hat :wink:

Dann sicher sein das meine Arduino-Ide das Board kennt. (Siehe Wiki Board)
Danach würde ich nach der Anleitung vorgehen.

Das ist eine Standard-Vorgehensweise. Gilt auch für alle anderen Boards. !!

Gruß

Pucki

Ich habe hier was über ESP32 SPI-Pins bei den Random Nerds.
Etwas runterscrollen, da findest Du einen Sketch, der Dir die DEFAULT SPI-Pins Deines Boards ausgibt.

In der Regel verwende ich diese dann auch.

Super, vielen Dank für eure Rückmeldungen. Ich habe mir zwischenzeitlich nochmal ein 0815 ESP32 bestellt, was eine absolute Standardbelegung hat. Dort hat der Sketch zuerst auch nicht funktioniert, bis ich den Textinhalt unten in die Schleife aufgenommen habe statt ihn oben im setup hinzuschreiben.

Den Link habe ich mir angeschaut, aber mein kleines Board hat eine grundlegend andere PIN-Belegung. Die ist mit dem standardisiertem ESP32-C3 Layout nicht vergleichbar. Sieht man auch in dem Link von mir, der zum Board führt.

Das ist ein super Tipp und das probiere ich später auf jeden Fall aus. Vielen Dank dafür!

Das Layout ist nur Sache der Platine (jeder Herstellen macht sein eigenes Ding).
Daher verwende ich nur GPIO als Kennzeichnung, dann passt es wieder.
Und du solltest auch nur GPIO verwenden, die sind Board unabhängig.

Und die gibt es nicht. Siehe vorherige Info.

Naja, aber man sollte mit einen gut dokumentierten Board für den Massen-Markt anfangen.

Da gibt es Pin-Layouts Bilder ohne Ende. Und das macht das Anklemmen viel einfacher.

Mache ich ja genauso. Warum soll man sich ein Exoten kaufen, wenn kein wichtiger Grund vorliegt.

Gruß

Pucki

Also wenn Waveshare ist nicht gut dokumentiert, da bleibt es AZ

Es geht nicht um die Doku selbst. Es geht darum, ob ein MC-Board einfach gestrickt ist = z.b. Feste Pins für feste Schnittstellen hat, oder ob es mega-Flexible ist, und man ALLES per Software regeln kann.

Und gerade für Anfänger halte ich ein Board mit fixen Pins eher für besser.

Zähle mal die Fragen hier im Board zu Soft-Serial :wink: Dann verstehst du es vielleicht.

Gruß

Pucki

Haben die ja Doku. Lesen reicht, oder was
noch bequemer ist ausleden

Im Zeitalter von YT und Instagram.

Du Optimist :wink:

Gruß

Pucki

Auf das fokussieren sich nur die, für die Datenblätter zu schwierig sind.
Es sind manchmal gute Einstiegshilfen (es gibt aber noch mehr Mist), aber um richtig zu arbeiten genügt es nicht.

Gruß Tommy