2393365

NFC-Reader mit Raspberry Pi selbst bauen

28.11.2018 | 14:30 Uhr | Swen Hopfe

In diesem Projekt geht es um einen NFC-Reader im Eigenbau. Gesteuert wird der Reader über den Raspberry Pi.

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.

PN532 V3-Readermodul
Vergrößern PN532 V3-Readermodul
© 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.

Ist man sich über das zu verwendende Interface 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.

Erscheint dieses Bild, wurde das Lesermodul gefunden
Vergrößern Erscheint dieses Bild, wurde das Lesermodul gefunden
© 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
Tag auslesen
Vergrößern Tag auslesen
© 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:

NTAG213-Label mit 7 Byte UID ergibt eine solche Ausgabe
Vergrößern NTAG213-Label mit 7 Byte UID ergibt eine solche Ausgabe
© Swen Hopfe

Geschafft!

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

Diverse Kommandozeilen-Tools von libnfc
Vergrößern Diverse Kommandozeilen-Tools von libnfc
© 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.

Pi und Readermodul verbinden
Vergrößern Pi und Readermodul verbinden
© 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.

Fertiges Lesegerät im Rundgehäuse
Vergrößern Fertiges Lesegerät im Rundgehäuse
© 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.

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

 

PC-WELT Marktplatz

0 Kommentare zu diesem Artikel

PC-WELT Hacks - Technik zum Selbermachen?

Raspberry Pi erfreut sich gerade unter Bastlern einer großen Beliebtheit. Kein Wunder, denn mit der 35-Euro-Platine lassen sich viele spannende Projekte realisieren. Vom Mediacenter, Netzwerkspeicher, Fotomaschine bis hin zum Überwachungssystem ist alles möglich. Dieser Bereich ist aber nicht nur dem Raspberry Pi gewidmet, sondern bietet auch viele Tipps, Tricks und Anleitungen für andere spannende Bastelprojekte.

2393365