Utiliser le RFID RC522 : lire des cartes avec Arduino et une serrure à carte
Comment fonctionne le module RFID RC522 ? Cartes et badges 13,56 MHz, câblage SPI en 3,3 V, bibliothèque MFRC522, lecture de l'UID, vérification des cartes autorisées, serrure à servo, ESP32 et Pico.
Le RFID (Radio Frequency IDentification) est une technologie qui identifie une carte ou un badge par ondes radio, sans contact avec le lecteur. Les cartes de transport, les badges d'accès aux bureaux, les étiquettes antivol des magasins et les puces des animaux utilisent le RFID. Le RC522 est un module lecteur bon marché fonctionnant à 13,56 MHz, généralement vendu avec une carte blanche et un badge porte-clés bleu. C'est la base de nombreux projets, de la serrure à carte au système de pointage.

Comment fonctionne le RFID ?
L'antenne en cuivre de la carte lectrice crée un champ magnétique à 13,56 MHz. La carte ou le badge contient une fine bobine et une minuscule puce, mais pas de pile. Quand la carte approche du champ, l'énergie induite dans la bobine alimente la puce, qui renvoie son identifiant et ses données au lecteur en modifiant très légèrement le champ. C'est pourquoi les cartes fonctionnent des années sans jamais être rechargées, mais avec le RC522 la distance de lecture n'est que d'environ 3 à 5 centimètres.
Les cartes fournies dans les kits sont généralement des MIFARE Classic 1K : leur 1 Ko de mémoire est divisé en 16 secteurs de 4 blocs de 16 octets. Chaque carte possède un UID (identifiant unique) écrit en usine, le plus souvent sur 4 octets. La plupart des projets simples reconnaissent une carte en lisant cet UID plutôt qu'en écrivant des données dedans.
Caractéristiques techniques du RC522
| Caractéristique | Valeur |
|---|---|
| Fréquence de fonctionnement | 13,56 MHz |
| Alimentation | 3,3 V (pas 5 V) |
| Consommation | 13–26 mA |
| Distance de lecture | Environ 3–5 cm (selon la carte) |
| Cartes compatibles | MIFARE Classic 1K/4K, Ultralight, NTAG (ISO 14443A) |
| Interface | SPI (la puce gère aussi l'I2C et l'UART) |
Câblage du RC522 (SPI)
Le RC522 communique en SPI. Les broches SCK, MOSI et MISO doivent aller sur les broches SPI fixes de chaque carte ; SDA (SS) et RST peuvent aller sur n'importe quelle broche numérique, du moment que le code correspond. Tu peux retrouver les broches SPI de ta carte dans l'outil Brochage.
| Broche RC522 | Arduino Uno | Arduino Mega | ESP32 | Raspberry Pi Pico |
|---|---|---|---|---|
| SDA (SS) | D10 | 53 | GPIO 5 | GP17 |
| SCK | D13 | 52 | GPIO 18 | GP18 |
| MOSI | D11 | 51 | GPIO 23 | GP19 |
| MISO | D12 | 50 | GPIO 19 | GP16 |
| IRQ | Non connectée | Non connectée | Non connectée | Non connectée |
| GND | GND | GND | GND | GND |
| RST | D9 | 5 | GPIO 22 | GP20 |
| 3.3V | 3.3V | 3.3V | 3V3 | 3V3 |
La bibliothèque MFRC522 et la lecture de l'UID
Dans le gestionnaire de bibliothèques, cherche MFRC522 et installe la bibliothèque de GithubCommunity (miguelbalboa). Le code ci-dessous affiche dans le moniteur série l'UID de chaque carte présentée, en hexadécimal (HEX) :
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}Vérifier une carte autorisée
En comparant l'UID lu à une valeur enregistrée, tu peux décider si la carte est autorisée. L'exemple ci-dessous vérifie une seule carte autorisée ; pour plusieurs cartes, rends le tableau bidimensionnel et compare dans une boucle :
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}Une serrure à carte avec un servo
Réalisons une serrure qui fait tourner un servo de 90 degrés pour ouvrir pendant 3 secondes avec une carte autorisée, et qui émet un bip d'avertissement avec un buzzer pour une carte non autorisée. Pour le câblage du servo, vois Qu'est-ce qu'un servomoteur ?, et pour le son Qu'est-ce qu'un buzzer ? Sur l'Uno, la bibliothèque Servo utilise le Timer1 et tone() le Timer2 : les deux cohabitent sans problème.
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}Le RC522 avec l'ESP32 et le Raspberry Pi Pico
La même bibliothèque MFRC522 fonctionne sur l'ESP32 ; utilise les broches VSPI et déclare l'objet ainsi : MFRC522 rfid(5, 22);. Comme l'ESP32 fonctionne en 3,3 V, il s'accorde parfaitement avec le RC522, et grâce au Wi-Fi tu peux enregistrer les cartes lues sur Internet. Sur le Pico en MicroPython, copie un fichier mfrc522.py (par exemple la bibliothèque de danjperron) sur le Pico et utilise-le ainsi :
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)Les types de RFID : quelles cartes le RC522 lit-il ?
| Type | Fréquence | Distance de lecture | Usage typique |
|---|---|---|---|
| RFID LF | 125 kHz | Environ 10 cm | Anciens badges d'accès, puces d'animaux (EM4100) |
| RFID HF / NFC | 13,56 MHz | 1–10 cm | Cartes de transport, MIFARE, NFC des téléphones |
| RFID UHF | 860–960 MHz | Plusieurs mètres | Étiquettes d'entrepôt, de logistique et de magasin |
Le RC522 ne lit que les cartes HF à 13,56 MHz. Les badges 125 kHz utilisés dans de nombreux immeubles (souvent marqués « EM ») ne peuvent pas être lus par le RC522 ; il faut pour eux un lecteur 125 kHz comme le RDM6300. Le NFC est une forme de RFID à 13,56 MHz lisible par les téléphones ; le RC522 peut lire l'UID des autocollants NTAG.
Idées de projets avec le RFID
- Serrure de porte ou de tiroir à carte : une serrure qui s'ouvre avec la carte autorisée et alerte avec les autres.
- Système de pointage : associe chaque carte à un nom et enregistre l'heure d'arrivée sur une carte SD ou sur Internet.
- Écran d'accueil : affiche « Bienvenue » et le nom de la personne sur un LCD quand une carte est présentée ; pour l'écran, vois Utiliser un écran LCD I2C.
- Boîte à histoires : associe un fichier audio différent à chaque carte et crée un jouet sonore pour enfants avec un DFPlayer.
- Distributeur de croquettes intelligent : donne à manger quand le badge du collier de l'animal est lu.
- Jeu de cartes : crée un quiz ou un jeu de mémoire avec des cartes.
Erreurs fréquentes et solutions
- Aucune carte n'est lue et la version affiche 0x0 : les fils SPI sont sur de mauvaises broches ; vérifie surtout MOSI et MISO.
- Brancher le module en 5V : le RC522 fonctionne en 3,3 V ; le 5 V peut le détruire.
- Vouloir lire une carte 125 kHz : le RC522 ne voit pas ces cartes ; utilise une carte 13,56 MHz.
- Carte trop éloignée ou posée sur du métal : approche la carte à 1–3 cm ; les surfaces métalliques perturbent le champ.
- La même carte est lue en boucle : PICC_HaltA() n'est pas appelé ; mets la carte en veille après lecture.
- Fils trop longs : les signaux SPI se dégradent sur de longs fils ; reste sous 20 cm.
Le RFID répond à la question « qui es-tu ? » d'un simple geste, ce qui apporte beaucoup aux projets de sécurité et d'automatisation. Dans l'application BlueGrays, tu trouveras des projets de lecture de valeurs RFID, de lecteur de cartes avec LCD et de serrure RFID à servo, pas à pas avec schémas et code.
Questions fréquentes
À combien de centimètres le RC522 lit-il une carte ?
Avec les cartes et badges des kits, il lit généralement à 3–5 cm. Le type de carte, la taille de l'antenne et les métaux à proximité influencent la distance. Pour une plus longue portée, il faut des lecteurs UHF, qui fonctionnent à d'autres fréquences.
Quelles cartes le RC522 lit-il ? Lit-il les cartes 125 kHz ?
Le RC522 ne lit que les cartes ISO 14443A à 13,56 MHz, comme les MIFARE Classic 1K/4K, Ultralight et les étiquettes NTAG. Il ne peut pas lire les badges EM 125 kHz courants dans les immeubles ; pour ceux-là, on utilise un lecteur 125 kHz comme le RDM6300.
Le RC522 fonctionne-t-il en 5V ?
Non, le RC522 doit être alimenté en 3,3 V. Le brancher sur la broche 5V peut endommager le module. Ses broches de données supportent généralement les signaux 5 V de l'Uno, mais la puce n'étant pas officiellement tolérante au 5 V, un convertisseur de niveau est recommandé pour les projets permanents.
L'UID d'une carte peut-il changer ou être copié ?
L'UID d'une carte normale est écrit en usine et ne change pas. Il existe cependant des cartes « magiques » dont l'UID est modifiable, et les UID MIFARE Classic peuvent y être copiés. C'est pourquoi un système qui se fie uniquement à l'UID n'offre pas de vraie sécurité.
Peut-on écrire des données sur une carte avec le RC522 ?
Oui. Sur les cartes MIFARE Classic, chaque secteur est protégé par une clé ; sur les cartes neuves, la clé par défaut est FF FF FF FF FF FF. Avec l'exemple ReadAndWrite de la bibliothèque MFRC522, tu peux écrire des données dans les blocs et les relire. Le dernier bloc de chaque secteur contient les clés : n'y écris pas n'importe quoi.
Puis-je utiliser mon téléphone comme une carte sur le RC522 ?
En général, pas de façon fiable. Les iPhone n'ouvrent pas le NFC à l'émulation de carte, et les téléphones Android envoient un UID aléatoire qui change à chaque passage. Pour un système basé sur le téléphone, mieux vaut lire une étiquette NFC avec le téléphone et envoyer le résultat à la carte par Wi-Fi ou Bluetooth.
Projets à réaliser après cet article
Voir tous les projets
Lecture des valeurs RFID
Projet qui lit le numéro de série dans Serial Monitor lorsque la carte ou le porte-clés est approché avec le module RFID RC522. Enseigne les bases de la communication SPI et de la lecture RFID.

