-
Notifications
You must be signed in to change notification settings - Fork 0
Nutzung des PN532 NFC HAT
Bei dem PN532 Chip handelt es sich um ein 13,56MHz NFC RFID Modul. Wir verwenden das PN532 NFC HAT, welches Schnittstellen für I2C, SPI und UART zur Verfügung stellt.
Derzeit verwenden wir das I2C Interface wofür man folgende Einstellungen aktivieren muss:
-
Setze L0 zu H und L1 zu K (Jumpers)
-
Verbinde RSTPDN mit D20 und INTO mit D16 (Jumper)
-
Setze folgende DIP Schalter:
SCK MISO MOSI NSS SCL SDA RX TX OFF OFF OFF OFF ON ON OFF OFF -
Verbinde PN532 NFC Hat mit dem Raspberry Pi
PN532 NFC HAT Raspberry Pi (BMC) SCL SCL SDA SDA -
Aktivere das I2C Interface des Raspberry Pi
- Führe den Befehl sudo raspi-config aus
- Interfacing Options -> I2C -> Yes
Die zugehörige Bibliothek gibt es in C und Python. Wir haben uns für Python entschieden, da es bereits im Projekt verwendet wird.
Einige Funktionen die einem zur Verfügung stehen:
#Überprüfen ob ein Tag verfügbar ist
read_passive_target(timeout=0.5)
#Schreiben/Lesen von NTAG2XX Tags
ntag2xx_write_block(block_number, data)
ntag2xx_read_block(block_number)
#Authentifizierung von Mifare Classic Tags:
mifare_classic_authenticate_block(uid, block_number, key_number, key)
#Schreiben/Lesen von Mifare Classic Tags:
mifare_classic_write_block(block_number, data)
mifare_classic_read_block(block_number)
Um die Bedienung und Formatierung zu vereinfache, haben wir eine Klasse auf die PN532 Bibliothek und ndeflib gebaut.
Folgende Methoden bietet es zu NDEF:
#Encoding
success, data = ndefEncode(text)
#Decoding
success, records = ndefDecode(data)
Folgende Methoden bietet es für den PN532:
#Mifare Classic
clearClassic(uid)
success = writeToClassic(data,uid)
success, data = readFromClassic(uid)
#NTAG2xx
success = writeToUltralight(data)
success, data = readFromUltralight()
Für das Encoding und Decoding von NDEF Records und Messages verwenden wir ndeflib. Die Libary bietet einfach umfangreichen Support für alle verschiedenen Record-Typen. Des Weiteren sind alle Funktionen sehr gut dokumentiert und mit ausreichend Beispielen auf der Dokumentationsseite zu finden.
Installation:
pip install ndeflib
https://pypi.org/project/ndeflib/
>>> import ndef
>>> hexstr = '9101085402656e48656c6c6f5101085402656e576f726c64'
>>> octets = bytearray.fromhex(hexstr)
>>> for record in ndef.message_decoder(octets): print(record)
NDEF Text Record ID '' Text 'Hello' Language 'en' Encoding 'UTF-8'
NDEF Text Record ID '' Text 'World' Language 'en' Encoding 'UTF-8'
>>> message = [ndef.TextRecord("Hello"), ndef.TextRecord("World")]
>>> b''.join(ndef.message_encoder(message)) == octets
True