Es gibt diese Projekte, bei denen man eigentlich nur kurz etwas ausprobieren möchte. Und dann steht plötzlich ein ziemlich dicker Bilderrahmen auf dem Tisch, man beschäftigt sich mit Bitmap-Dateien, ImageMagick, Floyd-Steinberg-Dithering, RP2040, UF2-Dateien und Firmware-Updates – und schreibt am Ende noch eine eigene Software dafür. Genau so ist es mir mit dem Waveshare PhotoPainter mit RP2040 ergangen.
Eigentlich ist der PhotoPainter für mich zunächst nur ein Prototyp und eine kleine Spielwiese. Ich möchte damit herausfinden, was sich mit einem solchen E-Paper-Display alles anstellen lässt, bevor ich irgendwann ein eigenes Projekt daraus mache. Und genau dafür eignet sich das Gerät erstaunlich gut. Der Rahmen selbst ist allerdings eher Geschmackssache. Er ist ziemlich grob, ziemlich dick und kommt in einem mehr oder weniger klassischen Buchenholz-Look daher. Für einen fertigen Bilderrahmen wäre das definitiv nicht meine erste Wahl. Für einen Prototypen ist es dagegen völlig egal – schließlich geht es mir in erster Linie um die Technik, die darin steckt.
Interessant ist dabei vor allem der RP2040, der den PhotoPainter antreibt. Man könnte fast sagen, es ist ein kleiner Raspberry-Pi-Zero-Ersatz ohne WLAN – wobei der Vergleich natürlich technisch etwas hinkt. Für ein eigenes Projekt würde ich vermutlich ohnehin eher einen ESP einsetzen. Damit hätte ich WLAN direkt an Bord und könnte später beispielsweise Bilder aus dem Netzwerk laden oder das Gerät über eine eigene Weboberfläche konfigurieren. Aber für erste Experimente ist der Waveshare eine ziemlich praktische Ausgangsbasis.

Die Sache mit den Bildern
Ganz so einfach wie „Bild auswählen und auf den Rahmen kopieren“ ist es allerdings nicht. Die Bilder müssen in einem bestimmten Bitmap-Format vorliegen. Waveshare beschreibt im eigenen Wiki, wie die Bilder entsprechend vorbereitet werden. Das funktioniert grundsätzlich, allerdings war ich mit der Qualität nicht wirklich zufrieden. Die Bilder wirkten auf dem Display teilweise ziemlich blass und flau. Was auf dem normalen Monitor noch gut aussah, konnte auf dem E-Paper plötzlich aussehen, als hätte jemand heimlich den Kontrastregler heruntergedreht.
Bei meiner Suche nach besseren Ergebnissen bin ich auf eine Anleitung von Andreas Mausch gestoßen. Dort werden unter anderem zwei interessante Änderungen an der Bildaufbereitung empfohlen: Der Kontrast soll um 30 Prozent erhöht werden (-brightness-contrast 0,30) und die Farbsättigung auf 200 Prozent (-modulate 100,200,100). Zusätzlich wird das Floyd-Steinberg-Verfahren für das Dithering empfohlen. Und tatsächlich macht das einen ziemlich deutlichen Unterschied. Gerade bei Fotos mit vielen Farbübergängen und feinen Details sieht das Ergebnis wesentlich besser aus.
Natürlich hätte ich jetzt einfach die entsprechenden Befehle jedes Mal von Hand in der Kommandozeile eingeben können. Aber wer mich kennt, ahnt bereits, dass das nicht lange gutgehen konnte.
Natürlich wurde daraus ein Python-Programm
Ich mag Python. Sehr sogar. Und deshalb lag es natürlich nahe, die Bildaufbereitung ein wenig komfortabler zu machen. Also habe ich mir ein kleines Programm gebaut, mit dem ich Bilder auswählen, die verschiedenen Einstellungen verändern und möglichst direkt das Ergebnis kontrollieren kann. Damit musste ich nicht jedes Mal irgendwelche Kommandozeilenparameter zusammensuchen und anschließend das Ergebnis auf den PhotoPainter kopieren.
Natürlich blieb es nicht bei „ein kleines Programm“. Es kamen weitere Einstellungen hinzu, etwas mehr Komfort und irgendwann war aus dem kleinen Hilfsprogramm eine richtige kleine Anwendung geworden. Als Oberfläche musste zunächst mein persönlicher Erzfeind Tkinter herhalten. Wir haben eine lange und komplizierte Beziehung: Ich benutze es immer wieder, obwohl ich mich jedes Mal darüber ärgere.
Später habe ich die Oberfläche dann noch auf TkBootstrap umgebaut. Das Ganze sah damit deutlich besser aus und fühlte sich auch etwas weniger nach „Programm von 1998“ an. Beim anschließenden Debugging musste dann mein Coding-Assistent ein wenig helfen. Natürlich hätte ich die Fehler auch selbst gefunden. Irgendwann. Wahrscheinlich. Es wäre halt hässlicher geworden und hätte deutlich länger gedauert.
Aber genau solche kleinen Werkzeuge sind für mich eigentlich ein schöner Nebeneffekt solcher Projekte. Aus „Ich möchte nur die Bilder etwas besser aufbereiten“ wird plötzlich eine eigene Anwendung, die man vielleicht später auch für andere Projekte wieder gebrauchen kann.

