Lecture d’étiquettes RFID RC522 avec le Raspberry Pi

Lecture d'étiquettes RFID RC522 avec le Raspberry Pi

Les modules RFID RC522 sont un simple add-on que vous pouvez connecter à un Raspberry Pi pour lire les tags et cartes MIFARE. Il s’agit potentiellement d’une fonctionnalité intéressante à inclure dans un système de sécurité ou toute application dans laquelle vous devez identifier un objet ou une personne sans qu’elle n’appuie sur des boutons, des commutateurs ou d’autres capteurs. Les étiquettes sans contact peuvent être transportées sur un porte-clés et les cartes s’intègrent parfaitement dans un portefeuille. Les deux peuvent être cachés dans d’autres objets pour leur donner un identifiant unique qui peut être lu par le Pi.

L’application évidente est un système de sécurité où vous utilisez une balise pour activer ou désactiver une alarme, mais d’autres applications incluent des systèmes de temps et de présence et des jeux.

Protocoles pris en charge

Les modules qui utilisent la puce RC522 doivent prendre en charge toutes les balises qui utilisent les normes suivantes :

  • MIFARE Mini
  • MIFARE 1K
  • MIFARE 4K,
  • Ultra-léger MIFARE
  • MIFARE DESFire EV1
  • MIFARE Plus RF

Il est possible d’acheter des cartes et des tags supplémentaires, mais vous devez vous assurer qu’ils prennent en charge l’une de ces normes.

Ces modules RFID ne peuvent pas lire les cartes bancaires sans contact. Ils peuvent lire un identifiant à partir d’un téléphone intelligent, mais l’identifiant est différent à chaque fois, donc pas très utile dans la plupart des circonstances.

Le module

Il existe différents modules disponibles auprès des sources habituelles mais le mien est un PCB bleu avec huit connexions. La piste de l’antenne est visible sur le PCB et c’est elle qui communique avec un tag à proximité.

Lecteur RFID RC522 et tags MIFARE

Mon module est venu avec deux styles différents de broches d’en-tête, dont l’une devait être soudée sur le PCB. J’ai soudé l’en-tête à angle droit pour que le câble soit aligné avec le PCB. Une étiquette de style porte-clés et une carte de style « carte de crédit » blanche unie étaient également incluses.

Étiquette RC522 MIFARE et module RFID

Chacun de ces appareils possède un code unique (UID) qu’il est possible de lire à l’aide d’un script Python.

Les modules ne sont normalement pas fournis avec des câbles de démarrage, vous aurez donc besoin de sept câbles de démarrage femelle-femelle pour le connecter directement au Pi.

configuration materielle

Le module RC522 a huit broches mais nous n’avons besoin d’en connecter que sept à l’en-tête GPIO du Raspberry Pi. Les broches sont étiquetées sur le PCB mais les marquages ​​sont assez écrasés.

En-tête de module RFID RC522

J’ai utilisé un câble de démarrage femelle-femelle à 7 voies pour connecter le module au Pi.

Câblage GPIO RC522 et Raspberry Pi

Les détails de câblage sont également indiqués dans le tableau ci-dessous :

En-tête RC522 Couleur du diagramme En-tête Pi Remarques
3.3V Gris 1 3.3V
TVD blanc 22 GPIO25
GND Noir 6 Terre
IRQ Pas connecté
MISO Mauve 21 GPIO9
MOSI Bleu 19 GPIO10
SCK Vert 23 GPIO11
ADD Jaune 24 GPIO8

Veuillez vous référer à la page de l’en-tête GPIO du Raspberry Pi pour plus de détails sur la disposition des broches de l’en-tête du Pi.

Activer SPI

Le module RC522 utilise l’interface SPI pour communiquer avec le Pi. L’interface SPI doit être activée car elle est désactivée par défaut. Ceci est expliqué plus en détail dans mon tutoriel Activer l’interface SPI sur le Raspberry Pi.

Si vous ne voulez pas lire cela, exécutez simplement :

sudo raspi-config

depuis le terminal ou « Configuration Raspberry Pi » depuis le bureau et activez SPI dans la section « Options d’interfaçage ».

Installer les bibliothèques de prise en charge SPI

Installez ensuite la bibliothèque spidev en utilisant :

sudo apt-get install python-spidev python3-spidev

Cela l’installe à la fois pour Python 2 et Python 3.

Bien que j’aie tendance à utiliser « py-spidev » pour piloter l’interface SPI en Python pour cette application, j’ai utilisé « SPI-Py ». Cela peut être installé en utilisant la séquence de commandes suivante :

cd ~
git clone https://github.com/lthiery/SPI-Py.git
cd SPI-Py
sudo python setup.py install
sudo python3 setup.py install

