E-Paper ist eine Display-Technologie, die sich etwas anders anfühlt als gewöhnliche Bildschirme. Das Bild bleibt ohne jeglichen Stromverbrauch erhalten — kein Refresh, keine Hintergrundbeleuchtung, nichts. Einmal gezeichnet kann man alles ausstecken und das Bild bleibt. Das macht es nützlich für alles, was sich nicht ständig aktualisieren muss: Namensschilder, Dashboards, Sensorwerte, die man gelegentlich abliest.
Dies ist das WeAct 4,2-Zoll-Modul. Acht Pins, läuft auf 3,3 V und kommuniziert über SPI — obwohl die Beschriftungen SDA und SCL lauten, was nach I2C aussieht. Ist es nicht. Das hat mich kurz verwirrt, bevor ich das Datenblatt überprüft habe.
Bauteile
- ESP8266 (NodeMCU oder ähnliches)
- WeAct 4,2" E-Paper-Display-Modul
- Jumperkabel
Verdrahtung
Das Display hat acht Pins. Sie werden wie folgt mit dem ESP8266 verbunden:
- VCC → 3,3 V
- GND → GND
- SDA → D7 (MOSI)
- SCL → D5 (CLK)
- CS → D8
- D/C → D3
- RES → D4
- BUSY → D2
Trotz der SDA/SCL-Beschriftung handelt es sich um SPI, nicht I2C. Chip Select, Data/Command, Reset und Busy-Pin werden alle benötigt — keinen davon offen lassen.
Bibliotheken
Zwei Bibliotheken aus dem Arduino Library Manager: GxEPD2 und Adafruit GFX. Beide installieren. GxEPD2 übernimmt den Display-Treiber und die seitenbasierte Render-Schleife. Adafruit GFX stellt Schriften und Zeichenprimitive bereit.
Sketch
Die GxEPD2-Bibliothek verwendet einen seitenbasierten Pufferansatz — man zeichnet innerhalb einer do { ... } while (display.nextPage())-Schleife. Hier ein minimaler Sketch, der Text auf das Display ausgibt:
#include <GxEPD2_BW.h>
#include <Fonts/FreeMonoBold9pt7b.h>
GxEPD2_BW<GxEPD2_420_GDEY042T81, GxEPD2_420_GDEY042T81::HEIGHT> display(
GxEPD2_420_GDEY042T81(/*CS=*/ D8, /*DC=*/ D3, /*RES=*/ D4, /*BUSY=*/ D2));
void setup() {
display.init();
display.setRotation(1);
display.setFont(&FreeMonoBold9pt7b);
display.setTextColor(GxEPD_BLACK);
display.setFullWindow();
display.firstPage();
do {
display.fillScreen(GxEPD_WHITE);
display.setCursor(10, 30);
display.print("Hello, World");
} while (display.nextPage());
}
void loop() {}
Upload und Ergebnis
Den Sketch hochladen, einige Sekunden warten, während sich das Display initialisiert, und das Bild erscheint. Beim Refresh gibt es ein Flackern — das ist normal. E-Paper setzt alle Pixel vor dem Zeichnen eines neuen Bildes zurück, was das schwarz-weiße Flimmern verursacht. Danach ist das Bild eingefroren. Strom trennen und es bleibt.
Den vollständigen Code gibt es auf meinem GitHub und verlinkt auf meiner Website. Wer sein Display verkabelt oder etwas damit baut, kann es im Discord teilen — ich würde gerne sehen, was die Leute mit dem persistenten Bild anstellen.