So programmieren Sie eine RFID-Karte für Ihre Projekte
RFID-Tags sind kleine, wiederbeschreibbare Chips, die kleine Datenmengen wie Namen, Adressen, Produktinformationen und mehr speichern können. Sie können die Form von Schlüsselanhängern und Karten annehmen oder sogar in Haustiere oder Menschen implantiert werden. Wenn Sie lernen möchten, wie sie funktionieren, oder sie zu Ihrem eigenen Projekt hinzufügen möchten, ist ein RFID-Lesegerät und -Schreiber eine kostengünstige Komponente, die Sie verwenden können. In dieser Anleitung erfahren Sie, wie Sie mit einem RFID-Tag auf Ihr eigenes RFID-Tag schreiben.
Funktionsweise von RFID-Schreibgeräten
RFID-Lese- / Schreibsensoren verwenden Funkwellen mit geringer Reichweite und geringem Stromverbrauch, um Daten von Tags, in denen die Daten gespeichert sind, in das elektronische Gerät zu übertragen, an das der Sensor angeschlossen ist. In diesem Fall verwenden wir ein Arduino als Gerät, indem wir einen RFID-Sensor hinzufügen. Insbesondere schreiben wir einige grundlegende Informationen in ein RFID-Tag.
Dazu nutzen wir diese Bibliothek zum Lesen und Schreiben von RFID-Tags. Da die Verwendung von RFID-Tags etwas komplexer ist als beispielsweise das Ein- und Ausschalten einer LED, verlassen wir uns auf bereits vorhandene Skizzen, die Sie in Ihre eigenen Projekte integrieren können. Mit den vorab geschriebenen Funktionen, die diese Skizzen bieten, können Sie sie einfacher in Ihre anderen Projekte integrieren.
Um die Bibliothek zu verwenden, laden Sie zuerst die .zip-Datei von der Github-Seite oben. Öffnen Sie als nächstes Ihre Arduino IDE und navigieren Sie zu Sketch > Include Library > Add .ZIP-Bibliothek … und wählen Sie die Bibliothek, die Sie gerade heruntergeladen haben. Dadurch ist es nicht nur möglich, die RFID-Bibliothek in Ihre Skizzen aufzunehmen, sondern Sie erhalten auch eine Sammlung von Beispielskizzen, die wir später benötigen.
Was Sie brauchen
Für dieses Projekt werden wir nur auf ein RFID-Tag schreiben. Beachten Sie jedoch, wie wir durch die Anleitung gehen, wie Sie dies verwenden können, um Ihre anderen Projekte zu erweitern. Vielleicht können Sie eine Sperre zum Entsperren auslösen, wenn Sie dem Leser beispielsweise ein Tag mit den richtigen Daten anzeigen. Für dieses grundlegende Projekt benötigen Sie jedoch Folgendes:
Arduino | |
RFID-Sensor (vorzugsweise ein MFRC-522) | |
RFID-Tags | |
Breadboard & verdrahtung | |
Arduino IDE | |
USB-Kabel |
Da RFID-Chips sehr klein sind, kann das Tag, das Sie verwenden, in fast jeder Form vorliegen. Zwei der häufigsten Arten von RFID-Chips – oft in Kits oder mit Sensoren – sind kleine runde Schlüsselanhänger oder flache Karten von der Größe einer Kreditkarte. Trotzdem sollte jedes Tag, das Sie haben, funktionieren.
Der Code
Wenn Sie die Bibliothek wie oben beschrieben installiert haben, sollte die folgende Skizze in Ihrem Beispielbuch unter Datei > Examples > MFRC522 > rfid_write_personal_data verfügbar sein. Wählen Sie es in Ihrem Beispielbuch aus oder kopieren Sie den folgenden Code:
/*
* Schreiben persönliche daten von eine MIFARE RFID karte mit einem RFID-RC522 reader
* Verwendet MFRC522-Bibliothek zu verwenden ARDUINO RFID MODUL KIT 13,56 MHZ MIT TAGS SPI W UND R DURCH COOQROBOT.
* ——————————
* MFRC522 Arduino Arduino Arduino Arduino Arduino Arduino
* Leser / PCD Uno / 101 Mega Nano v3 Leonardo / Micro Pro Micro
* Signal Pin Pin Pin Pin Pin Pin
* ——————————
* RST/ Reset RST 9 5 D9 ZURÜCKSETZEN / ICSP-5 RST
* SPI SS SDA (SS) 10 53 D10 10 10
* SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16
* SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14
* SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15
*
* Hardware erforderlich:
* Arduino
* PCD (Proximity Kupplung Gerät): NXP MFRC522 Kontaktlose Reader IC
* PICC (Proximity Integrated Circuit Card): EINE karte oder tag mit die ISO 14443A interface, zB Mifare oder NTAG203.
* Der Reader ist bei eBay für rund 5 Dollar zu finden. Suche nach „mf-rc522“ auf ebay.com.
*/
# include
#include
#define RST_PIN 9 // Konfigurierbar, siehe typisches Pin-Layout oben
#define SS_PIN 10 // Konfigurierbar, siehe typisches Pin-Layout oben
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance
void setup() {
}.begin(9600); // Initialisiert die serielle Kommunikation mit dem PC
SPI.beginnen (); // Init SPI bus
mfrc522.PCD_Init(); // Init MFRC522 Karte
Seriell.println(F(„Persönliche Daten auf einen MIFARE PICC schreiben „));
}
leere Schleife() {
// Schlüssel vorbereiten – Alle Schlüssel werden bei Chiplieferung ab Werk auf FFFFFFFFFFFFh gesetzt.
MFRC522:: MIFARE_Key Schlüssel;
für (Byte i = 0; i < 6; i++) Schlüssel.keyByte = 0xFF;
// Setzen Sie die Schleife zurück, wenn keine neue Karte auf dem Sensor / Leser vorhanden ist. Dies spart den gesamten Prozess im Leerlauf.
wenn ( ! mfrc522.PICC_IsNewCardPresent()) {
Rückkehr;
}
// Wählen Sie eine der Karten
wenn ( ! mfrc522.PICC_ReadCardSerial()) {
Rückkehr;
}
Seriell.print(F(„Karten-UID:“)); //Dump-UID
für (Byte i = 0; i < mfrc522.uid.größe; i++) {
Serial.drucken(mfrc522.uid.uidByte < 0x10 ? “ 0″ : “ „);
Seriell.drucken(mfrc522.uid.uidByte, HEX);
}
Seriell.print(F(“ PICC Typ: „)); // Dump PICC Typ
MFRC522::PICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak);
Seriell.println(mfrc522.PICC_GetTypeName(piccType));
Bytepuffer;
Byteblock;
MFRC522::StatusCode Status;
Byte len;
Seriell.setTimeout (20000L); // warten bis 20 sekunden für eingang von serielle
// Fragen persönliche daten: Familie name
Serielle.println(F(„Typ Familienname, endet mit #“));
len = Serial.readBytesUntil(‚#‘, (char *) buffer, 30) ; // Familienname aus serial
lesen für (Byte i = len; i < 30; i++) buffer = ‚ ‚; // Pad mit Leerzeichen
block = 1;
//Seriell.println(F(„Authentifizierung mit Schlüssel A …“));
status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(mfrc522.uid));
if (status != MFRC522::STATUS_OK) {
Serial.print(F(„PCD_Authenticate() failed: „));
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
else Serial.println(F(„PCD_Authenticate() success: „));
// Write block
status = mfrc522.MIFARE_Write(block, buffer, 16);
if (status != MFRC522::STATUS_OK) {
Serial.print(F(„MIFARE_Write() failed: „));
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
else Serial.println(F(„MIFARE_Write() Erfolg: „));
block = 2;
//Seriell.println(F(„Authentifizierung mit Schlüssel A …“));
status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, Block, &Schlüssel, &(mfrc522.uid));
wenn (status != MFRC522::STATUS_OK) {
Seriell.print(F(„PCD_Authenticate() fehlgeschlagen: „));
Seriell.println(mfrc522.GetStatusCodeName(status));
Rückkehr;
}
// Schreibblock
status = mfrc522.MIFARE_Write(Block, & Puffer, 16);
wenn (status!= MFRC522::STATUS_OK) {
Seriell.print(F(„MIFARE_Write() fehlgeschlagen: „));
Seriell.println(mfrc522.GetStatusCodeName(status));
return;
}
sonst Seriell.println(F(„MIFARE_Write() Erfolg: „));
// Fragen Sie persönliche Daten: Vorname
Seriennummer.println(F(„Geben Sie den Vornamen ein, der mit # endet“));
len = Serial.readBytesUntil(‚#‘, (char *) buffer, 20) ; // liest den Vornamen aus der Seriennummer
für (Byte i = len; i < 20; i++) buffer = ‚ ‚; // Pad mit Leerzeichen
block = 4;
//Seriell.println(F(„Authentifizierung mit Schlüssel A …“));
status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, Block, &Schlüssel, &(mfrc522.uid));
wenn (Status != MFRC522::STATUS_OK) {
Seriell.print(F(„PCD_Authenticate() fehlgeschlagen: „));
Seriell.println(mfrc522.GetStatusCodeName(status));
Rückkehr;
}
// Schreibblock
status = mfrc522.MIFARE_Write(Block, Puffer, 16);
wenn (status != MFRC522::STATUS_OK) {
Seriell.print(F(„MIFARE_Write() fehlgeschlagen: „));
Seriell.println(mfrc522.GetStatusCodeName(status));
return;
}
sonst Seriell.println(F(„MIFARE_Write() Erfolg: „));
block = 5;
//Seriell.println(F(„Authentifizierung mit Schlüssel A …“));
status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, Block, &Schlüssel, &(mfrc522.uid));
wenn (status != MFRC522::STATUS_OK) {
Seriell.print(F(„PCD_Authenticate() fehlgeschlagen: „));
Seriell.println(mfrc522.GetStatusCodeName(status));
Rückkehr;
}
// Schreibblock
status = mfrc522.MIFARE_Write(Block, & Puffer, 16);
wenn (status!= MFRC522::STATUS_OK) {
Seriell.print(F(„MIFARE_Write() fehlgeschlagen: „));
Seriell.println(mfrc522.GetStatusCodeName(status));
return;
}
sonst Seriell.println(F(„MIFARE_Write() Erfolg: „));
Seriell.println(“ „);
mfrc522.PICC_HaltA(); // Halt PICC
mfrc522.PCD_StopCrypto1(); // Verschlüsselung auf PCD stoppen
}
Laden Sie diesen Code hoch und (nachdem Sie Ihr Projekt wie unten beschrieben verkabelt haben) können Sie sofort mit dem Schreiben von Daten in Ihre RFID-Tags beginnen.
Einer der Vorteile der Verwendung solcher Bibliotheken besteht darin, dass Sie bereits geschriebene Codeteile finden können, sodass Sie das Rad nicht für jedes Projekt neu erfinden müssen. Dieses Mal werden wir den Code nicht Zeile für Zeile durchgehen. Lassen Sie uns stattdessen etwas mehr darüber sprechen, was der Code tut.
Daten in RFID-Tags werden in Abschnitten gespeichert, die als Sektoren bezeichnet werden und weiter in Blöcke unterteilt sind. Jeder Block kann einige Bytes Daten enthalten. Die Menge hängt von dem spezifischen Tag ab, aber ein übliches passives 1K-Tag (dh ein Tag, das 1 Kilobyte Daten speichern kann) könnte beispielsweise 16 Sektoren haben, die jeweils 4 Blöcke enthalten, wobei jeder Block bis zu 16 Bytes speichern kann von Daten.
Diese Skizze speichert nur Ihren Vor- und Nachnamen, benötigt also nur einen Sektor, verteilt die Daten jedoch auf mehrere Blöcke, da Ihre Namen möglicherweise mehr Daten aufnehmen, als in einen einzelnen Block passen (und aus organisatorischen Gründen) Bequemlichkeit).
Wenn Sie das Skript ausführen, werden Sie aufgefordert, Ihren Familiennamen anzugeben, der dann in Blöcke auf Ihrem RFID-Tag geschrieben wird. Als nächstes erhalten Sie eine Aufforderung, Ihren Vornamen zu schreiben, der in verschiedene Blöcke geschrieben wird. Weitere Informationen darüber, wie RFID-Blöcke organisiert sind und wie sie adressiert werden, finden Sie in diesem Handbuch.
Die Verdrahtung
Die Verdrahtung für Ihren spezifischen RFID-Leser hängt von dem Modell ab, das Sie erhalten, da viele verschiedene Iterationen die Pins in einer anderen Reihenfolge haben. Glücklicherweise listet der oben enthaltene Beispielcode auf, welche Pins je nach verwendeter Platine wohin gehen sollen. Befolgen Sie diese Anleitung für Einzelheiten.
Wenn Sie beispielsweise einen Arduino Uno und einen MFRC-522-Sensor verwenden, gehen Sie wie folgt vor:
● Verbinden RST zu pin 9
● Verbinden SDA (oder SS) zu pin 10
● Verbinden MOSI zu pin 11
● Verbinden MISO zu pin 12
● Verbinden SCK zu pin 13
● Verbinden VCC zu 5 V
● Verbinden GND zu GND
Aber, wieder, überprüfen, welche boards verwenden, um sicherzustellen, dass Sie richtig verdrahtet sind. Sobald Ihr Board angeschlossen ist, schalten Sie Ihren Arduino ein, während er über USB mit Ihrem Computer verbunden ist. Dann können Sie eine RFID-Karte oder einen Schlüsselbund an das Lesegerät drücken. Halten Sie es dort, während Sie Daten über den seriellen Monitor eingeben.
Die MFRC522-Bibliothek enthält auch eine integrierte Skizze zum Lesen von RFID-Daten, nachdem Sie sie geschrieben haben. Nachdem Sie nun wissen, wie Sie Daten schreiben, laden Sie diese Skizze hoch und lesen Sie damit das Tag, in das Sie geschrieben haben.