Actualités et innovations RFID/NFC : veille technologique

Lire un badge RFID avec un Arduino et un module RC522

05/11/2026 11
Technician wiring an Arduino Uno and RC522 RFID reader while testing a badge on a cluttered workshop bench.

Le RC522, une porte d’entrée vers la RFID HF

Le module RC522 est l’un des lecteurs RFID les plus utilisés pour découvrir l’identification sans contact avec un Arduino. Peu coûteux, compact et disponible sous la forme de cartes prêtes à câbler, il fonctionne à 13,56 MHz et communique généralement avec le microcontrôleur par le bus SPI. Il permet de détecter un badge, de lire son identifiant unique et, selon le type de carte et les clés disponibles, d’accéder à certaines zones de mémoire.

Cette simplicité en fait un excellent outil de prototypage pour un contrôle d’accès pédagogique, une gestion d’inventaire, un casier connecté ou une démonstration d’identification dans un système IoT. Elle ne doit toutefois pas être confondue avec un lecteur RFID industriel universel. Le RC522 cible principalement les cartes et badges conformes à la famille ISO/IEC 14443 Type A, notamment les cartes MIFARE Classic. Il ne lit pas directement les étiquettes UHF EPC Gen2 utilisées dans la supply chain et ne couvre pas automatiquement toutes les cartes NFC.

Fréquence, protocole et types de badges compatibles

La RFID ne désigne pas une technologie unique. Les systèmes basse fréquence autour de 125 kHz, les systèmes haute fréquence à 13,56 MHz et les systèmes UHF autour de 860 à 960 MHz répondent à des besoins très différents. Le RC522 appartient à la deuxième catégorie, souvent appelée RFID HF ou NFC de proximité.

Son fonctionnement s’appuie sur un couplage électromagnétique à courte portée. Le lecteur crée un champ radiofréquence qui alimente la puce du badge passif. Le badge répond ensuite en modulant ce champ. La portée réelle dépend de l’antenne du module, du badge, de leur orientation, de la présence de métal et de la qualité de l’alimentation. Avec les petits modules RC522 courants, il faut généralement raisonner en centimètres plutôt qu’en dizaines de centimètres.

Le tableau suivant situe les principales familles rencontrées dans les projets d’identification :
TechnologieFréquence typiqueUsage courantCompatibilité avec le RC522
LF125 à 134 kHzContrôle d’accès ancien, identification animaleNon
HF RFID13,56 MHzBadges, cartes, livres, ticketsOui pour certaines cartes Type A
NFC13,56 MHzInteraction avec smartphone, authentification, échange courtPartiellement, selon le protocole et la carte
UHF RFID860 à 960 MHzLogistique, inventaire longue portée, suivi de palettesNon

Un badge marqué MIFARE Classic 1K est souvent utilisé avec ce module. Les cartes MIFARE Ultralight, NTAG ou d’autres produits NFC peuvent nécessiter une analyse spécifique de leur protocole et de leur mémoire. La présence du logo NFC ne garantit donc pas qu’un exemple conçu pour MIFARE Classic fonctionnera sans adaptation.

Matériel nécessaire et précautions d’alimentation

Pour un premier test, le montage requiert peu de composants :
  • un Arduino Uno ou une carte compatible ;
  • un module lecteur RC522 avec son antenne intégrée ;
  • un badge ou une carte RFID 13,56 MHz compatible ;
  • des fils Dupont, de préférence courts ;
  • un câble USB et le moniteur série de l’environnement Arduino.

Le point critique est l’alimentation. Le circuit intégré du RC522 fonctionne en 3,3 V. De nombreux modules comportent des adaptations de niveau, mais il ne faut pas supposer qu’une entrée prévue pour 3,3 V accepte durablement du 5 V. Sur un Arduino Uno, la sortie 3,3 V peut alimenter un petit module RC522 dans un montage de laboratoire, mais elle ne doit pas être considérée comme une alimentation industrielle robuste. Pour un système permanent, une alimentation 3,3 V régulée et correctement découplée est préférable.

Évitez également les câbles longs et les montages sur plaque d’essai mal enfichés. Les symptômes d’un problème électrique ressemblent souvent à un problème logiciel : carte jamais détectée, lecture aléatoire ou réinitialisations du lecteur. Un condensateur de découplage proche du module peut améliorer la stabilité, mais il ne corrige pas une mauvaise tension logique ou une masse absente.

Câblage du RC522 avec un Arduino Uno par SPI

Sur un Arduino Uno, le bus SPI matériel utilise les broches 11, 12 et 13. Le signal SS, souvent nommé SDA sur les modules RC522, sert à sélectionner le lecteur. La broche RST est pilotée séparément par le programme. Le câblage recommandé est le suivant :
Broche RC522Arduino UnoFonction
3.3V3.3VAlimentation du module
GNDGNDMasse commune
SDA ou SSD10Sélection du périphérique SPI
SCKD13Horloge SPI
MOSID11Données Arduino vers RC522
MISOD12Données RC522 vers Arduino
RSTD9Réinitialisation du lecteur

