Hoe een RFID-kaart te programmeren voor uw projecten
RFID-tags zijn kleine, herschrijfbare chips die kleine hoeveelheden gegevens zoals namen, adressen, productinformatie en meer kunnen opslaan. Ze kunnen de vorm aannemen van sleutelhangers en kaarten, of ze kunnen zelfs worden geïmplanteerd in huisdieren of mensen. Als je wilt leren hoe ze werken of ze wilt toevoegen aan je eigen project, is een RFID-lezer en-schrijver een goedkoop onderdeel dat je kunt gebruiken. Deze handleiding laat je zien hoe je er een kunt gebruiken om naar je eigen RFID-tag te schrijven.
hoe RFID-schrijvers werken
RFID-lezer / schrijversensoren gebruiken radiogolven met een kort bereik en laag vermogen om gegevens van tags, waar de gegevens zijn opgeslagen, naar het elektronische apparaat te verzenden waarmee de sensor is verbonden. In dit geval gebruiken we een Arduino als apparaat door een RFID-sensor toe te voegen. We schrijven wat basisinformatie naar een RFID-tag.
om dit te doen, zullen we gebruik maken van deze bibliotheek voor het lezen en schrijven naar RFID-tags. Omdat het gebruik van RFID-tags iets complexer is dan bijvoorbeeld het in-of uitschakelen van een LED, vertrouwen we op reeds bestaande schetsen die u kunt integreren in uw eigen projecten. De vooraf geschreven functies die deze schetsen bieden kunt u gemakkelijker integreren in uw andere projecten.
om de bibliotheek te gebruiken, download eerst de .zip bestand van de Github pagina hierboven. Open vervolgens je Arduino IDE, navigeer naar Sketch > Include Library > Add .ZIP Library … en kies de bibliotheek die je zojuist hebt gedownload. Dit maakt het niet alleen mogelijk om de RFID-bibliotheek in uw schetsen op te nemen, maar u krijgt ook een verzameling voorbeeldschetsen, die we later nodig zullen hebben.
wat u nodig hebt
voor dit project schrijven we alleen naar een RFID-tag. Echter, in gedachten houden als we gaan door de gids hoe u dit kunt gebruiken om uw andere projecten uit te breiden. Misschien kunt u een slot activeren om te ontgrendelen wanneer u de lezer bijvoorbeeld een tag toont met de juiste gegevens erop. Voor dit basisproject, hoewel, hier is wat je nodig hebt:
Arduino | |
RFID-sensor (bij voorkeur een MFRC-522) | |
RFID-tags | |
Breadboard & bedrading | |
Arduino IDE | |
USB-Kabel |
Aangezien RFID-chips zijn erg klein, de tag die u gebruiken kunt komen in bijna elke vorm. Twee van de meest voorkomende soorten RFID – chips – vaak in kits of met sensoren-zijn kleine ronde sleutelhangers of platte kaarten ongeveer de grootte van een creditcard. Dat gezegd hebbende, wat tag je hebt zou moeten werken.
de Code
als u de bibliotheek hebt geïnstalleerd zoals hierboven beschreven, moet de volgende schets beschikbaar zijn in uw voorbeeldboek onder bestand > voorbeelden > MFRC522 > rfid_write_personal_data. Selecteer het in uw voorbeeldboek, of kopieer onderstaande code:
/*
* schrijf persoonlijke gegevens van een Mifare rfid-kaart met behulp van een RFID-RC522 – lezer
* gebruikt MFRC522-Library om ARDUINO RFID MODULE KIT 13.56 MHZ met TAGS SPI W en R door COOQROBOT te gebruiken.
* ——————————
* MFRC522 Arduino Arduino Arduino Arduino Arduino
* Reader/PCD Uno/101 Mega Nano v3 Leonardo/Micro Pro Micro
* – Signaal Pin Pin Pin Pin Pin Pin
* ——————————
* EERSTE/Reset EERSTE 9 5 D9 RESET/ICSP-5 EERSTE
* 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 vereist:
* Arduino
* PCD (Proximity Coupling Device): NXP MFRC522 contactloze lezer IC
* PICC (Proximity Integrated Circuit Card): een kaart of tag die gebruik maakt van de ISO 14443A interface, bijvoorbeeld Mifare of NTAG203.
* de lezer is te vinden op eBay voor ongeveer 5 dollar. Zoeken naar “mf-rc522” op ebay.com.
*/
#include
# include
# define RST_PIN 9 / / configureerbaar, zie typische pin lay-out boven
# define SS_PIN 10 / / configureerbaar, zie typische pin lay-out boven
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance
void setup () {
Serial.begin (9600); / / Initialiseer seriële communicatie met de PC
SPI.begin (); / / init SPI bus
mfrc522.PCD_Init (); / / init MFRC522 kaart
serieel.println (F (“schrijf persoonlijke gegevens op een Mifare PICC “));
}
void-lus() {
// bereid sleutel voor-alle sleutels worden ingesteld op Ffffffffffh bij spaanderlevering van de fabriek.
MFRC522:: mifare_key sleutel;
voor (byte i = 0; i < 6; i++) sleutel.keyByte = 0xFF;
/ / Reset de lus als er geen nieuwe kaart aanwezig is op de sensor/lezer. Dit bespaart het hele proces wanneer inactief.
if (! mfrc522.PICC_IsNewCardPresent ()) {
return;
}
// selecteer een van de kaarten
als (! mfrc522.PICC_ReadCardSerial ()) {
return;
}
serieel.print(F(“Card UID:”)); //Dump UID
voor (byte i = 0; i < mfrc522.uid.grootte; i++) {
serieel.afdrukken (mfrc522.uid.uidByte < 0x10 ? “0” : “”);
serieel.afdrukken (mfrc522.uid.uidByte, HEX);
}
serieel.print (F (“PICC type: “)); // Dump PICC type
MFRC522::PICC_Type piccType = mfrc522.PICC_GetType (mfrc522.uid.sak);
serieel.println (mfrc522.PICC_GetTypeName (piccType));
byte buffer;
byte block;
MFRC522::StatusCode status;
byte len;
Serial.setTimeout (20000L) ; // wacht tot 20 seconden voor invoer van serieel
// Vraag persoonlijke gegevens: familienaam
serieel.println (F(” Type familienaam, eindigend op#”));
len = Serial.readBytesUntil (‘# ‘ , (char *) buffer, 30); / / read family name from serial
for (byte i = len; i < 30; i++) buffer=”; / / pad met spaties
block = 1;
//Serial.println (F (“authenticatie met sleutel 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 () succes: “));
blok = 2;
//serieel.println (F (“authenticatie met sleutel A…”));
status = mfrc522.PCD_Authenticate (MFRC522:: PICC_CMD_MF_AUTH_KEY_A, block, & key, &(mfrc522.uid));
if (status != MFRC522:: STATUS_OK) {
serieel.print(F(“pcd_authenticate() failed: “));
serieel.println (mfrc522.GetStatusCodeName (status));
return;
}
// schrijf blok
status = mfrc522.MIFARE_Write (block, &buffer, 16);
if (status != MFRC522:: STATUS_OK) {
serieel.print(F(“MIFARE_Write() failed: “));
serieel.println (mfrc522.GetStatusCodeName(status));
return;
}
else Serial.println (F (“mifare_write () succes: “));
// Ask personal data: voornaam
Serial.println (F (“Type voornaam, eindigend op#”));
len = Serial.readBytesUntil (‘# ‘ , (char *) buffer, 20); / / lees voornaam uit serial
for (byte i = len; i < 20; i++) buffer=”; / / pad met spaties
block = 4;
//Serial.println (F (“authenticatie met sleutel A…”));
status = mfrc522.PCD_Authenticate (MFRC522:: PICC_CMD_MF_AUTH_KEY_A, block, & key, &(mfrc522.uid));
if (status != MFRC522:: STATUS_OK) {
serieel.print(F(“pcd_authenticate() failed: “));
serieel.println (mfrc522.GetStatusCodeName (status));
return;
}
// schrijf blok
status = mfrc522.MIFARE_Write (block, buffer, 16);
if (status != MFRC522:: STATUS_OK) {
serieel.print(F(“MIFARE_Write() failed: “));
serieel.println (mfrc522.GetStatusCodeName(status));
return;
}
else Serial.println (F (“mifare_write () succes: “));
blok = 5;
//serieel.println (F (“authenticatie met sleutel A…”));
status = mfrc522.PCD_Authenticate (MFRC522:: PICC_CMD_MF_AUTH_KEY_A, block, & key, &(mfrc522.uid));
if (status != MFRC522:: STATUS_OK) {
serieel.print(F(“pcd_authenticate() failed: “));
serieel.println (mfrc522.GetStatusCodeName (status));
return;
}
// schrijf blok
status = mfrc522.MIFARE_Write (block, &buffer, 16);
if (status != MFRC522:: STATUS_OK) {
serieel.print(F(“MIFARE_Write() failed: “));
serieel.println (mfrc522.GetStatusCodeName(status));
return;
}
else Serial.println (F (“mifare_write () succes: “));
serieel.println ( “” );
mfrc522.PICC_HaltA (); / / Halt PICC
mfrc522.PCD_StopCrypto1 (); / / Stop encryptie op PCD
}
Upload deze code, en (na het opzetten van uw project zoals hieronder beschreven) kunt u direct beginnen met het schrijven van gegevens naar uw RFID-tags.
een van de voordelen van het gebruik van bibliotheken zoals deze is dat je delen van code kunt vinden die al geschreven zijn, zodat je het wiel niet opnieuw hoeft uit te vinden voor elk project. Deze keer gaan we niet Regel voor regel door de code. In plaats daarvan, laten we praten een beetje meer over wat de code doet.
gegevens in RFID-tags worden opgeslagen in secties genaamd sectoren, die verder worden verdeeld in blokken. Elk blok kan een paar bytes aan data bevatten. De hoeveelheid hangt af van de specifieke tag, maar een gemeenschappelijke 1K passieve tag (dat wil zeggen een tag die 1 kilobyte aan gegevens kan opslaan) kan bijvoorbeeld 16 sectoren hebben, elk met 4 blokken, waarbij elk blok tot 16 bytes aan gegevens kan opslaan.
deze schets slaat alleen uw voor-en achternaam op, dus het heeft maar één sector nodig, maar het zal de gegevens over meerdere blokken verspreiden, omdat uw Namen meer gegevens kunnen opnemen dan in een enkel blok passen (en voor organisatorisch gemak).
wanneer u het script uitvoert, wordt u gevraagd uw familienaam op te geven, die vervolgens naar blokken op uw RFID-tag wordt geschreven. Vervolgens krijg je een prompt om je voornaam te schrijven, die naar verschillende blokken zal worden geschreven. Voor meer informatie over hoe RFID blokken zijn georganiseerd en hoe ze aan te pakken, bekijk deze handleiding.
de bedrading
de bedrading voor uw specifieke rfid-lezer is afhankelijk van het model dat u krijgt, omdat veel verschillende iteraties de pinnen in een andere volgorde hebben. Gelukkig, de voorbeeldcode die we hierboven hebben opgenomen, geeft aan welke pins waar moeten gaan, afhankelijk van het bord dat je gebruikt. Volg die gids voor details.
als voorbeeld, als je een Arduino Uno en een mfrc-522 sensor gebruikt, dan zou je het volgende doen:
● Connect RST to pin 9
● Connect SDA (of SS) to pin 10
● Connect MOSI to pin 11
● Connect MISO to pin 12
● Connect SCK to pin 13
● Connect VCC to 5V
● Connect GND to GND
maar, nogmaals, controleer welke borden u gebruikt om ervoor te zorgen dat u correct bedraad bent. Zodra je board is aangesloten, zet je je Arduino aan terwijl het via USB is aangesloten op je computer. Vervolgens kunt u een RFID-kaart of sleutelhanger op de lezer drukken. Houd het daar tijdens het invoeren van gegevens via de seriële monitor.
de MFRC522-bibliotheek bevat ook een ingebouwde schets voor het lezen van RFID-gegevens nadat u deze hebt geschreven. Nu je weet hoe je gegevens moet schrijven, probeer dan die schets te uploaden en deze te gebruiken om de tag te lezen waarnaar je hebt geschreven.