Cum să folosești MFRC522 cu Arduino

  • 2 minute de citit
  • 3 imagini

Disponibil și în English

Pe această pagină

Am vrut să explorez magia RFID-ului, așa că am cumpărat un cititor simplu de carduri de la Banggood, care permite citirea și scrierea cardurilor de 13.56MHz. Cititorul vine cu un tag de identificare și un card și poate fi folosit pentru proiecte precum un sistem de securitate pentru uși sau un sistem de plată.

Cardul și tag-ul de identificare care vin cu placa folosesc tehnologia clasică Mifare.

Conectarea

Voi folosi Arduino Nano pentru acest exemplu, dar poți folosi Arduino UNO și, poate, și alte Arduino-uri. Nu poți folosi orice pin pentru placa modulului, trebuie să verifici harta pinilor Arduino-ului tău și să îi mapezi corespunzător, de exemplu, pe pinul D13 poți folosi doar SCK.

1.jpeg

Modulul folosește 3.3V; dacă îl conectezi la 5V, s-ar putea să-l strici.

Am folosit următorii pini în codul meu:

  • Pinul 9 al Arduino-ului -> RST al plăcii modulului
  • Pinul 10 al Arduino-ului -> SDA al plăcii modulului
  • Pinul 11 al Arduino-ului -> MOSI al plăcii modulului
  • Pinul 12 al Arduino-ului -> MISO al plăcii modulului
  • Pinul 13 al Arduino-ului -> SCK al plăcii modulului

Biblioteca funcționează cu Arduino MKR1000 (❤ Ceea ce înseamnă RFID și IoT ❤). Funcționează bine. Dar am primit câteva erori de compilare.

2.jpeg

error: invalid conversion from ‘int’ to ‘MFRC522::StatusCode’ [-fpermissive]

Ca să rezolvi asta, trebuie să adaugi un cast la parametru, care convertește din int în status code:

Serial.println(mfrc522.GetStatusCodeName((MFRC522::StatusCode)status));

Înainte să începem să programăm

Mai întâi trebuie să instalezi o bibliotecă pentru a comunica cu modulul. Biblioteca pe care am folosit-o poate fi găsită aici. Dacă nu știi ce este o bibliotecă, te rog folosește acest link ca să afli mai multe.

Iar dacă ești un utilizator avansat, cred că este util să citești fișierul README și fișierul de header MFRC522.h.

Și acum, să vorbim puțin despre cum sunt stocate datele. Cardurile care vin cu placa modulului pot stoca până la 1024 de octeți de informații. Informațiile sunt organizate în 16 sectoare, fiecare sector având 4 blocuri de date care pot conține până la 16 octeți, timp de aproximativ 10 ani.

Fiecare sector conține trei blocuri de date și blocul de trailer al sectorului. Primul sector conține blocul producătorului, care conține informații despre producător și doar două blocuri de date. Blocul producătorului este doar pentru citire.

3.png

Sector Trailer

Sector trailer-ul este foarte important! Are următorul format:

6 octeți pentru Key A

4 octeți de acces

6 octeți pentru Key B

Cheile A și B sunt folosite împreună cu octeții de acces pentru a seta permisiunile de scriere/citire ale trailer-ului. Dacă nu ești atent când scrii în sector trailer, s-ar putea să faci întregul sector inutilizabil! Eu deja am stricat 3 sectoare.

Valorile implicite pentru cheile A și B sunt: FF FF FF FF FF FF

În cazul implicit, cheia B nu este folosită.

Octeții de acces sunt folosiți pentru a seta permisiunile de citire/scriere pentru blocul sector trailer și cele 3 blocuri de date. De exemplu, poți seta Key A doar pentru citire și Key B pentru citire/scriere. Ca să fie lucrurile simple, poți folosi acest site pentru a configura biții: http://www.akafugu.jp/posts/blog/2015_09_01-MIFARE-Classic-1K-Access-Bits-Calculator/

Toate aceste informații, inclusiv mai multe detalii, sunt disponibile în datasheet.

Exemplu de cod

https://gist.github.com/dnutiu/da07d36d60cc88ef5bb11b0b778da4f6
Codul conține comentarii care te ajută să îl înțelegi mai bine, verifică și exemplele oferite de bibliotecă. Distracție plăcută 🙂