Lecteur de cartes RFID RC522 pour ESP32 (avec LCD)
Dans ce projet, nous allons connecter le module RFID RC522 basé sur le MFRC522 à l'ESP32 via SPI afin de lire l'UID d'une carte ou d'un badge. Cela constitue la base d'applications telles que les serrures de porte, les systèmes d'adhésion et le contrôle d'accès. Nous afficherons l'UID lu sur un écran LCD et donnerons un exemple de comparaison avec la liste des cartes autorisées. **ATTENTION :** le RC522 fonctionne uniquement en **3,3 V** ; 5 V grillerait le module !

Serrure de porte RFID ESP32 (RC522 + servomoteur + écran OLED + buzzer + LED)
Nous réalisons une serrure intelligente à l'aide d'un ESP32, d'un module RFID RC522, d'un servomoteur SG90, d'un écran OLED SSD1306, d'un buzzer actif et de 2 LED. Lorsqu’une carte est lue, son code UID est comparé à la liste des cartes autorisées définie dans le code — si elle est autorisée, le servomoteur tourne pour déverrouiller la serrure (LED verte + 2 bips courts), puis celle-ci se verrouille automatiquement au bout de 5 secondes. En cas de carte non autorisée, la LED rouge s'allume, un a

Coffre-fort électronique intelligent
Smart Electronic Safe est un système de sécurité protégé par mot de passe basé sur Arduino. Il active et désactive le mécanisme de verrouillage contrôlé par un servomoteur grâce au mot de passe à 4 ch

