Technik | 26. März 2020
Lesen und Schreiben von NFC NTAG213 Transpondern in Visual Studio mit C#
Der NFC-Reader ACR122U von ACS ist günstig (schon ab 40 EUR z.B. bei Amazon) und recht einfach mit C# zu implementieren. Der Reader und NFC generell, bzw. auch RFID im Allgemeinen, kann z.B. für folgende Einsatzzwecke verwendet werden:
- Zutrittskontrolle
- Zeiterfassung
- KANBAN Nachbestellungssysteme mit NFC
- Payment
- Steuerung von Prozessen in der Industrie 4.0
- Inventurprozesse
- Usw.
NFC kann sowohl stationär, als auch mobil über sogenannte MDE-Geräte gelesen und beschrieben werden.
Dank der PCSC Schnittstelle in Microsoft Windows 10 wird der Reader beim Anschließen per USB automatisch als Smartcard Reader erkannt.
Der NFC-Reader erkennt jetzt schon NFC-Transponder, kann diese aber nicht anzeigen oder irgendwie in Windows weiterverarbeiten. Um die NFC-Transponderdaten auszulesen gibt es eine C#-Library, die mit nuget in Visual Studio runtergeladen werden kann:
NFC-ACR122U
https://www.nuget.org/packages/NFC-ACR122U/
Die Verwendung der Klasse Sydesoft.NfcDevice.ACR122U ist sehr einfach. Die Initialisierung des Readers erfolgt mit wenigen Zeilen Code:
acr122u.Init(false, 50, 4, 4, 200);
acr122u.CardInserted += Acr122u_CardInserted;
acr122u.CardRemoved += Acr122u_CardRemoved;
Der Parameter mit dem Wert 50 steht für die maximal zu beschreibende oder zu lesende Datenmenge. Die beiden Parameter mit dem Wert 4 beschreiben die Blocklänge und den Startblock, beides ist wichtig für NTAG213-Transponder.
Zum Auslesen und Beschreiben müssen die beiden EventHandler implementiert werden:
private static void Acr122u_CardInserted(PCSC.ICardReader reader)
{
Console.WriteLine(„NFC Transponder wurde aufgelegt.“);
Console.WriteLine(„Unique ID: “ +
BitConverter.ToString(acr122u.GetUID(reader)).Replace(„-„, „“));string data = „Hello World“;
Console.WriteLine(„Daten auf NFC Transponder schreiben: “ + data);
bool ret = acr122u.WriteData(reader, Encoding.UTF8.GetBytes(data));
Console.WriteLine(„Schreibvorgang: “ +
(ret ? „erfolgreich“ : „fehlgeschlagen“));Console.WriteLine(„Daten von NFC Transponder auslesen: “ +
Encoding.UTF8.GetString(acr122u.ReadData(reader)));}
private static void Acr122u_CardRemoved()
{
Console.WriteLine(„NFC Transponder wurde entfernt.“);
}
Die Ausgabe sieht für die beiden EventHandler folgendermaßen aus:
Hier die wichtigsten Funktionen und EventHandler im Überblick:
- Init
- CardInserted
- CardRemoved
- GetUID
- ReadData
- WriteData
NTAG213
Der NTAG213 NFC-Transponder besitzt einen Speicher von 180 bytes, diese sind aufgeteilt in 45 Speicherseiten zu je 4 bytes. Die ACR122UU C#-Klasse kann auch andere Transpondertypen schreiben und lesen. Dazu kann entsprechend die Blockgröße beim Initialisieren angepasst werden.
PC/SC
Die C#-Klasse verwendet PC/SC. Dafür gibt es ebenfalls eine C# Implementierung die mit nuget runtergeladen werden kann: https://www.nuget.org/packages/PCSC/