Wir sind in der Welt der berührungslos funktionierenden Chipkarten, Tags oder Labels angekommen. Solcherlei RFID-Technik gibt es bei Zutrittssystemen oder Studentenausweisen schon länger, hält aber erst in letzter Zeit richtig Einzug, beispielsweise im E-Ticketing oder beim Bezahlen mittels kontaktloser Kreditkartenfunktion im Supermarkt oder an der Tankstelle. Auch viele Smartphones können mittlerweile „NFC“, dort eröffnen sich ganz neue Möglichkeiten.
Es gibt einige Unterschiede in der Ausprägung der Technik. Der klassische Bereich der Chipkarten ist in Normen wie der ISO14443 spezifiziert. Bei den mobilen Geräten spielen nun auch Standards aus den NFC-Books eine Rolle, wo man heutzutage Bookmarks oder Visitenkarten untereinander austauschen kann. Auch andere Hardware nutzt mittlerweile diese Technik, wo sich zum Beispiel eine Digitalkamera gegenüber ihrer Dockingstation identifizieren kann.
Allen Anwendungen mit “Near-Field-Communication” ist aber gemein, dass über eine Kurzstrecke eine Funkverbindung zur Datenübertragung aufgebaut wird. Es hat sich das 13,56-MHz-Band im Proximity/Nahfeld-Bereich durchgesetzt, man kommuniziert über bis zu 10 cm Abstand.
Bei der notwendigen Technik in Karten, Schlüsselanhängern oder Labeln wird gern über “Transponder” gesprochen, die dort verbaut sind. Damit ist die Grundeinheit von Chip und Antenne gemeint. Passive Transponder sind kompakt und brauchen keine weiteren Komponenten, denn sie beziehen ihre Stromversorgung aus dem anliegenden elektrischen Feld über ihre Antenne.

©Swen Hopfe
In unserem Projekt geht es um einen Leser, mit dem wir diverse Transponder auswerten und kodieren wollen. Natürlich kann man Reader auch kaufen. Solche Chipkartenleser kennt man im Allgemeinen als Geräte mit USB-Anschluss. Im Handel findet man sie selten, und wenn, dann oft auch als Klasse-3-Leser mit PIN-Pad und Display, für das Homebanking oder den neuen Personalausweis. In der Industrie sind sie häufiger anzutreffen und in vielen Terminals im öffentlichen Nahverkehr verbaut.
Aber einen solchen RFID-Reader kann man sich auch selber bauen und die Software ganz auf die eigenen Bedürfnisse abstimmen. Dazu braucht es einmal die Leseeinheit mit Antenne, bei uns ein Breakout-Board mit dem PN532-Chipsatz. Der Steuerrechner soll ein Raspberry Pi sein. Das PN532-Board in der 3er-Version bietet für die Anbindung gleich drei Möglichkeiten: per I2C, SPI oder seriell.
Der Reader wird bei uns später an einen RPi3 mit Raspbian Stretch per I2C angebunden, das sollte auch kein Problem beim Raspberry Pi 4 machen. Ob aber alle Tools für das Terminal und diverse Bibliotheken auch unter Raspian Buster funktionieren, da gibt es in unserem Projekt derzeit noch keinen Praxistest dazu.
Ist man sich also über das zu verwendende Interface für die Anbindung des Reader-Boards einig, müssen eventuell die Microschalter auf der Platine umgestellt werden, um – wie in unserem Aufbau – die I2C-Schnittstelle zu aktivieren. Die Verkabelung zum Pi braucht dann nur GND, VCC (5V), SDA und SCL, und anschließend kann man eine Probe mit
$ sudo i2cdetect -y 1
machen. Ergibt sich das folgende Bild, wurde das Reader-Modul also gefunden. Manchmal bekommt man auch die Adresse 0x25 angezeigt.