Clavier 4x4 Affichage LCD Application du mot de passe
Projet de sécurité qui ouvre la porte à l'aide d'un servo si la saisie du mot de passe est correcte à l'aide d'un clavier 4x4 et qui allume une LED rouge si la saisie est incorrecte. Enseigne la compa

Système d'Alarme de Mouvement ESP32 (PIR + Buzzer + LED + Telegram)
Un système d'alarme de sécurité intelligent qui active le buzzer et la LED lorsque le capteur PIR détecte un mouvement, tout en envoyant une notification instantanée au propriétaire via Telegram. Il intègre un cooldown de 30 secondes pour éviter les fausses alarmes. Idéal pour la sécurité domestique, la surveillance de garage, d'entrepôts ou de bureaux. Avec l'ESP32-CAM, des notifications photo sont possibles ; avec l'ESP32 DevKit V1 classique, des notifications texte sont envoyées.

Alarme de détection de mouvement ESP32
Dans ce projet réalisé à l'aide d'un ESP32 et d'un capteur PIR, un buzzer se déclenche pour émettre une alarme sonore dès qu'un mouvement est détecté. Il s'agit d'une application simple et peu coûteuse pour un système de sécurité. (Les images sont fournies à titre indicatif ; veuillez les associer au texte correspondant)

Écran LCD I2C ESP32 (16x2)
Dans ce projet, nous affichons du texte en connectant un écran LCD 16x2 à l'ESP32 via le protocole I2C. Grâce à l'I2C, nous pouvons contrôler l'écran avec seulement 2 broches de données (SDA et SCL) ; cela évite le gaspillage de 6 broches ou plus inhérent à la connexion parallèle classique. Le code affiche un message fixe sur la première ligne et un compteur qui augmente chaque seconde sur la deuxième ligne. De plus, au démarrage, nous lançons un scanner I2C pour afficher l'adresse de l'écran su
Autres articles
Apprends comment le RFID lit des cartes sans pile, comment brancher le RC522 sur un Arduino en toute sécurité, lire l'UID d'une carte et réaliser une serrure à servo qui s'ouvre avec une carte autorisée.

