Componenti · 5 min di lettura

Come usare l'RFID RC522: leggere tessere con Arduino e una serratura a tessera

Come funziona il modulo RFID RC522? Tessere e portachiavi a 13,56 MHz, collegamento SPI a 3,3 V, libreria MFRC522, lettura dell'UID, controllo delle tessere autorizzate, serratura con servo, ESP32 e Pico.

L'RFID (Radio Frequency IDentification) è una tecnologia che riconosce una tessera o un portachiavi tramite onde radio, senza toccare il lettore. Abbonamenti dei mezzi pubblici, badge d'accesso agli uffici, etichette antitaccheggio dei negozi e microchip degli animali usano tutti l'RFID. L'RC522 è un modulo lettore economico che lavora a 13,56 MHz, di solito venduto con una tessera bianca e un portachiavi blu. È la base di molti progetti, dalle serrature a tessera ai sistemi di rilevazione presenze.

Modulo lettore RFID RC522
Modulo RFID RC522: la pista di rame sulla scheda è l'antenna del lettore; accanto una tessera e un portachiavi leggibili.

Come funziona l'RFID?

L'antenna di rame della scheda lettore crea un campo magnetico a 13,56 MHz. Dentro la tessera o il portachiavi ci sono una bobina sottile e un minuscolo chip, ma nessuna batteria. Quando la tessera si avvicina al campo, l'energia indotta nella bobina alimenta il chip, che invia al lettore la sua identità e i suoi dati modificando leggermente il campo. Per questo le tessere funzionano per anni senza essere mai ricaricate, ma con l'RC522 la distanza di lettura è di soli 3–5 centimetri circa.

Le tessere dei kit sono di solito MIFARE Classic 1K: 1 KB di memoria diviso in 16 settori, ciascuno di 4 blocchi da 16 byte. Ogni tessera ha un UID (identificativo univoco) scritto in fabbrica, di solito lungo 4 byte. La maggior parte dei progetti semplici riconosce la tessera leggendo questo UID invece di scriverci dati.

Caratteristiche tecniche dell'RC522

CaratteristicaValore
Frequenza di lavoro13,56 MHz
Alimentazione3,3 V (non 5 V)
Assorbimento13–26 mA
Distanza di letturaCirca 3–5 cm (a seconda della tessera)
Tessere supportateMIFARE Classic 1K/4K, Ultralight, NTAG (ISO 14443A)
InterfacciaSPI (il chip supporta anche I2C e UART)

Collegamento dell'RC522 (SPI)

L'RC522 comunica con la scheda tramite SPI. I pin SCK, MOSI e MISO vanno collegati ai pin SPI fissi di ogni scheda, mentre SDA (SS) e RST possono andare su qualsiasi pin digitale, purché corrispondano al codice. Puoi vedere i pin SPI della tua scheda nello strumento Pinout.

Pin dell'RC522Arduino UnoArduino MegaESP32Raspberry Pi Pico
SDA (SS)D1053GPIO 5GP17
SCKD1352GPIO 18GP18
MOSID1151GPIO 23GP19
MISOD1250GPIO 19GP16
IRQNon collegatoNon collegatoNon collegatoNon collegato
GNDGNDGNDGNDGND
RSTD95GPIO 22GP20
3.3V3.3V3.3V3V33V3
Non collegare mai l'RC522 al pin 5V: il modulo si alimenta a 3,3 V e i 5 V possono danneggiarlo in modo permanente. Molti lo collegano direttamente ai pin dati a 5 V dell'Uno e di solito funziona, ma il chip non è ufficialmente tollerante ai 5 V. Per progetti che resteranno in funzione a lungo è più sicuro usare un convertitore di livello; ESP32 e Pico lavorano già a 3,3 V, quindi non hanno questo problema.

La libreria MFRC522 e la lettura dell'UID

Nel Gestore librerie cerca MFRC522 e installa la libreria di GithubCommunity (miguelbalboa). Il codice qui sotto scrive nel Monitor seriale, in esadecimale (HEX), l'UID di ogni tessera che avvicini:

Arduino (C++)
1#include <SPI.h>
2#include <MFRC522.h>
3
4const int SS_PIN = 10;
5const int RST_PIN = 9;
6
7MFRC522 rfid(SS_PIN, RST_PIN);
8
9void setup() {
10  Serial.begin(9600);
11  SPI.begin();
12  rfid.PCD_Init();
13  Serial.println("Kartı okutun / scan a card");
14}
15
16void loop() {
17  if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) return;  // kart yok / no card
18
19  Serial.print("UID:");
20  for (byte i = 0; i < rfid.uid.size; i++) {
21    Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " ");
22    Serial.print(rfid.uid.uidByte[i], HEX);
23  }
24  Serial.println();
25
26  rfid.PICC_HaltA();        // kartı beklemeye al / halt the card
27  rfid.PCD_StopCrypto1();
28}
Annota gli UID della tua tessera e del portachiavi: nel passo successivo li userai come "tessere autorizzate". Se non viene letta nessuna tessera, carica File > Esempi > MFRC522 > DumpInfo; se il Monitor seriale mostra "Firmware Version: 0x0" o "0xFF", il problema è nei collegamenti.

