Analog addMessage() definiert die Anwendung einen REST-Service, der mithilfe des DisplayService die Nachricht aus der Datenbank holt, die Image-Generierung veranlasst und den Refresh des Displays mit der erzeugten Bitmap-Datei einleitet.
Auch bei der Java-Repräsentation des Displays selbst handelt es sich um eine Spring-Komponente, die Sie mit @Autowired im DisplayService verdrahten. Spring muss noch wissen, wie es diesen zu erzeugen hat: Die Klasse DisplayFactory bietet eine mit @Create annotierte Methode, die das übernimmt. Je nachdem, ob die Software lokal auf dem Entwicklungsrechner oder auf dem Raspberry Pi läuft, aktualisiert sie das Display und versetzt es gegebenenfalls anschließend in den Sleep-Modus.
Bauen und Start
Sie bauen die Anwendung im Verzeichnis eInkDemo/ mithilfe des Kommandos mvn clean install. Maven lädt alle benötigten Bibliotheken in sein Repository, was beim ersten Aufruf eine Weile dauern kann. Über die Targets clean install erstellt das Build-Management-Tool im Verzeichnis target/ die Datei eInkDemo-0.0.1-SNAPSHOT.jar. Sie enthält die komplette Anwendung inklusive Application Server und Datenbank.
Auf dem Raspberry Pi müssen Sie gegebenenfalls noch das SPI-Protokoll in der RasPi-Konfiguration unter interfacing options aktivieren und das Display wie in der Pin-Belegung für das 4,2-Zoll-Display (Abbildung 3) beschrieben anschließen.
Auf dem lokalen Entwicklungsrechner lautet das Profil (spring.profiles.active) zum Start local, auf dem Raspberry Pi startet die Anwendung mit dem Profil raspi (Listing 6). Die Datei eInkDemo-0.0.1-SNAPSHOT.jar muss im Verzeichnis des Aufrufers liegen. Das zur Image-Generierung verwendete Java Swing benötigt auf dem Raspberry Pi einen laufenden X-Server. Damit die Anwendung headless ohne grafische Oberfläche läuft, müssen Sie noch ein paar Schritte erledigen [3].
Listing 6
$ java -Djava.awt.headless=false -jar -Dspring.profiles.active=raspi eInkDemo-0.0.1-SNAPSHOT.jar --debug
Beim Hochfahren wird im selben Prozess auch die Datenbank gestartet und ein neues Schema erstellt. Das Verhalten lässt sich über ein Property (spring.jpa.hibernate.ddl-auto) ausschalten.
Nachrichten
Über http://localhost:8080/einkdemo/swagger-ui.html erreichen Sie die REST-Schnittstelle addMessage() im Webbrowser. Die Oberfläche und das Auflisten der Services übernimmt Swagger. Arbeiten Sie nicht auf demselben Rechner, auf dem Sie die Anwendung gestartet haben, ersetzen Sie localhost durch den fraglichen Rechnernamen oder die IP-Adressen. Unter /addMessage geben Sie Nachricht und Autor ein; der Server sollte die Eingabe mit dem HTTP-Statuscode 200 (OK) bestätigen.

Abbildung 5: Nachrichten für den E-Ink-Infoscreen geben Sie per Webbrowser von einem beliebigen Endgerät aus ein.
Haben Sie auf dem RasPi die H2-Konsole gestartet, dann können Sie sich darüber im Webbrowser unter http://localhost:8080/einkdemo/h2-console selbst davon überzeugen, dass die Nachricht auch in der Datenbank angekommen ist (Abbildung 6). Es erscheint ein Anmeldedialog, bei dem Sie nur noch die Datenbank-URL auf jdbc:h2:mem:testdb ändern müssen. Ein Blick beziehungsweise Klick auf die Tabelle MESSAGE verrät Ihnen anschließend, ob der zuvor eingegebene Datensatz sein Ziel erreicht hat.

Abbildung 6: Über die H2-Konsole prüfen Sie bei Bedarf, ob Ihre Nachrichten auch in der Datenbank ankommen.
Ein Aufruf des REST-Services refreshDisplay aktualisiert den E-Ink-Bildschirm, und die zuvor als Message eingegebene Nachricht erscheint (Abbildung 7).

Abbildung 7: Nach einem Aufruf des REST-Services refreshDisplay erscheint die frisch eingegebene Nachricht auf dem E-Ink-Display.
Ausblick
Mit Node-RED [4] ließe sich die Anwendung auf unkomplizierte Weise erweitern, sodass Sie beispielsweise Mitteilungen auch per E-Mail an das Display schicken könnten. Wollen Sie auch Mitteilungen von außerhalb des lokalen Netzes zulassen, aber dazu nicht gleich die REST-Schnittstelle ins Internet stellen, dann parsen Sie die E-Mails einfach mit Node-RED und rufen den REST-Service addMessage() auf.
Aber auch optisch ließe sich nachlegen: Waveshare bietet mittlerweile 6 und 9,7 Zoll große E-Ink-Displays an, die mit einer Refresh-Rate von unter einer Sekunde aufwarten, 16-Bit-Graustufen unterstützen und sich somit besonders für die Anzeige von Grafiken eignen.
Die Autorin
Anke Dietzen arbeitet als Java-Entwicklerin, der Infoscreen ist ihr erstes Raspberry-Pi-Projekt.





