Startseite>Infoscreen mit E-Ink-Displays
Aus Raspberry Pi Geek 06/2019

Infoscreen mit E-Ink-Displays

© Anke Dietzen

Auf einen Blick

Anke Dietzen

Ein maßgeschneiderter Infoscreen auf RasPi-Basis mit stromsparendem E-Ink-Display zeigt Termine, Bilder, Mitteilungen und Wetterinformationen an.

E-Book-Reader mit E-Ink-Displays wie der Kindle oder der Tolino erfreuen sich großer Beliebtheit, und auch Supermärkte zeichnen inzwischen ihre Preise mit kleinen E-Ink-Displays aus. Dieser Bildschirmtyp zeichnet sich durch eine wie gedruckt wirkende, präzise Optik aus und lässt sich selbst im Sonnenschein gut lesen. Zudem behalten die Displays auch ohne Leistungsaufnahme das zuletzt angezeigte Bild in der Anzeige. Strom benötigen Sie nur zum Ändern der Anzeige, entsprechend niedrig fällt der Verbrauch aus.

Allerdings eignen sie sich eher für die Anzeige von statischem Inhalt, da eine Änderung des Seiteninhalts je nach Modell durchaus mehrere Sekunden dauern kann. Für die Wiedergabe dynamischer, sich schnell verändernder Informationen wie Animationen eignen sie sich prinzipbedingt also nur wenig. Weitere grundlegende Informationen zur Technik von E-Ink-Displays finden Sie bei Interesse im Kasten “E-Ink-Displays: Grundlagen”. Seit ein paar Jahren liegen die E-Ink-Displays auch preislich in einer Region, die sie für Hobbybastler interessant machen.

E-Ink-Displays: Grundlagen

E-Ink-Displays [5] bestehen aus Millionen kleiner Mikrokapseln, jede ungefähr so groß wie der Durchmesser eines menschlichen Haars. Diese Kapseln enthalten eine farblose Flüssigkeit mit darin gelösten, negativ geladenen weißen und positiv geladenen schwarzen Pigmenten. Die Kapseln sind in kleinen Waben organisiert, die quasi die Pixel des Displays darstellen.

Zur Ansteuerung jedes Pixels dienen zwei Elektroden, eine am Boden und eine weitere durchsichtige auf dem Pixel. Durch das Anlegen einer Spannung zwischen diesen Elektroden lässt sich ein elektrisches Feld erzeugen. Je nach Polarität zieht das Feld die weißen oder die schwarzen Pigmente an die Oberfläche, sodass das Pixel für den Betrachter dann weiß oder schwarz erscheint. Bei dreifarbigen Displays kommen Pigmente einer dritten Farbe hinzu. Durch geschickte Wahl der Pigmente kommt dann bei einer bestimmten Spannung jeweils nur eine Farbe an die Oberfläche.

Zwar lassen sich die Pixel durch das Anlegen einer veränderten Spannung einzeln ändern, doch Schmutzeffekte machen es von Zeit zu Zeit notwendig, das Display wieder in einen neutralen Grundzustand zu bringen. Dazu schaltet man das Display mehrfach abwechselnd von vollständig schwarz auf vollständig weiß. Dieses “Blinken” war für ältere E-Book-Reader typisch.

Der Infoscreen

Die Idee war, zwei in einem Bilderrahmen montierte E-Ink-Displays als Infoscreen zu nutzen [1]. Ein dreifarbiges 7,5-Zoll-Exemplar soll Fotos anzeigen, die in vergangenen Jahren im aktuellen Monat aufgenommen wurden (Abbildung 1). Daneben lassen sich auf den Displays auch kurze Mitteilungen darstellen: Ein 4,2 Zoll großer Bildschirm zeigt die Wettervorhersage und weist auf anstehende Termine hin (Abbildung 2).

Abbildung 1: Das 7,5-Zoll-E-Ink-Display kann auch gelbe Pixel darstellen und kommt für Bilder zum Einsatz.

Abbildung 1: Das 7,5-Zoll-E-Ink-Display kann auch gelbe Pixel darstellen und kommt für Bilder zum Einsatz.