Noch etwas Firmware dazu?
Nachdem die Bildaufbereitung einigermaßen zufriedenstellend funktionierte, war natürlich noch lange nicht Schluss. Beim weiteren Stöbern bin ich auf ein interessantes Projekt von Thomas Cellerier (tcellerier) gestoßen: Pico_ePaper_73 auf GitHub. Dabei handelt es sich um einen Mod beziehungsweise eine alternative Firmware für den PhotoPainter. Interessant sind unter anderem die erweiterten Möglichkeiten bei der Anzahl der speicherbaren Bilder sowie die Möglichkeit, die Refresh- und Cycle-Anzahl anzupassen. Genau das werde ich jetzt einmal ausprobieren.
Das Aufspielen der Firmware ist dabei erfreulich unkompliziert. Laut Anleitung wird der Rahmen zunächst mit den Tasten RUN und BOOT gestartet und per USB am Rechner angeschlossen. Der RP2040 erscheint dann als Wechseldatenträger. Anschließend kopiert man einfach die passende .uf2-Datei auf diesen Speicher und das Update startet automatisch.
Dabei gibt es allerdings einen kleinen Stolperstein: Am besten nicht am Mac durchführen. macOS legt auf Wechseldatenträgern gerne zusätzliche versteckte Index-Dateien ab. Und genau das kann der PhotoPainter offenbar nicht besonders gut leiden. Unter Windows ist die Sache deutlich unkomplizierter.
Außerdem sollte man sich beim Firmware-Update nicht von der völligen Ereignislosigkeit irritieren lassen. Es gibt keinen Fortschrittsbalken, keine Prozentanzeige und auch keine Meldung wie „Firmware wird aktualisiert – bitte warten“. Man kopiert die Datei auf das Laufwerk und scheinbar passiert einfach gar nichts. Tatsächlich läuft das Update aber bereits. Also bitte nicht nach zehn Sekunden nervös werden, den Stecker ziehen und anschließend feststellen, dass man aus einem Bilderrahmen einen sehr dekorativen Briefbeschwerer gemacht hat. Einfach Geduld haben und ein paar Minuten warten.

Und was kommt jetzt?
Für mich ist der Waveshare PhotoPainter deshalb weniger ein fertiger digitaler Bilderrahmen als vielmehr ein ziemlich praktischer Entwicklungsbaukasten. Display, Elektronik und grundlegende Firmware sind vorhanden und man kann sich zunächst auf die Dinge konzentrieren, die einen wirklich interessieren: Bildaufbereitung, Darstellung, Firmware und natürlich die Frage, was man mit dem Ganzen eigentlich noch anstellen kann.
Das endgültige Projekt würde ich vermutlich anders aufbauen. Ein eigener Rahmen wäre allein schon wegen der etwas speziellen Buchenholz-Optik Pflicht. Und statt des RP2040 würde ich wahrscheinlich einen ESP einsetzen, damit WLAN direkt an Bord ist. Dann könnte der Bilderrahmen beispielsweise Bilder aus dem Netzwerk beziehen, automatisch aktualisieren oder über eine eigene Weboberfläche konfiguriert werden.
Bis dahin darf der Waveshare aber erst einmal als Versuchskaninchen herhalten. Und genau dafür ist er erstaunlich gut geeignet.

☕ Hat dir dieser Beitrag geholfen?
Ich stecke viel Herzblut und Zeit in diesen Blog. Wenn du mir danke sagen möchtest, kannst du mir hier einen virtuellen Kaffee spendieren: buymeacoffee oder Ko-fi. Vielen Dank für deine Unterstützung!