La nomenclature peut varier selon les fabricants : SDA ne signifie pas ici que le module utilise le bus I2C. Sur une carte RC522 destinée au SPI, cette broche correspond au Chip Select, aussi appelé SS. Cette confusion est fréquente lors du premier montage.

Sur un Arduino Mega, les broches SPI ne sont pas les mêmes que sur l’Uno. Elles se trouvent généralement sur le connecteur ICSP, en complément des broches dédiées. Dans une intégration professionnelle, il est préférable de vérifier le brochage de la carte choisie et de déclarer explicitement les broches SS et RST dans le programme.

Installer la bibliothèque MFRC522 et vérifier la communication

La bibliothèque la plus couramment utilisée pour ce type de montage est MFRC522, également connue dans l’écosystème Arduino sous le nom de bibliothèque miguelbalboa. Elle fournit les fonctions de bas niveau nécessaires pour initialiser le lecteur, détecter une carte, obtenir son UID, sélectionner la carte et lire ou écrire certains blocs lorsque les conditions de sécurité sont réunies.

Depuis le gestionnaire de bibliothèques de l’IDE Arduino, recherchez MFRC522 puis installez une version maintenue et identifiée clairement. Après l’installation, ouvrez de préférence l’exemple fourni pour la lecture d’un UID. Cette méthode permet de séparer trois problèmes souvent mélangés : le câblage, l’installation logicielle et le comportement du badge.

Une fois le programme téléversé, ouvrez le moniteur série avec la vitesse indiquée par le code. Approchez le badge sans le coller directement à l’antenne. Un lecteur correctement initialisé affiche généralement la version du firmware du composant ou détecte la présence d’une carte. Si rien ne se produit, contrôlez dans cet ordre la masse, l’alimentation 3,3 V, les lignes SPI, les broches SS et RST, puis la sélection de la bonne carte Arduino dans l’IDE.

Premier programme : afficher l’UID du badge

Le premier test utile consiste à détecter une carte et à afficher son UID en hexadécimal. Cet UID est une donnée d’identification technique, pas nécessairement un secret et pas toujours une preuve d’authenticité. Le programme ci-dessous évite d’écrire dans la mémoire du badge et convient donc à une première validation du montage.

Le code utilise les broches SS D10 et RST D9 définies dans le câblage précédent :

#include <SPI.h>
#include <MFRC522.h>

const byte SS_PIN = 10;
const byte RST_PIN = 9;
MFRC522 lecteur(SS_PIN, RST_PIN);

void setup() {
  Serial.begin(115200);
  SPI.begin();
  lecteur.PCD_Init();
}

void loop() {
  if (!lecteur.PICC_IsNewCardPresent()) {
    return;
  }
  if (!lecteur.PICC_ReadCardSerial()) {
    return;
  }

  for (byte i = 0; i < lecteur.uid.size; i++) {
    if (lecteur.uid.uidByte[i] < 0x10) {
      Serial.print(0);
    }
    Serial.print(lecteur.uid.uidByte[i], HEX);
    Serial.print(' ');
  }
  Serial.println();
  lecteur.PICC_HaltA();
  lecteur.PCD_StopCrypto1();
}


La taille de l’UID n’est pas toujours identique. Un badge peut présenter 4, 7 ou 10 octets selon sa famille et sa configuration. Il faut donc utiliser la propriété uid.size plutôt que coder en dur quatre octets. L’appel à PICC_HaltA demande à la carte de quitter l’état actif, tandis que PCD_StopCrypto1 arrête une éventuelle session de chiffrement ouverte par la bibliothèque.

UID, mémoire et authentification : trois niveaux à ne pas confondre

Lire l’UID est le test le plus simple, mais ce n’est pas équivalent à lire les données utilisateur. Dans une carte MIFARE Classic, la mémoire est organisée en secteurs et blocs. Chaque secteur possède des clés d’authentification et des conditions d’accès. Une lecture de bloc nécessite donc de connaître la structure de la carte, de sélectionner la bonne clé et d’exécuter l’authentification avant de demander les données.

Les exemples de la bibliothèque contiennent souvent des clés par défaut utilisées sur des cartes de démonstration. Elles ne doivent jamais être conservées dans un déploiement réel. La clé, l’UID et les données applicatives ont des rôles différents :
  • l’UID identifie le support présenté au lecteur ;
  • la clé autorise ou non l’accès à certains secteurs ;
  • les blocs de données peuvent stocker une référence, un compteur ou un paramètre applicatif.

Un contrôle d’accès qui se contente de comparer l’UID à une liste locale est vulnérable au clonage ou à l’émulation selon le type de support. Pour un prototype pédagogique, cette approche est acceptable si elle est explicitement limitée. Pour un système de sécurité, il faut évaluer une carte et un protocole offrant une authentification cryptographique appropriée, gérer les clés dans un environnement sécurisé et prévoir la révocation des supports compromis.

Méthode de diagnostic quand aucun badge n’est détecté