Abbildung 2: Das 4,2-Zoll-E-Ink-Display zeigt Wetterinformationen und Termine in Schwarz-Weiß.

Abbildung 2: Das 4,2-Zoll-E-Ink-Display zeigt Wetterinformationen und Termine in Schwarz-Weiß.

Es kommen zwei Displays des Herstellers Waveshare zum Einsatz, die der ansteuernde Raspberry Pi über das SPI-Protokoll [2] anspricht (Abbildung 3). Der Raspberry Pi bietet zwei Pins für den SPI-Chip-Select, CS0 und CS1, an denen jeweils ein Display hängt. Die Pins für MOSI und CLK teilen sich die Bildschirme. Die Leitung vom Display zum Raspberry Pi (MISO) kommt nicht zum Einsatz.

Abbildung 3: Der Übersichtlichkeit halber zeigen wir hier zwei RasPis, das Projekt funktioniert aber auch mit nur einem.

Abbildung 3: Der Übersichtlichkeit halber zeigen wir hier zwei RasPis, das Projekt funktioniert aber auch mit nur einem.

Des Weiteren benötigt jedes Display noch Pins für 3,3 Volt Spannung, Ground und frei konfigurierbare Pins für Reset, Busy und DC (Data/Command Selection). Waveshare bietet seine E-Ink-Bildschirme mit oder ohne Raspberry-Pi-HAT an. Greifen Sie für eines der Displays zur Variante mit HAT, erspart Ihnen das beim vorgestellten Aufbau das Löten.

Die Waveshare-Displays bringen einen programmierbaren Controller mit, dessen Logik der von Waveshare zur Verfügung gestellte Demo-Code verdeutlicht. Vor der Anzeige eines Bilds müssen Sie den Bildschirm erst einmal aufwecken und initialisieren. Der Waveshare-Demo-Code erwartet als Format für das anzuzeigende Bild eine monochrome Bitmap. Eine solche lässt sich beispielsweise über das Bildbearbeitungsprogramm Gimp sehr einfach aus einer mehrfarbigen Bitmap erzeugen.

Nach dem Einlesen der Bitmap übernimmt der Demo-Code die Transformation des Bilds in das interne Format des Displays. Bei den dreifarbigen Bildschirmen erwartet der Waveshare-Code neben der monochromen Bitmap für die Schwarz-Weiß-Anteile des Bilds eine zweite monochrome Bitmap für die farbigen Anteile. Wichtig ist es, das Display nach jeder Aktualisierung wieder in den Sleep-Modus zu versetzen, um zu vermeiden, dass dauerhaft Spannung anliegt.

Exkurs: Partielle Aktualisierung

Partielle Aktualisierung (partial refresh) bedeutet, dass sich nicht, wie sonst üblich, das gesamte Display mit dem typischen “Blinken” aktualisiert. Stattdessen ändert sich nur ein Teil des Displays ohne “Blinken”. Das ermöglicht beispielsweise kleine Animationen. Allerdings kann man nach einer partiellen Aktualisierung des Displays bei genauerem Hinsehen oft noch einen Schatten der vorher angezeigten Grafik erkennen. Diese Schatten (Ghosting) lassen sich durch ein vollständiges Aktualisieren des Displays entfernen.

Eine solche vollständige Aktualisierung des Displays müssen Sie auf alle Fälle in regelmäßigen Abständen vornehmen, um ein Einbrennen zu verhindern, also das irreversible Stehenbleiben von Fragmenten auf dem Display (Abbildung 4). Die kleineren zweifarbigen Waveshare-Displays unterstützen eine partielle Aktualisierung, so auch der hier eingesetzte 4,2-Zoll-Bildschirm [6]. Da der Display-Controller bei der Programmierung eine große Freiheit bietet, können Sie auch selbst mit den Spannungen experimentieren. Dabei sollten Sie jedoch Vorsicht walten lassen, um dauerhafte Schäden zu vermeiden.

Abbildung 4: Ein E-Ink-Display mit eingebrannter Anzeige.

Abbildung 4: Ein E-Ink-Display mit eingebrannter Anzeige.

