DIY e-Paper Display mit Raspberry Pi Zero & Waveshare e-Paper HAT

Vor kurzem bin ich in einem Raspberry Pi-Shop auf ein relativ günstiges e-Paper-Display gestoßen. Texte oder Bilder werden hier dauerhaft durch farbige Pigmente angezeigt, ohne dass dafür eine Erhaltungsspannung erforderlich ist. Ihr kennt das vielleicht von E-Book-Readern. Da ich zufällig ein Raspberry Pi Zero übrig hatte, hab ich mich kurzerhand an einem DIY e-Paper Projekt versucht.

Einkaufsliste:

Alternativ kann man auch den 5€ günstigeren Raspberry Pi zero W nehmen und selbst einen Header drauflöten.
Das Display kann man ganz einfach direkt auf die GPIO-Pinleiste des Pi Zeros aufstecken.

Hier ist das waveshare 2.7 inch e-Paper HAT auf einem Raspberry Pi 3 montiert

Software

Auf der Herstellerseite des Displays gibt es eine sporadische Anleitung und einen GitHub-link. Die Code-Beispiele auf GitHub scheinen etwas aktueller zu sein, als die auf der Hersteller-Seite verlinkten. Außerdem hat mir dieser DIY Blog-Artikel geholfen.

Los geht’s mit ein paar „apt-gets“:
sudo apt-get update
sudo apt-get install python3-pip python3-pil python3-numpy
sudo pip3 install RPi.GPIO

Als nächstes laden wir die Display-Treiber und libraries vom Hersteller runter. Es gibt keinen Universaltreiber, jedes Display hat einen dazugehörigen Treiber.
Wir kopieren zunächst einfach die komplette GitHub-Repo:
git clone https://github.com/waveshare/e-Paper

Das sollte ein neues Verzeichnis erstellt haben, in dem die komplette Ordnerstruktur der GitHub-Repo liegt. Wir wechseln in das Verzeichnis, das die Raspberry-Pi-Python3-Beispiele enthält:
cd e-Paper/Raspberry Pi/python3/examples

und führen das zum Display passende Python-Script aus:
python3 epd_2in7_test.py

Nun sollte der Democode laufen und Bilder und Texte auf dem Display darstellen! Cool!
Ihr merkt, dass der Aufbau etwas dauert. Für eine „Uhr“, die jede Minute einen Refresh macht, ist es aber ausreichend.

Als Beispiel

…hier mal mein „Uhr“-Script auf GitHub.

Es ist ein „work-in-progress“, das sind die bisherigen Funktionen:

  • Datum und Uhrzeit anzeigen (wow)
  • Die Temperatur des Raspberry Pis anzeigen
  • Meinen ThingSpeak-channel auslesen (zeigt Temperatur und Luftfeuchtigkeit)
  • meinen Google Calendar auslesen (zeigt Geburtstage von Freunden/Familie an)
  • die Track ID (Interpret & Liedname) des aktuellen Songs auf meinem Volumio Multiroom Audio Player anzeigen

DIY Raspberry Pi Multi-Room-Audio-System mit Volumio

UPDATE 2021:

Viel einfacher, stabiler und auch flexibler (da einfach auf ein bestehendes Rasperry Pi OS installierbar) geht es mit LMS (Logitech Media Server) und Squeezelite (Client / Player).
Mich hatte in der ursprünglichen Recherche nach einem Multiroom-System das „Logitech“ im Namen abgeschreckt. Der Name täuscht aber, es ist kein proprietäres System – Logitech entwickelt tatsächlich quelloffen… Die Software scheint viel öfter geupdatet zu werden als Volumio und scheint mir auch insgesamt solider. Außerdem gibt es sehr viele ports auf die verschiedensten Hardware-Plattformen.

Hätte ich das mal früher probiert.. naja, deswegen ist Bob auch für Recherchen (und Archiv) zuständig, und nicht ich 😉

Mehr über das Setup mit LMS und Squeezelite steht hier.

 

Ursprünglicher Beitrag von 2018:

Volumio ist  super, um eine Raspberry Pi in einen dedizierten Audioplayer, mit allen denkbaren Funktionen zu verwandeln. Insbesondere die Spotify-Integration hat mir bei Volumio gut gefallen.

Mein Volumio-Player ist ein Raspberry Pi Zero W, auf das ich ein Hifi-Berry DAC+ Zero Raw gelötet habe, und dient als Spotify-Connect-Player für die Wohnzimmer-Hifi-Anlage.

