Text von NFC-Tag lesen?
Hallo,
Ich würde gerne deinen Text von nem Nfc Tag lesen. Bisher hab ich mit dem tutorial gearbeitet: https://learn.adafruit.com/adafruit-pn532-rfid-nfc/python-circuitpython.
Da dort aber nur die Hexadezimalen Daten ausgelesn werden und ich den Text, der in UTF-8 formatiert ist, auslesen. Ich hab schon ein bisschen gesuch, aber keinen Code dafür gefunden, den ich einfach nutzen kann.
Muss ich den Rest selbst programmieren oder kennt ihr einen anderen Weg?
LG
1 Antwort
Hey, um den Inhalt des Tags zu lesen, der im NDEF-Format (NFC Data Exchange Format) gespeichert ist, brauchst du noch ein bisschen zusätzlichen Code.
Es gibt die Bibliothek
adafruit_pn532
die Funktionen zum Lesen und Schreiben von Daten auf MiFare-Karten bietet, wie zum Beispiel
mifare_classic_read_block
und
mifare_classic_write_block
Damit kannst du Datenblöcke auf der Karte lesen und schreiben, aber sie interpretieren die Daten nicht als NDEF-Nachrichten.
Um NDEF-Nachrichten zu lesen und zu schreiben, brauchst du eine weitere Bibliothek, die das NDEF-Format unterstützt. Eine solche Bibliothek ist
ndeflib
die du mit
pip install ndeflib
installieren kannst.
Nach der Installation kannst du
ndeflib
verwenden, um NDEF-Nachrichten zu lesen und zu schreiben. Hier ist ein einfaches Beispiel, wie du eine NDEF-Nachricht von einer MiFare-Karte liest:
import ndef
from adafruit_pn532.i2c import PN532_I2C
# Initialisieren das PN532-Modul wie im Tutorial
pn532 = PN532_I2C(i2c, debug=False)
# Warte auf eine Karte
uid = pn532.read_passive_target(timeout=0.5)
if uid is not None:
print('Found card with UID:', [hex(i) for i in uid])
# Lesen den ersten Block der Karte
data = pn532.mifare_classic_read_block(4)
if data is not None:
# Interpretiere die Daten als NDEF-Nachricht
message = ndef.message_decoder(data)
for record in message:
print('Record type:', record.type)
print('Record data:', record.data)
Dass ist nur ein einfaches Beispiel und ist möglicherweise nicht für alle NFC-Tags kompatibel. Manche Tags verwenden spezielle Formate oder Sicherheitsmechanismen, die zusätzlichen Code erfordern.
Danke, zu mifare_classic_read_block() und pn532.ntag2xx_read_block() bin ich gekommen, aber ndeflib hab ich nicht gekannt.
Danke, du hast mir viel Arbeit erspart!
aber ganz so einfach ist es nicht, in diesem Porgramm würdest du ja nur den Block 4 auslesen, und einfach von 0 bis 27 kann man auch nicht, da davor andere Daten gespeichert sind (Encoding, UUID, Schreibschutz), So sieht der Tag in Hex aus: https://imgur.com/a/8xMgmhY