Un dépannage efficace consiste à modifier une seule variable à la fois. Les vérifications suivantes couvrent la majorité des erreurs rencontrées lors d’un premier montage :
  1. Alimentation : mesurez la tension entre 3.3V et GND directement sur le module. Une alimentation absente ou instable rend toute analyse logicielle inutile.
  2. Masse commune : assurez-vous que l’Arduino et le RC522 partagent bien la même référence électrique.
  3. SPI : contrôlez SCK, MOSI et MISO, sans vous fier uniquement à la couleur des fils.
  4. Sélection : vérifiez que la broche SDA du module est reliée à D10 et que la constante SS_PIN correspond au montage.
  5. Réinitialisation : vérifiez la liaison RST et la valeur utilisée dans le programme.
  6. Badge : testez plusieurs cartes compatibles, en variant la distance et l’orientation.
  7. Environnement : vérifiez la carte sélectionnée, le port série et la version installée de la bibliothèque.

Un badge placé sur une surface métallique peut voir sa portée fortement réduite. Des interférences entre plusieurs lecteurs voisins sont également possibles. Dans un prototype qui doit devenir un produit, documentez la distance de lecture, l’orientation, le matériau du support et la tension réellement mesurée. Ces paramètres sont aussi importants que le code source pour reproduire un résultat sur le terrain.

Du test Arduino à une architecture IoT exploitable

Le RC522 est adapté à la validation d’un principe, mais un système opérationnel demande une architecture plus complète. Dans un casier connecté, par exemple, l’Arduino peut lire l’UID, vérifier une autorisation locale, actionner un verrou et journaliser l’événement. Dans un prototype de traçabilité, il peut associer un identifiant de contenant à une mesure issue d’un capteur, puis transmettre l’ensemble vers une passerelle ou un service distant.

Il faut distinguer la couche de lecture et la couche métier. La première gère l’anticollision, le protocole carte et les erreurs de communication. La seconde décide si l’identifiant est autorisé, déjà utilisé, expiré ou associé à un emplacement. Cette séparation facilite le remplacement ultérieur du RC522 par un lecteur industriel sans réécrire toute l’application.

Pour un usage logistique, le choix technologique doit rester cohérent avec la distance de lecture et le volume d’objets. Un lecteur HF comme le RC522 convient à une présentation contrôlée, à une identification unitaire ou à une interface opérateur. Il ne remplace pas un système UHF capable de lire plusieurs étiquettes à distance sur un quai ou un convoyeur. Les standards ISO/IEC 14443, ISO/IEC 15693 et EPC Gen2 ne sont pas interchangeables : ils impliquent des lecteurs, des antennes et des modèles d’usage différents.

Sécurité, industrialisation et limites du module RC522

Un module RC522 vendu sur une carte de prototypage n’offre généralement ni boîtier industriel, ni qualification CEM, ni garantie de performance dans toutes les conditions. Il est excellent pour apprendre et expérimenter, mais une intégration terrain doit examiner la température, les vibrations, l’environnement métallique, la répétabilité de la portée et la disponibilité des composants.

La sécurité mérite une attention particulière. Ne stockez pas de données sensibles en clair dans un badge simplement parce que la lecture fonctionne. N’utilisez pas l’UID comme un mécanisme d’authentification fort. Si le badge commande une serrure, une machine ou une opération logistique critique, ajoutez une authentification adaptée, une gestion des droits côté système et une journalisation des événements. Le lecteur ne doit pas être considéré comme une frontière de confiance isolée.

Enfin, prévoyez les erreurs : badge retiré trop tôt, lecture répétée plusieurs fois, perte de communication SPI, alimentation coupée pendant une écriture ou présentation simultanée de plusieurs cartes. Un bon prototype reproduit déjà ces cas et définit un comportement explicite. C’est cette démarche qui permet de passer d’une démonstration Arduino à un composant fiable dans une chaîne IoT.

FAQ sur Arduino, RC522 et badges RFID

Le RC522 peut-il lire une étiquette RFID UHF de palette ?

Non. Le RC522 est un lecteur HF à 13,56 MHz destiné principalement à des cartes de proximité compatibles ISO/IEC 14443 Type A. Les étiquettes UHF EPC Gen2 utilisées pour les palettes et les portiques logistiques nécessitent un lecteur et une antenne UHF spécifiques.

Pourquoi la broche du module est-elle appelée SDA si la liaison est en SPI ?

Sur de nombreux modules RC522, SDA désigne la broche de sélection du périphérique, équivalente à SS ou CS en SPI. Ce nom ne signifie pas que le module est configuré en I2C. Les signaux SCK, MOSI et MISO confirment l’utilisation du bus SPI.

Peut-on alimenter le RC522 en 5 V ?

Le composant RC522 fonctionne en 3,3 V. Utilisez la sortie 3,3 V ou une alimentation régulée adaptée et vérifiez la documentation de votre carte. Une tension incorrecte peut endommager le module ou provoquer des lectures instables.

L’UID suffit-il pour sécuriser une porte ?

Non. L’UID est pratique pour un prototype et pour identifier un support, mais il ne constitue pas à lui seul une preuve cryptographique. Un contrôle d’accès réel doit employer une carte, une authentification et une gestion de clés adaptées au niveau de risque.

Auteur

Matteo Grünfeld