(Edit Januar 2020: Mittlerweile ist es ein Pi 3 B+ mit einem Hifi-Berry DAC+)

Durch Zufall bin ich dann auf die Möglichkeit gestoßen, aus mehreren, mit Volumio bestückten Raspberry-Pis, ein Multi-Room-System zu bauen. Jeder Lautsprecher, jede Bluetooth-Box mit Aux-Eingang wird dann zum Multi-Room-Device. Natürlich vorausgesetzt, man besitzt noch weitere Raspberry Pis…

Möglich macht’s das Snapcast-Plugin von Saiyato.

Im Netz gibt es schon einige Anleitungen, wie man Volumio + Snapcast installiert, allerdings waren die nie vollständig. Deswegen hier mal die notwendigen Schritte:

    1. Volumio auf dem Raspberry Pi installieren
    2. SSH auf dem Volumio aktivieren (über das Webinterface unter „http://volumio.local/dev“)
    3. Das Snapcast Plugin via SSH installieren (SSH username=volumio, pass=volumio)
      1. git clone https://github.com/Saiyato/volumio-snapcast-plugin.git
      2. cd volumio-snapcast-plugin/
      3. rm volumio-snapcast-plugin.zip
      4. volumio plugin install

(EDIT: Mittlerweile kann man das Snapcast plugin auch über das Webinterface installieren! Unter Plugins -> Misc. Punkt 2 und 3 ist damit überflüssig)

  1. Das Plugin über das Volumio-Webinterface konfigurieren. Das ist relativ selbsterklärend. Es gibt einen Snapcast Server und dazugehörige Clients.
  2. Nun sollte man bereits ein funktionierendes Multi-Room-System haben. Der Server streamt einen synchronen Stream an alle Clients. Wichtig ist, dass man auch beim Server selbst eine Client-Instanz aktiviert und hier „localhost“ einstellt, damit der Server selbst auch Snapcast zur (dann mit den Clients synchronen) Audio-Wiedergabe benutzt. Ganz praktisch ist noch die Android-App „SnapDroid“, mit der man die Lautstärke der einzelnen Multi-Room-Instanzen fernsteuern kann

Vorteil der Snapcast-Lösung gegenüber anderen Multi-Room-Systemen ist, dass Snapcast das Audiosignal nach der Quelle abgreift und als Audio-Stream an die Clients verteilt. Nur so kann man mit nur einem Spotify-Account mehrere Clients gleichzeitig bedienen.

Als Codecs stehen PCM, ogg und FLAC zur Auswahl. FLAC zusammen mit „-c flac:4“ in der  „Additional CLI commands“ klingt und funktioniert am besten, hier gibt’s noch Infos dazu.

Will man Spotify Connect benutzen, wird es trotzdem etwas komplizierter:

    1. Auf dem Snapcast-Server „Volumio Spotify Connect 2“ über das Plugin-Menü im Webinterface installieren und aktivieren, falls noch nicht gemacht
    2.  Unter den Snapcast-Plugin-Settings sowohl beim Server, als auch bei allen Clients, überall 44,1 kHz einstellen, da es sonst zu lustigen Fehlern beim Resampling kommt (Spotify-Musik läuft sonst z.B. zu schnell/hochgepitched)
    3. Unter den Snapcast-Plugin-Settings des Servers im Abschnitt „Spotify Integration“ „volspotconnect2“ einstellen, und auf save klicken
    4. das Snapcast-Plugin-Fenster neu laden
    5. Das Auswahlfeld unter „Patch Spotify Configuration File“ sollte nun automatisch entsprechend den oberen Einstellungen aktualisiert worden sein. In unserem Fall sollte da „volspotifyconnect2“ stehen.
    6. Nun auf „patch file“ klicken
    7.  Zum Spotify Connect Plugin wechseln
    8. Hier einfach direkt auf „save“ klicken (die vorhin gepatchte File wird nun aktiviert)
    9. Fertig

Will man das Spotify Standalone-Plugin von Volumio nutzen, geht man analog der oberen Schritte vor. Allerdings ist zum Zeitpunkt dieses Blogeintrags das standalone Spotify Plugin verbuggt, da Spotify die API vor kurzem verändert hat – man kann seine Playlists nicht mehr durchsuchen. Einen etwas umständlichen temporären Fix gibt es hier (Kurzversion: Diese index.js zusammen mit dem refresh token, den man bei Zeile 451 der index.js einfügt, ersetzt die bestehende index.js unter /data/plugins/music_service/spop. Danach Volumio neustarten!).

(Edit Dezember 2019: Es gibt nun eine aktualisiertes Spotify Plugin (V 2.00 direkt im Volumio-Plugins-Menü installierbar) mit eingebauter auth-Funktion!)

Àpropos „Fix“: Aus irgendeinem Grund ist bei Volumio keine Zeitzone eingestellt, es wird UTC angenommen. Um nicht bei der Weck- und Einschlaffunktion, oder bei etwaigen cronjobs, umständlich rumrechnen zu müssen, gibt man folgendes via SSH ein:

sudo nano /etc/default/crda
im Editor dann vervollständigen:
REGDOMAIN=ETSI
speichern und schließen, dann:
timedatectl set-ntp true
sudo dpkg-reconfigure tzdata
hier dann dem Menü folgen und die richtige Zeitzone einstellen, in meinem Fall Europe>Berlin. Überprüfen, ob es geklappt hat, geht mit:
date

Bonus!
Wer wie ich einen alten Laptop in einer Schublade liegen hat, kann zusätzlich noch die x86-Version von Volumio auf einem bootfähigen USB Stick installieren und den Laptop damit booten. Damit erhält man dann automatisch die Volumio-Kiosk-Version, d.h. man braucht zur Steuerung von Volumio kein Webiterface, sondern kann dies direkt am Laptop-Display tun, was z.B. für Parties ganz praktisch sein dürfte.

Nachtrag 1!

Wer wie ich Volumio als Spotify-Wecker mit dem Standalone-Spotify (SPOP) benutzten will, bekommt einige Stolpersteine in den Weg geschmissen. Die integrierte Weckfunktion von volumio funktioniert nicht mit Spotify-Wiedergabelisten.

Lösung: cronjob! Das muss man zunächst installieren:

sudo apt-get install cron

mit

crontab -e

erstellt man einen neuen crontab:

# unter der woche
30 7 * * 1-5 /volumio/app/plugins/system_controller/volumio_command_line_client/volumio.sh next
15 8 * * 1-5 /volumio/app/plugins/system_controller/volumio_command_line_client/volumio.sh pause

#samstag und sonntag
25 9 * * 6,7 /volumio/app/plugins/system_controller/volumio_command_line_client/volumio.sh next
30 10 * * 6,7 /volumio/app/plugins/system_controller/volumio_command_line_client/volumio.sh pause

Im obigen Beispiel „klingelt’s“ unter der Woche von 7:30 bis 8:15, am Wochenende von 9:25 bis 10:30 Uhr.
Wenn man die Zeitzone wie vorher beschrieben eingestellt/gefixt hat, passt hier auch alles (mit „date“ kann mans noch mal prüfen).
Nun muss man noch die Spotify-Tracks oder Spotify-Playlists (Achtung: Spotify-Playlists werden ab 100 Tracks gecropped!) in die Warteschlange von Volumio schieben, und am besten die zufällige Wiedergabe einstellen.
Fertig! Von nun an hat man einen Spotify-Wecker! Klappt natürlich auch mit Snapcast!

Hier ist übrigens meine Aufwach-Playlist, in 100-Track-Parts gesplittet, damit beim Import in die Volumio-Warteschlange nichts gecropped wird: Part 1, Part 2, Part 3, Part 4

Nachtrag 2:

um die Android-App RasPi Check mit Volumio benutzen zu können (praktisch, um z.B. die CPU-Temperatur zu checken), tippt man folgendes in SSH:

  1. sudo apt-get install binutils
  2. sudo nano /etc/rc.local

Oberhalb der Zeile mit „exit 0“ fügt man nun folgendes ein:

# make /dev/vchiq accessible for the video group
chgrp video /dev/vchiq
chmod g+rw /dev/vchiq

speichern und schließen. Nun sollte RasPi Check nach einem Reboot wie gewohnt funktionieren

Nachtrag 3:

Das ist ganz praktisch, wenn man wie ich volumio auch als „Radiowecker“ benutzt:

Ein “ Lautstärke-fade-in“ script, welches nach dem Start von Volumio ausgeführt wird, hab ich hier als Variante, die die Snapclient volumes steuert (benötigt python und eine externe library „snapcast.control„) und hier als Variante, die die Lautstärke via CLI command steuert.

Die Snapclient-Variante funktioniert auch bei DACs, die keinen Hardware Mixer haben, wie z.B. der HifiBerry Zero.

Nachtrag 4:

Es gibt mittlerweile einen Windows Client!