Das Ansteuern der E-Ink-Bildschirme übernimmt ein auf der Rückseite des Bilderrahmens montierter Raspberry Pi. Auf ihm läuft ein Application Server, der eine REST-Schnittstelle anbietet. So lässt sich der RasPi auf einfachem Weg steuern, etwa über einen Webbrowser oder über einen Eintrag in die Crontab. Informationen zu Bildern, Wetter und Nachrichten hält eine Datenbank vor, als Programmiersprache kommt Java zum Einsatz. Da Waveshare keine Treiber-Software für Java zur Verfügung stellt, stand als erster Schritt das Portieren der Treiberlogik nach Java an. Sie finden den entsprechenden Code im Github-Repo [3] zum Projekt.

Software

Für den E-Ink-Infoscreen wollen wir via Webbrowser (REST-Schnittstelle) Nachrichten eingeben und in der Datenbank auf dem RasPi speichern (addMessage()). Über einen zweiten REST-Service (refreshDisplay) werden die Nachrichten aus der Datenbank ausgelesen und auf dem 4,2 Zoll großen Waveshare-Display angezeigt. Hat man die entsprechende Basis erst einmal geschaffen, lässt sich die Anwendung leicht erweitern, um andere Informationen zu speichern und anzuzeigen. Das Projekt verwendet keine partielle Aktualisierung der Bildschirme, sondern frischt immer die gesamte Anzeige auf.

Dank der Plattformunabhängigkeit von Java lässt sich die Anwendung testweise auf dem lokalen Entwicklungsrechner starten, um den REST-Service und die Datenbank zu testen. Auch die Image-Generierung lässt sich über eine lokale Testklasse ausprobieren, was Zeit spart und die Displays schont. Als Software kommt Spring Boot zum Einsatz – eine gute Gelegenheit, diese in der Ära von Microservices populäre Technik einmal auszuprobieren (siehe Kasten “Spring und Spring Boot”). Gebaut wird die Anwendung mit Maven (siehe Kasten “Maven”).

Spring und Spring Boot

Beim ebenso mächtigen wie weitverbreiteten Open-Source-Java-Framework Spring steht die Entkopplung von Applikationskomponenten im Vordergrund; sogenannte Spring Beans enthalten die Programmierlogik. Der Spring-Container verwaltet die vom Entwickler erstellten Spring Beans und übernimmt deren Erzeugung. Der Entwickler gibt lediglich an, welche Spring Beans er benötigt, woraufhin der Spring-Container das gewünschte Bean zur Laufzeit injiziert (Dependency Injection). Das vermeidet Abhängigkeiten zwischen Beans und bringt diverse Vorteile mit sich, zu denen eine geringere Komplexität sowie bessere Möglichkeiten zum Testen zählen. Mit Spring Boot erstellen Sie auf einfachem Weg eine auf Spring basierende Anwendung inklusive Application Server.

Maven

Bei Maven handelt es sich um ein Build-Management-Tool, das typischerweise für Java-Anwendungen zum Einsatz kommt. Anhand der Angaben in Mavens Konfigurationsdatei pom.xml, die unter anderem die Abhängigkeiten des Projekts enthält, übernimmt Maven das Bauen, Installieren und Ausrollen der Anwendung. Sowohl Spring Boot als auch Maven bauen auf das Paradigma “Konvention vor Konfiguration”, um die Komplexität zu verringern: Das Einhalten gewisser Vorgaben, wie etwa einer vorgeschriebenen Dateistruktur, ersetzt eine kompliziertere Konfigurierbarkeit.

Man könnte einwenden, für so ein kleines Projekt sei das Verwenden eines Application Servers überdimensioniert. Das mag sein, doch andererseits schenkt Spring Boot mit seinen Starter-Paketen einem viel an Funktionalität, die man sonst selbst einbinden müsste: Es genügt, die gewünschten Abhängigkeiten in Mavens pom.xml anzugeben. So gibt es in dieser Datei neben Einträgen für Spring Boot auch solche für das Display, den Datenbanktreiber, für Swagger sowie für die Spring-Boot-Starter-Pakete für Datenbankzugriffe (spring-boot-starter-data-jpa) und REST- Webtechniken (spring-boot-starter-web).

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 7 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
€0,99 – Kaufen
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland