Cum să programați un Card RFID pentru proiectele dvs.
etichetele RFID sunt cipuri mici, reinscriptibile, care pot stoca cantități mici de date, cum ar fi nume, adrese, informații despre produs și multe altele. Ele pot lua forma de brelocuri și cărți, sau pot fi chiar implantate în animale de companie sau oameni. Dacă doriți să aflați cum funcționează sau să le adăugați la propriul proiect, un cititor și scriitor RFID este o componentă ieftină pe care o puteți utiliza. Acest ghid vă va arăta cum să utilizați unul pentru a scrie pe propria etichetă RFID.
cum funcționează scriitorii RFID
senzorii de citire/scriere RFID folosesc unde radio cu rază scurtă de acțiune, de mică putere, pentru a transmite date de la etichete, unde sunt stocate datele, în dispozitivul electronic la care este conectat senzorul. În acest caz, vom folosi un Arduino ca dispozitiv prin adăugarea unui senzor RFID. Mai exact, vom scrie câteva informații de bază pe o etichetă RFID.
pentru a face acest lucru, vom folosi această bibliotecă pentru citirea și scrierea etichetelor RFID. Deoarece utilizarea etichetelor RFID este un pic mai complexă decât, să zicem, pornirea sau oprirea unui LED, ne vom baza pe schițe preexistente pe care le puteți integra în propriile proiecte. Funcțiile pre-scrise pe care le oferă aceste schițe vă vor permite să le integrați mai ușor în celelalte proiecte.
pentru a utiliza biblioteca, descărcați mai întâi .fișier zip din pagina Github de mai sus. Apoi, deschideți IDE-ul Arduino, navigați la Sketch > includeți Biblioteca > adăugați .Biblioteca ZIP… și alegeți Biblioteca pe care tocmai ați descărcat-o. Nu numai că acest lucru va face posibilă includerea bibliotecii RFID în schițele dvs., dar veți primi și o colecție de schițe de exemplu, de care vom avea nevoie mai târziu.
de ce veți avea nevoie
pentru acest proiect, vom scrie doar pe o etichetă RFID. Cu toate acestea, rețineți pe măsură ce parcurgem ghidul cum puteți utiliza acest lucru pentru a vă extinde celelalte proiecte. Poate că puteți declanșa o blocare pentru a debloca atunci când arătați cititorului o etichetă cu datele corecte pe ea, de exemplu. Pentru acest proiect de bază, totuși, iată ce veți avea nevoie:
Arduino | |
senzor RFID (de preferință un mfrc-522) | |
etichete RFID | |
Breadboard & cablare | |
Arduino IDE | |
cablu USB |
deoarece cipurile RFID sunt foarte mici, eticheta pe care o utilizați poate veni în aproape orice formă. Două dintre cele mai frecvente tipuri de cipuri RFID – care vin adesea în kituri sau cu senzori – sunt Brelocuri rotunde mici sau carduri plate de dimensiunea unui card de credit. Acestea fiind spuse, orice etichetă aveți ar trebui să funcționeze.
Codul
dacă ați instalat biblioteca conform instrucțiunilor de mai sus, următoarea schiță ar trebui să fie disponibilă în cartea dvs. de exemple sub Fișier > Exemple > MFRC522 > rfid_write_personal_data. Selectați-l în cartea dvs. de exemplu sau copiați codul de mai jos:
/*
* scrieți datele personale ale unui card RFID MIFARE utilizând un cititor RFID-RC522
* utilizează Mfrc522-bibliotecă pentru a utiliza ARDUINO RFID kit de MODULE 13.56 MHZ cu etichete SPI W și R de COOQROBOT.
* ——————————
* MFRC522 Arduino Arduino Arduino Arduino Arduino
* cititor / PCD Uno / 101 Mega Nano V3 Leonardo / Micro Pro Micro
* semnal Pin Pin Pin Pin Pin
* ——————————
* RST/Reset rst 9 5 D9 RESET/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 necesar:
* Arduino
* PCD( dispozitiv de cuplare de proximitate): cititor fără contact NXP MFRC522 IC
* PICC (card de circuit integrat de proximitate): un card sau o etichetă utilizând interfața ISO 14443A, de exemplu Mifare sau NTAG203.
* cititorul poate fi găsit pe eBay pentru aproximativ 5 dolari. Caută” mf-rc522 ” pe ebay.com.
*/
#include
# include
# define RST_PIN 9 / / configurabil, vezi aspectul tipic al pinului de mai sus
# define SS_PIN 10 / / configurabil, vezi aspectul tipic al pinului de mai sus
MFRC522 mfrc522(SS_PIN, RST_PIN); // Creați instanță MFRC522
configurare void() {
Serial.începeți (9600); / / inițializați comunicațiile seriale cu PC-ul
SPI.începe (); / / Init autobuz SPI
mfrc522.PCD_Init (); / / carte de Mfrc522 Init
Serial.println(F(„Scrie datele personale de pe un MIFARE PICC „));
}
void loop() {
// Pregătiți-cheie – toate cheile sunt setate pentru a FFFFFFFFFFFFh în chip de livrare de la fabrica.
mfrc522::cheie MIFARE_Key;
pentru (octet i = 0; I < 6; I++) cheie.keyByte = 0xFF;
// Resetați bucla dacă nu există un card nou pe senzor/cititor. Acest lucru salvează întregul proces atunci când este inactiv.
dacă ( ! mfrc522.PICC_IsNewCardPresent ()) {
întoarcere;
}
// selectați una dintre cărțile
dacă (! mfrc522.PICC_ReadCardSerial ()) {
întoarcere;
}
Serial.imprimare (F („Card UID:”)); //Dump UID
pentru (octet i = 0; I < mfrc522.uid.Dimensiune; i++) {
Serial.imprimare (mfrc522.uid.uidByte < 0x10 ? „0” : „”);
Serial.imprimare (mfrc522.uid.uidByte, HEX);
}
Serial.imprimare (F („tip PICC:”)); / / Dump tip PICC
MFRC522::PICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak);
Serial.println (mfrc522.PICC_GetTypeName (piccType));
tampon octet;
bloc octet;
MFRC522::starea codului de stare;
octet len;
Serial.setTimeout(20000L);// așteptați până la 20 de secunde pentru introducerea de la serial
/ / întrebați date personale: nume de familie
Serial.println (F („tip nume de familie, care se termină cu#”));
Len = Serial.readBytesUntil ( ‘ # ‘, (char *) buffer, 30) ; // citiți numele de familie din serial
pentru (octet i = len; i < 30; i++) buffer = ‘ ‘; // pad cu spații
block = 1;
//Serial.println (F („autentificarea folosind tasta 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: „));
bloc = 2;
//Serial.println (F („autentificarea folosind tasta A…”));
status = mfrc522.PCD_Authenticate(MFRC522:: PICC_CMD_MF_AUTH_KEY_A, bloc, &cheie, &(mfrc522.uid));
dacă (stare != MFRC522::STATUS_OK) {
Serial.print(F („PCD_Authenticate () failed:”));
Serial.println (mfrc522.GetStatusCodeName (stare));
întoarcere;
}
// scrie bloc
status = mfrc522.MIFARE_Write (bloc, &tampon, 16);
dacă (stare != MFRC522::STATUS_OK) {
Serial.print(F(„MIFARE_Write() failed: „));
Serial.println (mfrc522.GetStatusCodeName (stare));
întoarcere;
}
else Serial.println (F („MIFARE_Write () succes: „));
// cere date personale: prenume
Serial.println (F („tastați prenumele, terminând cu#”));
Len = Serial.readBytesUntil ( ‘ # ‘, (char *) buffer, 20) ; // citiți prenumele din serial
pentru (octet i = len; i < 20; i++) buffer = ‘ ‘; // pad cu spații
block = 4;
//Serial.println (F („autentificarea folosind tasta A…”));
status = mfrc522.PCD_Authenticate(MFRC522:: PICC_CMD_MF_AUTH_KEY_A, bloc, &cheie, &(mfrc522.uid));
dacă (stare != MFRC522::STATUS_OK) {
Serial.print(F („PCD_Authenticate () failed:”));
Serial.println (mfrc522.GetStatusCodeName (stare));
întoarcere;
}
// scrie bloc
status = mfrc522.MIFARE_Write (bloc, tampon, 16);
dacă (stare != MFRC522::STATUS_OK) {
Serial.print(F(„MIFARE_Write() failed: „));
Serial.println (mfrc522.GetStatusCodeName (stare));
întoarcere;
}
else Serial.println (F („MIFARE_Write () succes: „));
bloc = 5;
//Serial.println (F („autentificarea folosind tasta A…”));
status = mfrc522.PCD_Authenticate(MFRC522:: PICC_CMD_MF_AUTH_KEY_A, bloc, &cheie, &(mfrc522.uid));
dacă (stare != MFRC522::STATUS_OK) {
Serial.print(F („PCD_Authenticate () failed:”));
Serial.println (mfrc522.GetStatusCodeName (stare));
întoarcere;
}
// scrie bloc
status = mfrc522.MIFARE_Write (bloc, &tampon, 16);
dacă (stare != MFRC522::STATUS_OK) {
Serial.print(F(„MIFARE_Write() failed: „));
Serial.println (mfrc522.GetStatusCodeName (stare));
întoarcere;
}
else Serial.println (F („MIFARE_Write () succes: „));
Serial.println ( „” );
mfrc522.PICC_HaltA (); / / Stop PICC
mfrc522.PCD_StopCrypto1 (); / / opriți criptarea pe PCD
}
încărcați acest cod și (după cablarea proiectului așa cum este descris mai jos) puteți începe imediat să scrieți date pe etichetele RFID.
unul dintre avantajele utilizării bibliotecilor de acest gen este că puteți găsi porțiuni de cod deja scrise, deci nu trebuie să reinventați roata pentru fiecare proiect. De data asta, nu vom trece prin cod linie cu linie. În schimb, să vorbim un pic mai mult despre ceea ce face codul.
datele din etichetele RFID sunt stocate în secțiuni numite sectoare, care sunt împărțite în continuare în blocuri. Fiecare bloc poate conține câțiva octeți de date. Suma depinde de eticheta specifică, dar o etichetă pasivă comună de 1k (adică o etichetă care poate stoca 1 kilobyte de date) ar putea avea, de exemplu, 16 sectoare, fiecare conținând 4 blocuri, fiecare bloc putând stoca până la 16 octeți de date.
această schiță va stoca doar numele și prenumele dvs., deci are nevoie doar de un sector, dar va răspândi datele pe mai multe blocuri, deoarece numele dvs. ar putea prelua mai multe date decât se pot încadra într-un singur bloc (și pentru confortul organizațional).
când rulați scriptul, vi se va cere să furnizați numele de familie, care va fi apoi scris pe blocuri de pe eticheta RFID. Apoi, veți primi un prompt pentru a vă scrie prenumele, care va fi scris în diferite blocuri. Pentru mai multe informații despre modul în care sunt organizate blocurile RFID și cum să le abordați, consultați acest ghid.
cablajul
cablajul pentru cititorul dvs. specific RFID va depinde de modelul pe care îl obțineți, deoarece multe iterații diferite au pinii într-o ordine diferită. Din fericire, exemplul de cod pe care l-am inclus mai sus listează ce Pinuri ar trebui să meargă acolo unde, în funcție de panoul pe care îl utilizați. Urmați acest ghid pentru detalii.
de exemplu, dacă utilizați un Arduino Uno și un senzor Mfrc-522, atunci ați face următoarele:
● Conectați mai ÎNTÂI pentru a pin 9
● Conectați SDA (sau SS) la pin 10
● Conectați MOSI la pin 11
● Conectați MISO la pin 12
● Conectați SCK la pin 13
● Conectați VCC la 5V
● Conectați GND la GND
Dar, din nou, a verifica ce placi utilizați pentru a asigurați-vă că sunteți conectat corect. Odată ce placa dvs. este conectată, porniți Arduino-ul în timp ce este conectat prin USB la computer. Apoi, puteți apăsa pe cititor un card RFID sau un breloc. Țineți-l acolo în timp ce introduceți date prin monitorul serial.
biblioteca MFRC522 include, de asemenea, o schiță încorporată pentru citirea datelor RFID după ce ați scris-o. Acum, că știți cum să scrieți date, încercați să încărcați schița respectivă și să o utilizați pentru a citi eticheta pe care ați scris-o.