Cela l’installe à la fois pour Python 2 et Python 3.

Télécharger la bibliothèque Python RC522

Enfin, téléchargez une bibliothèque qui aide à communiquer avec le module RC522 via l’interface SPI. Il s’appuie sur la bibliothèque SPI-Py installée à l’étape précédente.

Les commandes suivantes téléchargeront la bibliothèque requise :

cd ~
git clone https://github.com/mxgxw/MFRC522-python.git

Exemple de script Python

Dans le répertoire « MFRC522-python », il y a quelques exemples de scripts. Vous pouvez y accéder en utilisant :

cd MFRC522-python

Exécutez le script « Read.py » à l’aide de la commande suivante :

python Read.py

Le script attend qu’une étiquette soit détectée par le module RFID. Lorsqu’il trouve une balise, il lit l’UID et l’affiche à l’écran. Le script s’exécute en boucle et continuera d’attendre et d’afficher tous les UID détectés.

Exemple de lecture du module RC522

L’exécution de ce script vous permet de déterminer l’UID de l’étiquette ou de la carte qui a été fournie avec le lecteur.

Python 2 ou Python 3

Par défaut, la bibliothèque MFRC522 ne fonctionne qu’avec Python 2. Cependant, il est facile de la modifier pour fonctionner avec Python 3. Modifiez simplement le fichier « MFRC522.py » dans un éditeur de texte et convertissez les neuf instructions d’impression en syntaxe conviviale Python 3. Par example,

print "Authentication Error"

devient :

print("Authentication Error")

Tout ce qui suit l’instruction print doit être entouré de crochets ( ).

L’exemple de script s’exécutera désormais sous Python 3 sans aucune erreur :

python3 Read.py

Mon exemple de script Python

Afin de simplifier la sortie, j’ai créé un exemple de script modifié. Il lit une carte, imprime la pièce d’identité et attend 2 secondes pour que vous n’imprimiez pas la même pièce d’identité deux fois, à moins que vous ne tenez la carte en place pendant plus de 2 secondes.

import time
import RPi.GPIO as GPIO
import MFRC522

# Create an object of the class MFRC522
MIFAREReader = MFRC522.MFRC522()

# Welcome message
print("Looking for cards")
print("Press Ctrl-C to stop.")

# This loop checks for chips. If one is near it will get the UID
try:
  
  while True:

    # Scan for cards
    (status,TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL)

    # Get the UID of the card
    (status,uid) = MIFAREReader.MFRC522_Anticoll()

    # If we have the UID, continue
    if status == MIFAREReader.MI_OK:

      # Print UID
      print("UID: "+str(uid[0])+","+str(uid[1])+","+str(uid[2])+","+str(uid[3]))

      time.sleep(2)

except KeyboardInterrupt:
  GPIO.cleanup()

Vous pouvez télécharger ce script directement sur votre Pi en utilisant :

wget https://bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/rc522_read.py

et lancez-le en utilisant :

python rc522_read.py

Il fonctionnera sous Python 3 si vous avez modifié les instructions d’impression MFRC522.py comme mentionné précédemment.

La sortie ressemble à ceci :

Exemple de lecture simple du module RC522

Ce script est un peu plus proche du code que j’utiliserais réellement si je voulais lire une carte et agir si elle avait un identifiant stocké dans une liste. Par exemple, pour ouvrir une serrure de porte électronique.

L’UID est un tableau à quatre éléments nommé « uid » et le script combine chaque élément dans une chaîne séparée par des virgules. Vous n’avez pas besoin d’utiliser les virgules et les 4 éléments du tableau peuvent être combinés pour donner un nombre clair. Par exemple, mon UID de balise deviendrait « 1483565119 » plutôt que « 148,35,65,119 ».

Réflexions finales et considérations de sécurité

J’espère que cela vous amènera au point que vous pourrez lire l’UID à partir de vos balises MIFARE. Si vous utilisez ce genre de mécanisme dans un système de sécurité, sachez qu’il est possible de cloner ces cartes et de leur donner un nouvel UID. Ainsi, votre système ne serait sécurisé que si vous empêchiez un attaquant de découvrir votre UID ou d’avoir un accès physique à vos balises.

le Fiche technique NXP Semiconductors fournit toutes les informations techniques détaillées sur la puce RC522 et les protocoles qu’elle prend en charge.

  • AptoFun Module de Lecture de Cartes RFID RC522 pour Arduino, Raspberry Pi
  • AZDelivery Kit RFID RC522 Lecteur, Puce et Carte 13.56MHz SPI Compatible avec Arduino et Raspberry Pi incluant Un E-Book!