Controllare una tessera autorizzata

Confrontando l'UID letto con un valore salvato puoi decidere se la tessera è autorizzata. L'esempio qui sotto controlla una sola tessera autorizzata; per più tessere basta rendere l'array bidimensionale e confrontare in un ciclo:

Arduino (C++)
1// yukarıdaki tanımlar ve setup() aynen / definitions and setup() as above
2byte allowed[4] = {0xDE, 0xAD, 0xBE, 0xEF};   // kendi kartının UID'si / your card's UID
3
4bool isAllowed() {
5  if (rfid.uid.size != 4) return false;
6  for (byte i = 0; i < 4; i++) {
7    if (rfid.uid.uidByte[i] != allowed[i]) return false;
8  }
9  return true;
10}
11
12void loop() {
13  if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) return;
14  Serial.println(isAllowed() ? "İzin verildi / access granted" : "Reddedildi / access denied");
15  rfid.PICC_HaltA();
16  rfid.PCD_StopCrypto1();
17}

Serratura a tessera con servo

Costruiamo una serratura che, con una tessera autorizzata, ruota un servo di 90 gradi e apre per 3 secondi, mentre con una tessera non autorizzata emette un breve bip con un buzzer. Per il collegamento del servo vedi Cos'è un servomotore?, per l'avviso sonoro Cos'è un buzzer? Sull'Uno la libreria Servo usa il Timer1 e tone() il Timer2, quindi funzionano insieme senza problemi.

Arduino (C++)
1#include <SPI.h>
2#include <MFRC522.h>
3#include <Servo.h>
4
5MFRC522 rfid(10, 9);       // SS, RST
6Servo lock;
7const int BUZZER_PIN = 8;
8byte allowed[4] = {0xDE, 0xAD, 0xBE, 0xEF};
9
10void setup() {
11  SPI.begin();
12  rfid.PCD_Init();
13  lock.attach(6);
14  lock.write(0);                          // kilitli / locked
15}
16
17void loop() {
18  if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) return;
19  bool ok = rfid.uid.size == 4 && memcmp(rfid.uid.uidByte, allowed, 4) == 0;
20  if (ok) {
21    lock.write(90);                       // kilidi aç / unlock
22    delay(3000);
23    lock.write(0);                        // tekrar kilitle / lock again
24  } else {
25    tone(BUZZER_PIN, 400, 600);           // reddedildi sesi / denied beep
26  }
27  rfid.PICC_HaltA();
28  rfid.PCD_StopCrypto1();
29}
Una serratura che controlla solo l'UID va bene per imparare e per progetti hobbistici, ma non offre vera sicurezza: gli UID delle tessere MIFARE Classic si possono copiare con dispositivi economici. Per una porta vera chiedi anche un PIN oltre alla tessera, oppure verifica dati salvati in settori cifrati.

RC522 con ESP32 e Raspberry Pi Pico

Sull'ESP32 funziona la stessa libreria MFRC522; usa i pin VSPI e dichiara l'oggetto come MFRC522 rfid(5, 22);. Lavorando a 3,3 V, l'ESP32 si abbina perfettamente all'RC522, e grazie al Wi-Fi puoi registrare online le tessere lette. Sul Pico con MicroPython, copia un file mfrc522.py (per esempio la libreria di danjperron) sul Pico e usalo così:

Python
1from mfrc522 import MFRC522      # mfrc522.py Pico'da olmalı / mfrc522.py must be on the Pico
2import time
3
4reader = MFRC522(spi_id=0, sck=18, miso=16, mosi=19, cs=17, rst=20)
5
6while True:
7    reader.init()
8    stat, tag_type = reader.request(reader.REQIDL)
9    if stat == reader.OK:
10        stat, uid = reader.SelectTagSN()
11        if stat == reader.OK:
12            print("UID:", "".join("{:02X}".format(b) for b in uid))
13    time.sleep_ms(200)

Tipi di RFID: quali tessere legge l'RC522?

TipoFrequenzaDistanza di letturaUso tipico
RFID LF125 kHzCirca 10 cmVecchi badge d'accesso, microchip per animali (EM4100)
RFID HF / NFC13,56 MHz1–10 cmAbbonamenti dei trasporti, MIFARE, NFC dei telefoni
RFID UHF860–960 MHzDiversi metriEtichette per magazzini, logistica e negozi

