Skip to content

Nutzung des PN532 NFC HAT

Aaron edited this page Mar 30, 2021 · 1 revision

PN532 Board

Überblick zu PN532 Board und zugehörige Bibliothek

PN532 Board

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.

PN532-NFC-HAT-3

Derzeit verwenden wir das I2C Interface wofür man folgende Einstellungen aktivieren muss:

  1. Setze L0 zu H und L1 zu K (Jumpers)

  2. Verbinde RSTPDN mit D20 und INTO mit D16 (Jumper)

  3. Setze folgende DIP Schalter:

    SCK MISO MOSI NSS SCL SDA RX TX
    OFF OFF OFF OFF ON ON OFF OFF
  4. Verbinde PN532 NFC Hat mit dem Raspberry Pi

    PN532 NFC HAT Raspberry Pi (BMC)
    SCL SCL
    SDA SDA
  5. Aktivere das I2C Interface des Raspberry Pi

    • Führe den Befehl sudo raspi-config aus
    • Interfacing Options -> I2C -> Yes

IMG_20200708_211535 IMG_20200708_212021 IMG_20200708_211725

PN532 Bibliothek

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()

NDEF

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
Clone this wiki locally