©Swen Hopfe
Nun zuerst libusb-dev und dh-autoreconf und die PC/SC-Bibliotheken installieren:
$ sudo apt-get install i2c-tools libusb-dev dh-autoreconf
$ sudo apt-get install pcscd libpcsclite1 libpcsclite-dev
Danach die libnfc-Sourcen holen und das Paket vorbereiten:
$ cd ~
$ git clone https://github.com/nfc-tools/libnfc.git
$ cd libnfc
$ autoreconf -vis
$ ./configure --with-drivers=all --sysconfdir=/etc --prefix=/usr
$ sudo make clean
$ sudo make install all
Damit “nfc-list” funktioniert (“error while loading shared libraries: libnfc.so.5: cannot open shared object file: No such file or directory”), muss mitunter noch Folgendes gefixt werden:
$ echo '/usr/local/lib' | sudo tee -a /etc/ld.so.conf.d/usr-local-lib.conf && sudo ldconfig
Die Konfiguration von libnfc weiß auch noch nicht, welches Device angesprochen werden soll. Für unser PN532-Modul am I2C-Bus muss dazu im Config-File unter /etc/nfc/ noch der entsprechende connstring eingetragen werden:
connstring = pn532_i2c:/dev/i2c-1
Daneben können in der libnfc.conf noch Einstellungen zu Environment-Variablen, Device-Name, Scan und Log-Level vorgenommen werden. Oder man arbeitet mit den Defaults, die für uns funktionieren. Ist die Konfigurationsdatei noch nicht vorhanden, kriegt man ein Beispiel aus dem „contrib“-Verzeichnis aus dem „libnfc“-Verzeichnisbaum oder man legt sie neu an.
Anschließend sollt man mittels
$ nfc-list
den NFC-Reader angezeigt bekommen:
nfc-list uses libnfc 1.7.1
NFC device: pn532_i2c:/dev/i2c-1 opened

©Swen Hopfe
Jetzt wird es beim ersten Test spannend. Dazu einen Transponder auf das Reader-Modul auflegen und wieder
$ nfc-list
im Terminal eingeben. Ein NTAG213-Label mit 7 Byte UID ergibt dann eine solche Ausgabe:

©Swen Hopfe
Geschafft!
Recht hilfreich, dass man nun auch alle diverse Kommandozeilen-Tools von libnfc zur Verfügung hat, wie:

©Swen Hopfe
Hat man Libfreefare installiert, erweitert sich der Funktionsumfang noch. Der detaillierte Umgang mit kontaktlosen Chipkarten wie Mifare Classic, Desfire, Ultralight oder NTAG soll dann auch nicht Bestandteil hier sein. Das ist ein weites Feld und soll Ihren eigenen, speziellen Projekten überlassen bleiben.

©Swen Hopfe
Nachdem nun alles funktioniert, kann unser Gehäuse geschlossen werden. Für unser Projekt haben wir ein fertiges Rundgehäuse für den Pi verwendet, für die Aufnahme eines „großen“ Pi vorbereitet und mit einer ebenen Fläche gut für das Auflegen der Transponder. Letztlich reicht auch ein Pi Zero W , die Rechenaufgaben sind nicht besonders anspruchsvoll.
Nur eine WiFi-Verbindung sollte es haben, damit man in einem Terminal an einem Rechner im heimischen Netzwerk arbeiten kann. Dann braucht unser Lesegerät nur ein einziges Verbindungskabel zum Stecker-Netzteil, das aus der seitlichen Aussparung herausgeführt ist.

©Swen Hopfe
PN532-Boards bekommt man im Versandhandel, es gibt verschiedene Ausführungen dieser Platinen. Die Version 3 hat mir gefallen, weil sie kompakt ist und ein Antennendesign hat, was im Durchmesser einen guten Kompromiss zwischen größeren Transpondern, wie in Chipkarten verbaut, und kleineren Objekten macht. Damit ist auch eine gute Lesbarkeit von Schlüsselanhängern oder kleinen Labeln gegeben. Auf kommende Modelle bin ich gespannt.
Auch die anderen Anbindungsmöglichkeiten an den Raspi wurden getestet. So bietet SPI die beste Übertragungsgeschwindigkeit. Jeder mag da selber auswählen. Auch die Libnfc ist sicher nicht die einzige Variante für die Programmierung. Wer in Python firm ist, kann mittels nfcpy loslegen.
Nicht uninteressant auch, dass der PN532-Chipsatz die Möglichkeit bietet, NFC-Tags zu emulieren – das können derzeit die wenigsten USB-Geräte. Interessant ist diese Technik allemal, und wohl auch ein Baustein im „Internet der Dinge“, wo alles und überall miteinander kommunizieren soll…
Einige weitere Raspberry-Pi-Projekte:
Raspberry Pi Zero W als smarter USB-Stick
Zeitraffer-Aufnahmen mit dem Raspberry Pi Zero machen
Webcam mit Raspberry Zero Pi W einrichten
Mit Raspberry Pi Zero und Webcam unterwegs
Nächtliche Tierfotografie mit NoIR-Cam und Raspberry Pi