L'RC522 legge solo tessere HF a 13,56 MHz. Le tessere a 125 kHz usate in molti condomini (spesso con la scritta "EM") non si possono leggere con l'RC522; serve un lettore a 125 kHz come l'RDM6300. L'NFC è un tipo di RFID a 13,56 MHz leggibile dai telefoni; l'RC522 può leggere l'UID degli adesivi NTAG.

Idee di progetti con l'RFID

  • Serratura a tessera per porta o cassetto: una serratura che si apre con la tessera autorizzata e avvisa con le altre.
  • Rilevazione presenze: associa ogni tessera a un nome e registra l'orario di arrivo su scheda SD o online.
  • Schermata di benvenuto: mostra "Benvenuto" e il nome della persona su un LCD quando passa la tessera; per il display vedi Usare un display LCD I2C.
  • Scatola delle storie: assegna un file audio diverso a ogni tessera e crea un gioco sonoro per bambini con un DFPlayer.
  • Ciotola intelligente: eroga il cibo quando viene letta la medaglietta sul collare dell'animale.
  • Gioco con le tessere: crea un quiz o un gioco di memoria con le tessere.

Errori comuni e come risolverli

  • Non viene letta nessuna tessera e la versione è 0x0: i fili SPI sono sui pin sbagliati; controlla soprattutto MOSI e MISO.
  • Collegare il modulo al 5V: l'RC522 funziona a 3,3 V; i 5 V possono distruggerlo.
  • Provare a leggere una tessera a 125 kHz: l'RC522 non vede queste tessere; usa una tessera a 13,56 MHz.
  • Tessera troppo lontana o su una superficie metallica: avvicina la tessera a 1–3 cm; il metallo disturba il campo.
  • La stessa tessera viene letta di continuo: manca la chiamata a PICC_HaltA(); metti in pausa la tessera dopo averla letta.
  • Fili lunghi: i segnali SPI peggiorano con i fili lunghi; tienili sotto i 20 cm.

L'RFID risponde alla domanda "chi sei?" con un semplice gesto, e questo arricchisce molto i progetti di sicurezza e automazione. Nell'app BlueGrays trovi progetti di lettura di valori RFID, lettore di tessere con LCD e serratura RFID con servo, passo passo con schemi e codice.

Domande frequenti

A quanti centimetri legge una tessera l'RC522?

Con le tessere e i portachiavi dei kit di solito legge a 3–5 cm. Il tipo di tessera, la dimensione dell'antenna e i metalli vicini influiscono sulla distanza. Per distanze maggiori servono lettori UHF, che lavorano su altre frequenze.

Quali tessere legge l'RC522? Legge quelle a 125 kHz?

L'RC522 legge solo tessere ISO 14443A a 13,56 MHz, come MIFARE Classic 1K/4K, Ultralight ed etichette NTAG. Non può leggere le tessere EM a 125 kHz comuni nei condomini; per quelle si usa un lettore a 125 kHz come l'RDM6300.

L'RC522 funziona a 5V?

No, l'RC522 va alimentato a 3,3 V. Collegarlo al pin 5V può danneggiare il modulo. I suoi pin dati di solito sopportano i segnali a 5 V dell'Uno, ma dato che il chip non è ufficialmente tollerante ai 5 V, per i progetti permanenti si consiglia un convertitore di livello.

L'UID di una tessera può cambiare o essere copiato?

L'UID di una tessera normale viene scritto in fabbrica e non cambia. Esistono però tessere "magic" con UID modificabile, sulle quali si possono copiare gli UID MIFARE Classic. Per questo un sistema che si fida solo dell'UID non offre vera sicurezza.

Si possono scrivere dati su una tessera con l'RC522?

Sì. Sulle tessere MIFARE Classic ogni settore è protetto da una chiave; sulle tessere nuove la chiave predefinita è FF FF FF FF FF FF. Con l'esempio ReadAndWrite della libreria MFRC522 puoi scrivere dati nei blocchi e rileggerli. L'ultimo blocco di ogni settore contiene le chiavi, quindi non scriverci dati a caso.

Posso usare il telefono come tessera sull'RC522?

Di solito non in modo affidabile. Gli iPhone non aprono l'NFC all'emulazione di tessere e i telefoni Android inviano un UID casuale che cambia a ogni passaggio. Per un sistema basato sul telefono è meglio leggere un'etichetta NFC con il telefono e inviare il risultato alla scheda via Wi-Fi o Bluetooth.

