Listing 3
Vorarbeiten
### Raspberry aktualisieren $ sudo apt update $ sudo apt upgrade ### Pi-OS-Pakete installieren $ sudo apt install python3-pip libopenjp2-7-dev libatlas-base-dev ttf-ubuntu-font-family ### SPI- und Grafik-Bibliotheken $ sudo python3 -m pip install RPi.GPIO spidev Pillow numpy ### Bibliothek für das Display $ sudo python3 -m pip install st7735 ### Bibliothek für den RFID-Reader $ sudo python3 -m pip install pi-rc522
Anschließend dürfen Sie nicht vergessen, die SPI-Unterstützung für die Schnittstellen SPI0 und SPI1 zu aktivieren. Dazu öffnen Sie die Datei /boot/config.txt in einem beliebigen Texteditor und fügen ihr am Ende die beiden Zeilen dtparam=spi=onund dtoverlay=spi1-1cs hinzu. Damit die Änderungen Wirkung zeigen, müssen Sie den Raspberry Pi neu starten.
Display einrichten
Das in Listing 4 abgedruckte Beispielprogramm Display.py soll einen per Parameter übergebenen Text auf dem Display anzeigen. Die Ansteuerung des Bildschirms durch das System erfolgt über die ST7735-Bibliothek [5]. Sie wurde speziell dafür entwickelt, Bilddaten zum Display zu übertragen.
Um die passenden Bilddaten zu erzeugen, greifen Sie auf die Bildbearbeitungsbibliothek Pillow [6] zurück. Pillow (Akronym: PIL) ist eine sehr mächtige Bibliothek mit einer Vielzahl von Funktionen, von denen hier nur ein sehr kleiner Teil zum Einsatz kommt. Um einen groben Überblick zu bekommen, was man mit Pillow alles machen kann, sollten Sie einen Blick in die Dokumentation werfen [7].
Beim Ausführen importiert das Skript Display.py zunächst die Bibliothek ST7735, die benötigten Teile von Pillow sowie die Sys-Bibliothek (Zeile 1 bis 5). Letztere übernimmt das Einlesen der Argumente von der Kommandozeile. Danach erzeugt der Code ein Display-Objekt mit zur verwendeten Hardware passenden Parametern (Zeile 6).
Listing 4
Display.py
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
import ST7735
import sys
display = ST7735.ST7735(port=1, cs=0, dc=23, backlight=None, rst=16, width=128, height=160, rotation=0, invert=False, offset_left=0, offset_top=0 )
image = Image.new('RGB', (display.width, display.height))
draw = ImageDraw.Draw(image)
print (len(sys.argv))
if len(sys.argv) < 2:
print ("Usage: Display.py <TEXT>")
sys.exit()
draw.text((0, 70), sys.argv[1], font=ImageFont.truetype("UbuntuMono-RI",10), fill=(255, 255, 255))
display.display(image)
Das Kommando aus Zeile 7 erzeugt ein Bild mit einer für das Display passenden Größe und speichert es im Objekt image. Die nächsten Befehle generieren einen Text aus dem per Kommandozeilen übergebenen Parameter und platzieren ihn schließlich in das Bild (Zeile 14). Das letzte Kommando überträgt das Bild dann ins Display.
Um das Programm auszuführen, verwenden Sie das Kommando python3 Display.py "Hallo Welt!". Prompt erscheint die Ausgabe Hallo Welt! auf dem Bildschirm.
RFID-Reader konfigurieren
Das Programm in Listing 5 liest die jeweils individuelle UID aus den RFID-Chips aus (Zeile 10) und zeigt sie auf dem Display an (Zeile 13). Der Bildschirm wird über einen externen Aufruf angesprochen, sodass sich die Bibliotheken für das Display und den Reader nicht ins Gehege kommen. Nach der Ausgabe der UID liest das Programm in einer Schleife (ab Zeile 14) noch die ersten vier Datenblöcke aus dem RFID-Chip aus und zeigt sie ebenfalls an.
Listing 5
RFID-Reader
import os
from pirc522 import RFID
rdr = RFID()
while True:
rdr.wait_for_tag()
(error, tag_type) = rdr.request()
if not error:
print("Tag detected")
(error, uid) = rdr.anticoll()
if not error:
print("UID: " + str(uid))
os.system('python Display.py "'+str(uid)+' "')
for block in [0,4,8,12]:
(error,data)=rdr.read(block)
print("[ %02d]:"%(block),end="")
for c in data:
if c<=15:
print ("0%x "%(c),end="")
else:
print ("%x "%(c),end="")
print("|",end="")
for c in data:
if c>65 and c<123:
print (chr(c),end="")
else:
print(" ",end="")
print("|")
# Calls GPIO cleanup
rdr.cleanup()
Hierbei gilt es zu beachten, dass sich der Reader nicht gegenüber dem Chip authentifiziert. Das bedeutet, dass das Beispielprogramm nur ungeschützte Chips auslesen kann. Falls Sie sich mit dem Thema RFID-Authentifizierung ein wenig intensiver beschäftigen möchten, werfen Sie am besten einen Blick in die Dokumentation der hier eingesetzten Bibliothek [8].
Um die Chips zu programmieren, hat der Autor verschiedene Smartphone-Apps verwendet. Der NFC Tag Reader [9] eignet sich gut für den Einstieg in die Materie und bietet zahlreiche Funktionen, nervt jedoch mit viel Werbung.
Das werbefrei Duo NFC TagInfo [10] und NFC TagWriter [11] liefert sehr viele Informationen, die für Anfänger etwas verwirrend sein können. Dass sich die Funktionen auf zwei Apps aufteilen, erleichtert die Bedienung.
Das MIFARE Classic Tool [12] ist auf das Arbeiten mit RFID-Chips von Mifare optimiert und unterstützt eine Authentifizierung. Die dem im Test verwendeten Reader-Kit beiliegende S50-Karte und der ebenfalls mitgelieferte RFID-Tag unterstützen beide dieses Verfahren.





