Update zu PaPiRus Zero

In Kapitel 17.7 beschreiben wir das E-Paper-Display PaPiRus Zero. In der Zwischenzeit wurde die Python-Bibliothek sehr stark überarbeitet.

Mittlerweile ist diese auch kompatibel zu Python 3. Folgende Schritte müssen Sie nun ausführen um das Display wie im Buch einzurichten:

Automatische Installation der Pakete:

curl -sSL https://pisupp.ly/papiruscode | sudo bash

Nun werden Sie gefragt, ob Sie die Bibliothek für Python 2,3 oder beide installieren möchten. Im Zweifel wählen Sie die Option für beide Versionen. In der darauffolgenden Abfrage wählen Sie das 2.0″-Display, sofern Sie das Modell PaPiRus Zero haben. Nach einem automatischen Neustart kann die Bibliothek eingesetzt werden.

Auch das Python-Programm haben wir leicht angepasst. Das finden Sie am Ende das Beitrags Die Neuerungen sind:

  • Das Display kann nun einfach rotiert werden screen = Papirus(rotation)
  • An Python 3 angepasst

In der GitHub-Repo finden Sie Beispiele zu vielen Methoden der Bibliothek: https://github.com/PiSupply/PaPiRus

Zudem gibt es nun auch eine Klasse, die es erlaubt Bilder und Text sehr einfach Darzustellen und zu Positionieren.
Die neue Klasse kann mit from papirus import PapirusComposite importiert werden.
Allerdings ist es nicht ganz nachvollziehbar, warum mit PapirusComposite keine Methode zur pixelweisen Aktualisierung (partial_update) vorhanden ist. Die Aktualisierung von Text und Bildern mit PapirusComposite lässt das Display immer wieder komplett schwarz werden, bevor die aktualisierten Werte angezeigt werden. Wenn Sie, so wie in unserem Programm, das Display jede Sekunden aktualisieren wollen, so kann das ganz schön nervig sein.
Aus diesem Grund sind wir in unserem Beispiel bei der Klasse Papirus geblieben und erstellen das Bild samt Text mit PIL.

Das nachfolgende Bild aus unserem Programm können Sie per Rechtsklick herunterladen.
Speichern Sie das Bild unter RPiLogo.bmp im gleichen Ordner wie Ihr Python-Programm.

Hintergrundbild für das PaPiRus-Programm

Das Ergebnis wird dann wie auf dem folgenden Bild aussehen.

Programmcode:

#!/usr/bin/env python3
# Datei: PaperDisplay.py

from papirus import Papirus
import subprocess
import RPi.GPIO as GPIO
import time
import socket
from PIL import Image
from PIL import ImageFont
from PIL import ImageDraw

# Tastenbelegung (BCM)
SW1 = 21
SW2 = 16
SW3 = 20
SW4 = 19
SW5 = 26

# GPIO-Setup
GPIO.setmode(GPIO.BCM)
GPIO.setup(SW1, GPIO.IN)
GPIO.setup(SW2, GPIO.IN)
GPIO.setup(SW3, GPIO.IN)
GPIO.setup(SW4, GPIO.IN)

# Die Darstellung auf dem Bildschirm kann rotiert werden. Werte 0,90,180,270
screen = Papirus(rotation = 180)

# Daten aufbereiten
def InfoData():
Datum = time.strftime("%d.%m %H:%M:%S")
temp=subprocess.Popen("/opt/vc/bin/vcgencmd measure_temp",
shell=True, stdout=subprocess.PIPE).stdout.read()
temp = (temp[5:9])
temp = temp.decode("utf-8")
hostname = socket.gethostname()
ip = subprocess.Popen("hostname -I", shell=True,
stdout=subprocess.PIPE).stdout.read()
ip = ip.decode("utf-8")

# Bild bearbeiten und Hintergrund bearbeiten
hg =Image.open("RPiLogo.bmp")
draw = ImageDraw.Draw(hg)
font = ImageFont.truetype("FreeMonoBold.ttf", 15)
draw.text((0, 5), Datum, (0, 0, 0), font=font)
draw.text((0, 20), str(ip[:-1]),(0,0,0),font=font)

draw.text((0, 35), "CPU-Temp: %s*C" % (str(temp)), (0, 0, 0), font=font)
draw.text((0, 50), "Hostname: %s" %(hostname), (0, 0, 0), font=font)
hg.save("hg.bmp")

# Bild darstellen
screen.display(hg)
screen.partial_update()
return

# Taster 1: komplette Aktualisierung
def Refresh(pin):
screen.update()

# Interrupt festlegen
GPIO.add_event_detect(SW1, GPIO.RISING, callback=Refresh,
bouncetime = 100)

while True:
InfoData()
time.sleep(1)