Vedi tutti i progetti
Lettura del valore RFID
#53Principiante
Premium

Lettura del valore RFID

Progetto che legge il numero di serie in Serial Monitor quando la carta o il portachiavi vengono avvicinati con il modulo RC522 RFID. Insegna le basi della comunicazione SPI e della lettura RFID.

4.7(47)
61
Lettore di schede RFID RC522 per ESP32 (con LCD)
#123Intermedio
Premium

Lettore di schede RFID RC522 per ESP32 (con LCD)

In questo progetto collegheremo il modulo RFID RC522 basato su MFRC522 all'ESP32 tramite SPI per leggere l'UID della tessera o dell'etichetta. Costituisce la base per applicazioni quali serrature, sistemi di abbonamento e controllo degli accessi. Visualizzeremo l'UID letto su un display LCD e forniremo un esempio di confronto con l'elenco delle tessere autorizzate. **ATTENZIONE:** l'RC522 funziona solo a **3,3 V**; a 5 V il modulo si brucerà!

4.8(21)
38
Serratura RFID ESP32 (RC522 + servomotore + OLED + cicalino + LED)
#137Avanzato
Premium

Serratura RFID ESP32 (RC522 + servomotore + OLED + cicalino + LED)

Realizziamo una serratura intelligente utilizzando un modulo RFID RC522 con ESP32, un servomotore SG90, un display OLED SSD1306, un cicalino attivo e 2 LED. Quando viene letta una tessera, il codice UID viene confrontato con l’elenco delle tessere autorizzate definito nel sistema: se autorizzata, il servomotore ruota sbloccando la serratura (LED verde + 2 brevi bip); dopo 5 secondi, la serratura si blocca automaticamente. In caso di tessera non autorizzata, si accende il LED rosso, viene emesso

4.8(9)
15
Cassaforte elettronica intelligente
#92Avanzato
Premium

Cassaforte elettronica intelligente

Smart Electronic Safe è un sistema di sicurezza protetto da password basato su Arduino. Attiva e disattiva il meccanismo di chiusura controllato dal servomotore con la password a 4 cifre inserita tram

4.7(42)
63
Tastiera 4x4 Display LCD Applicazione password
#64Avanzato
Premium

Tastiera 4x4 Display LCD Applicazione password

Progetto di sicurezza che apre la porta con un servo se è corretta l'immissione di una password con una tastiera 4x4 e accende un LED rosso se è errata. Insegna il confronto delle password e l'integra

4.8(57)
75
Sistema di Allarme Movimento ESP32 (PIR + Buzzer + LED + Telegram)
#145Avanzato
Premium

Sistema di Allarme Movimento ESP32 (PIR + Buzzer + LED + Telegram)

Un sistema di allarme di sicurezza intelligente che attiva buzzer e LED quando il sensore PIR rileva movimento, inviando contemporaneamente una notifica istantanea al proprietario tramite Telegram. Dispone di un cooldown di 30 secondi per evitare falsi allarmi. Adatto a sicurezza domestica, monitoraggio di garage, magazzini o studi. Con l'ESP32-CAM è possibile aggiungere notifiche con foto; con il classico ESP32 DevKit V1 vengono inviate notifiche di testo.

0.0(0)
8
Allarme con sensore di movimento ESP32
#140Intermedio
Premium

Allarme con sensore di movimento ESP32

In questo progetto, realizzato utilizzando un ESP32 e un sensore PIR, quando viene rilevato un movimento, il cicalino si attiva emettendo un allarme acustico. Si tratta di un'applicazione semplice ed economica per un sistema di sicurezza. (Le immagini sono puramente illustrative; collegarle in base al testo)

4.4(10)
15
Schermo LCD I2C per ESP32 (16x2)
#119Intermedio
Premium

Schermo LCD I2C per ESP32 (16x2)

In questo progetto visualizziamo del testo collegando un display LCD a 16x2 caratteri all'ESP32 tramite il protocollo I2C. Grazie all'I2C possiamo controllare il display utilizzando solo 2 pin di dati (SDA e SCL); si elimina così lo spreco dei 6+ pin tipici del collegamento parallelo classico. Il codice stampa un messaggio fisso sulla prima riga e un contatore che aumenta ogni secondo sulla seconda riga. Inoltre, all'inizio, eseguendo lo scanner I2C, stampiamo l'indirizzo del display sul Serial

4.9(22)
39

Impara come l'RFID legge tessere senza batteria, come collegare l'RC522 ad Arduino in sicurezza, leggere l'UID di una tessera e costruire una serratura con servo che si apre con una tessera autorizzata.

Come usare l'RFID RC522: leggere tessere con Arduino e una serratura a tessera | BlueGrays