NFC/RFID Bricklet

Bemerkung

Das NFC/RFID Bricklet ist abgekündigt und wird nicht mehr verkauft. Als Ersatz wird das NFC Bricklet empfohlen.

Features

  • Kann Mifare Classic und NFC Forum Typ 1 und 2 RFID/NFC Tags lesen/schreiben
  • Reichweite auf 10cm begrenzt (3,94")
  • Arbeitsfrequenz 13,56 MHz

Beschreibung

Mit dem NFC/RFID Bricklet können Bricks um die Fähigkeit erweitert werden NFC/RFID Tags zu lesen und zu schreiben. Dazu muss der NFC oder RFID Tag in der Nähe des Bricklets platziert werden (bis zu 10cm Entfernung).

Aktuell werden Mifare Classic und NFC Forum Typ 1 und 2 unterstützt.

Die Möglichkeit Tags zu emulieren als auch NFC P2P Kommunikation könnte in Zukunft über ein Firmware Update hinzugefügt werden.

Technische Spezifikation

Eigenschaft Wert
Sensor PN532
Stromverbrauch 115mA
   
Unterstütze Tags Mifare Classic, NFC Forum Typ 1, NFC Forum Typ 2
Arbeitsfrequenz 13,56MHz
   
Abmessung (B x T x H) 50 x 85 x 5mm (1,97 x 3,35 x 0,2")
Gewicht 15g

Ressourcen

Kompatibilität

Das Bricklet sollte mit jedem Tag funktionieren des zu Mifare Classic, NFC Forum Typ 1 und NFC Forum Typ 2 kompatibel ist. Die folgenden Tags wurden von uns getestet:

Mifare Classic:

  • FM11RF08
  • MF1S50

NFC Forum Typ 1:

  • Jewel
  • Topaz 512 (TPZ-505-016)

NFC Forum Typ 2:

  • NTAG203(F)
  • NTAG210
  • NTAG213
  • NTAG215
  • NTAG216
  • Mifare Ultralight (MF01CU1)

Jedes Smartphone das NFC beherrscht, kann NFC Forum Typ 1 und 2 Tags lesen.

Page Größen und andere Dinge die man wissen sollte

Mifare Classic und NFC Forum Typ 1 und 2 haben verschiedene Page Größen und verschiedene Speicher-Strukturen. Wichtig ist diese Struktur zu beachten und nicht versehentlich den Tag zu locken.

Mifare Classic:

  • Page Größe 16 Byte (1 Page wird pro Aufruf von RequestPage/WritePage gelesen/geschrieben).
  • 4 Pages bilden einen Sektor.
  • Sektor 0 (Seiten 0-3) sollte nicht überschrieben werden.
  • Die letzte Seite jedes Sektors steuert den Zugriff (Seite 7, 11, 15, ..). Diese Seite sollte nur überschrieben werden, wenn man weiß was man tut.

Adafruit hat eine recht gute Beschreibung der Speicherstruktur: Link

NFC Forum Typ 1:

  • Page Größe 8 Byte (2 Pages werden mit einem Aufruf von RequestPage/WritePage gelesen/geschrieben).
  • Pages 0-2 sind für die Zugriffskontrolle reserviert. Diese Pages sollten nicht überschrieben werden, wenn man nicht weiß was man tut.
  • Page 15 ist reserviert und kann nicht geschrieben werden.

NFC Forum Typ 2:

  • Page Größe 4 Byte (4 Pages werden mit einem Aufruf von RequestPage/WritePage gelesen/geschrieben).
  • Page 0-1 ist nur lesbar und enthält die Tag ID.
  • Page 3-4 und die letzten zwei Pages (Die Page-Nummern hängen von der Größe des Tags ab) enthalten die Lock-Bits. Diese sollten nur überschrieben werden, wenn man weiß was man tut.

Tags Erkennen, Lesen und Schreiben

Um einen Tag zu erkennen und auszuwählen muss RequestTagID mit einem Tagtyp (Mifare Classic or NFC Forum Type 1/2) aufgerufen werden. Der Zustand (State) des Bricklets wird sich zu STATE_REQUEST_TAG_ID ändern und anschließend zu STATE_REQUEST_TAG_ID_READY wenn ein Tag gefunden wurde. Die ID des Tags kann anschließend durch Aufruf von GetTagID ausgelesen werden. Der Tag mit dieser Tag ID ist nun ausgewählt und kann gelesen/geschrieben werden. Wenn der Zustand sich zu STATE_REQUEST_TAG_ID_ERROR ändert wurde kein Tag mit dem angegebenen Tag-Typ gefunden. In diesem Fall kann ein weiterer Aufruf von RequestTagID versucht werden.

Wenn die Tag ID bekannt ist und GetTagID eine andere ID zurück gibt bedeutet dies, dass ein anderer Tag in der Nähe des Bricklets ist. In diesem Fall kann RequestTagID erneut aufgerufen werden, das NFC/RFID Bricklet wechselt zwischen den beiden Tags mit jedem Aufruf von RequestTagID. RequestTagID selektiert also jeweils ein Tag.

Wenn ein Tag selektiert wurde (der Zustand ist STATE_REQUEST_TAG_ID_READY) kann das Tag Page für Page gelesen oder geschrieben werden:

NFC/RFID Bricklet read/write procedure for Type 1 and 2

Um eine Page zu lesen muss als erstes RequestPage aufgerufen werden. Der Zustand ändert sich zu STATE_REQUEST_PAGE_READY. Anschließend kann die Page mittels eines Aufrufs von GetPage gelesen werden. Eine Seite kann geschrieben werden mittels des Aufrufs von WritePage. Der Schreibvorgang ist beendet wenn der Zustand zu STATE_WRITE_PAGE_READY wechselt.

Nachdem ein Tag selektiert wurde kann diese ohne Aufrufe von RequestTagID gelesen/geschrieben werden solange das Tag nicht aus der Nähe des NFC/RFID Bricklets entfernt wurde.

Spezialfall für Mifare Classic

Im Falle von Mifare Classic muss man sich zuerst für den Zugriff auf eine Page authentifizieren:

NFC/RFID Bricklet authenticate/read/write procedure for Mifare Classic

Das bedeutet das jedesmal bevor RequestPage oder WritePage aufgerufen werden soll, AuthenticatingMifareClassicPage aufgerufen werden muss. Anschließend muss gewartet werden bis sich der Zustand zu STATE_AUTHENTICATING_MIFARE_CLASSIC_PAGE_READY ändert. Ansonsten ist die Benutzung von Mifare Classic Tags identisch zu den oben beschriebenen.

Der Standardschlüssel (key number A) eines Mifare Classic Tags ist [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF].

NFC NDEF Messages

Das NFC Forum hat ein NFC Data Exchange Format (NDEF) spezifiziert um Daten zwischen Tags und Smartphones auszutauschen. NDEF Messages bestehen aus einem oder mehreren NDEF Records. Viele der definierten NDEF Records können von jedem Smartphone interpretiert werden welches NFC-Kommunikation unterstützt.

Wir haben ein Beispielprogramm implementiert welches Text, URI und Mime Media Type Records auf NFC Forum Type 1 und 2 Tags schreiben kann.

Das Beispiel ist in Python implementiert, kann aber einfach als Startpunkt für eine Implementierung in einer anderen Programmiersprache verwendet werden.

Erster Test

Um ein NFC/RFID Bricklet testen zu können, müssen zuerst Brick Daemon und Brick Viewer installiert werden. Brick Daemon arbeitet als Proxy zwischen der USB Schnittstelle der Bricks und den API Bindings. Brick Viewer kann sich mit Brick Daemon verbinden, gibt Informationen über die angeschlossenen Bricks und Bricklets aus und ermöglicht es diese zu testen.

Als nächstes muss das NFC/RFID Bricklet mittels eines Bricklet Kabels mit einem Brick verbunden werden.

NFC/RFID Bricklet with Battery and Motor connected to Master Brick

Wenn der Brick per USB an den PC angeschlossen wird sollte einen Moment später im Brick Viewer ein neuer Tab namens "NFC/RFID Bricklet" auftauchen. Wähle diesen Tab aus.

Wenn alles wie erwartet funktioniert können nun Tags gescannt und Pages gelesen/geschrieben werden.

NFC/RFID Bricklet in Brick Viewer

Nun kann ein eigenes Programm geschrieben werden. Der Abschnitt Programmierschnittstelle listet die API des NFC/RFID Bricklet und Beispiele in verschiedenen Programmiersprachen auf.

Gehäuse

Ein laser-geschnittenes Gehäuse für das NFC/RFID Bricklet war verfügbar, wird aber nicht mehr verkauft.

Gehäuse für NFC/RFID Bricklet

Der Aufbau ist am einfachsten wenn die folgenden Schritte befolgt werden:

  • Stecke lange schrauben durch Unterteil,
  • stecke Bricklet auf Unterteil und schraube es mit Abstandshaltern fest,
  • baue Seitenteile auf,
  • stecke zusammengebaute Seitenteile in Unterteil und
  • schraube Oberteil mit kleinen Schrauben zum Unterteil.

Im folgenden befindet sich eine Explosionszeichnung des NFC/RFID Bricklet-Gehäuse:

Explosionszeichnung für NFC/RFID Bricklet

Hinweis: Auf beiden Seiten der Platten ist eine Schutzfolie, diese muss vor dem Zusammenbau entfernt werden.

Programmierschnittstelle

Siehe Programmierschnittstelle für eine detaillierte Beschreibung.

Sprache API Beispiele Installation
C/C++ API Beispiele Installation
C# API Beispiele Installation
Delphi/Lazarus API Beispiele Installation
Go API Beispiele Installation
Java API Beispiele Installation
JavaScript API Beispiele Installation
LabVIEW API Beispiele Installation
Mathematica API Beispiele Installation
MATLAB/Octave API Beispiele Installation
MQTT API Beispiele Installation
openHAB API Beispiele Installation
Perl API Beispiele Installation
PHP API Beispiele Installation
Python API Beispiele Installation
Ruby API Beispiele Installation
Rust API Beispiele Installation
Shell API Beispiele Installation
Visual Basic .NET API Beispiele Installation
TCP/IP API    
Modbus API