Tutoriel Raspberry Pi
Utilisation du module RFID RC522 en Python

Depuis un certain temps, les circuits RFID sont partout et se déclinent en différentes formes. L'utilisation la plus connue est celle du pass d'entrée d'un immeuble mais on en retrouve aussi dans certains antivols, les forfaits de ski, les cartes bancaires (équipées du sans contact). Plus récemment, des magasins Décathlon ont remplacé le code barre des articles par une puce RFID, il y a donc plus qu'à mettre les articles dans un bac pour les scanner !
Mais qu'est-ce que c'est réellement ? Le RFID (Radio Frequency Identification, radio-identification en français) est une technologie qui permet d'identifier un élément très rapidement.
La technologie RFID utilise des radio-étiquettes (plus communément appelés tags RFID) qui se déclinent sous différentes formes (cartes, puces, autocollants). Ces tags sont composés d'une antenne associée à une puce électronique qui leur permet de recevoir et de répondre aux requêtes radios émises depuis l’émetteur-récepteur. Ces puces n'ont pas besoin de batterie pour fonctionner car elles sont alimentées sans contact par le récepteur, par induction.

Utilisation du module RFID RC522 en Python - Raspberry Lab

Prérequis

Pour utiliser ce module RFID avec un Raspberry Pi, il faut :

Une fois tous les éléments réunis, on peut passer au branchement.

Branchement du module RFID

On branche ensuite le module RC522 au Raspberry en suivant le schéma ci-dessous.

Schéma de branchement du module RFID RC522 sur Raspberry Pi 3

Activation du SPI

Avant de pouvoir utiliser notre module, il va falloir activer le SPI (Serial Peripheral Interface). Rien de bien compliqué, il suffit d'entrer dans la console :

sudo raspi-config


Information

Navigation dans raspi-config

Pour naviguer entre les menus de raspi-config, il suffit d'utiliser les flèches directionnelles du clavier. Appuyer sur la touche Entrée du clavier pour valider.
Pour quitter, appuyer sur Esc.

Une fois dans le menu, aller dans 5. Interfacing Options, puis dans P4. SPI et répondre Yes à la question Would you like the SPI interface to be enabled ?.
Redémarrer le Raspberry.

sudo reboot

Pour vérifier que le module SPI a bien été activé, entrer la commande suivante :

lsmod | grep spi

Si le module spi_bcm2835 est listé, alors le module est bien activé.

Information

Module non listé ?

Il se peut que la ligne spi_bcm2835 ne soit pas dans la liste. Pour remédier à ce problème, entrez la commande suivante :

sudo nano /boot/config.txt

Dans le fichier ouvert, cherchez la ligne dtparam=spi=on. Si cette ligne existe, alors enlevez le "#" qui débute la ligne. Sinon, si la ligne n'existe pas, ajoutez la à la fin du fichier.
Enregistrez et quittez (Ctrl+X > "Y" > Enter).
Redémarrer le Raspberry.

Installation de la librairie MFRC522

Il est maintenant temps d'installer la librairie que l'on va utiliser pour lire et écrire sur nos tags RFID. Pour se faire, commençons par mettre à jour notre Raspberry Pi.

sudo apt-get update
sudo apt-get upgrade

Installons maintenant Python 2.7. Il se peut qu'il soit déjà installé, si c'est le cas, le Raspberry ne procédera pas à l'installation.

sudo apt-get install python2.7-dev

Nous pouvons maintenant installer SPY-Py qui va servir à la librairie MFRC522 :

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

Enfin, nous pouvons installer la librairie MFRC522 :

cd ~
git clone https://github.com/Espace
RaspberryFrancais/RFID-RC522.git

Maintenant que la librairie est correctement installée, on va pouvoir commencer à utiliser le module RFID RC522.

Lire un tag RFID

Tag RFID et RC522 - Raspberry Pi Francais

Commençons par s'intéresser à la lecture de tags RFID. La librairie que je vous propose inclut un programme Lecture.py qui permet de récupérer deux informations sur les tags RFID qu'on présente sur le lecteur :

  • L'UID (user Identifier). C'est un numéro (théoriquement unique) stocké dans une zone non réinscriptible. Cependant, certains nouveaux tags spéciaux ont cette zone de stockage réinscriptible, ce qui signifie que l'on peut aujourd'hui avoir deux tags avec le même UID.
  • Le secteur de donnée #8 : Un tag RFID comporte différents secteurs de données. Le RC522 nous permet de lire et d'écrire sur le secteur 8 (il est donc réinscriptible). Sa taille est de 16 octets. On peut donc stocker 16 caractères en ASCII basique dessus.

Le programme Lecture.py se trouve dans le répertoire ~/RFID-RC522/Lecture.py. Il suffit donc d'entrer ces deux commandes pour le lancer.

cd ~/RFID-RC522
sudo python Lecture.py

Une fois lancé, on obtient quelque chose comme ceci :

Programme de lecture de tags RFID avec RC522 - Raspberry Pi Francais

Écrire sur un tag RFID

Maintenant que nous savons lire les informations que comportent un tag RFID, voyons comment écrire sur le fameux secteur 8. Le programme Ecriture.py réalise les actions suivantes :

  • Il demande d'entrer les informations que l'on souhaite stocker sur le tag. Entrez donc une chaine de caractère (elle est automatiquement coupée au 16° caractère) et celle-ci sera transformée en hexadécimal, pour finalement être stockée sur la carte en entiers.
  • Le programme attend ensuite que l'on passe la carte sur le lecteur, puis écrit dessus et affiche le nouveau contenu de la carte.

Le programme Ecriture.py se trouve dans le répertoire ~/RFID-RC522/Ecriture.py. Il suffit donc d'entrer ces deux commandes pour le lancer.

cd ~/RFID-RC522
sudo python Ecriture.py

Une fois lancé, on obtient quelque chose comme ceci :

Programme de lecture de tags RFID avec RC522 - Raspberry Pi Francais

Ce tutoriel est maintenant terminé, modifiez les fichiers de lecture et d'écriture à votre goût pour réaliser votre projet. Si vous avez des questions, n'hésitez pas à les poster en commentaire.
Bon amusement !

Ce tutoriel vous a plu ?

4.3 /5 16 votes

Commentaires

44 commentaires publiés.

Anonyme
Lors de l'execution de Lecture.py, j'ai l'erreur suivante qui s'affiche : "import RPi.GPIO as GPIO \n no module named RPi.GPIO" j'ai pourtant fait comme vous et je n'ai pas eu une seule erreure.
Avez-vous une idée de comment la résoudre ?
Anonyme
Bonjour
clair net precis

on copy / paste et ca marche
rien à dire, si seulement c'etait pareil sur les autres sites !!!! on gagnerait un temps fou
genial mec
Anonyme
Bonjour. J'ai beaucoup apprécié cette présentation ainsi que les commentaires.
Je souhaite utiliser des RFID à longue portée(le tag passe à près de 8 mètres du lecteur).
Quel lecteur RFID dois-je utiliser? Et quelles sont les librairies qu'il faut installer pour les gerer sur python?
Anonyme
Bonjour et Merci, Clair et précis donc respect ;-)
J'ai donc installé et tout est ok.
Par contre, j'ai acheter d'autre cartes pour faire des tests et lorsque je lis , j'ai le message AUTH ERREUR (status2ref & 0x08 ! = 0 suivit de Erreur d'Authentification.
Je ne comprend pas, je suppose que je n'ai pas acheté les bonnes cartes ?
Merci pour votre aide
Anonyme
Bonjour,
Merci pour le tutoriel!
Malheureusement je travail avec python3 et non python2.
Il semblerait que le module 'spi' ne soit pas connu sur python3.
J'ai l'erreur suivante :
ModuleNotFoundError : No module named 'spi'
Une solution ?
Anonyme
problème résolu. Pas la peine de prêter attention à mon commentaire précédent.
Encore merci pour ce tuto!
Anonyme
Bonjour,

j'ai suivis votre tuto, quand j'ai essayer d’exécuter le programme de lecture , j'ai eu cette erreur :

ine 12, in <module>
rc522 = RFID() #On instancie la lib
File "/usr/local/lib/python3.7/dist-packages/pirc522/rfid.py", line 47, in __init__
self.spi.open(bus, device)
FileNotFoundError: [Errno 2] No such file or directory


Donc pouvez vous m'aider s'il vous plait ?

Merci
Raspberry Lab
Bonsoir @Anonyme,
Je viens de refaire le tuto sur un Raspberry Pi avec installation de Raspbian fraiche, et le programme semble toujours fonctionner.
Nous n'utilisons pas la librairie pirc522 dans ce tutoriel, le message d'erreur que vous me fournissez m'étonne. Avez-vous suivi d'autres tutos sur le module ? Excecutez-vous bien <i>Lecture.py</i> ?

Le problème que vous décrivez aurait sinon pu ressembler à un SPI non activé.
Que vous donne la commande "lsmod | grep spi" ?


Dans l'attente de votre retour,
Raspberry Lab.
Anonyme
Bonjour,
Merci d'avoir répondu.
j'avais essayé un autre tuto avant oui . J'ai re-suivis vos étapes aujourd'hui. Donc je détecte bien le spi_bcm2835 .
Par contre ;en exécutant lecture.py , j'ai ceci :

pi@Anonyme:~/SPI-Py $ cd ~
pi@Anonyme:~ $ git clone https://github.com/EspaceRaspberryFrancais/RFID-RC522.git
Clonage dans 'RFID-RC522'...
remote: Enumerating objects: 49, done.
remote: Total 49 (delta 0), reused 0 (delta 0), pack-reused 49
Dépaquetage des objets: 100% (49/49), fait.

pi@Anonyme:~ $ cd ~/RFID-RC522

pi@Anonyme:~/RFID-RC522 $ sudo python Lecture.py
can't open device: No such file or directory
Abandon


Merci, pour votre aide
Anonyme
Bonjour,

après avoir suivi scrupuleusement le tuto (qui est super bien fait), je n'arrive pas à lire ce qu'il y a sur mon badge!
J'ai seulement "carte détectee".
Je débute en programmation et sur Raspberry.
Pour info, j'ai un Raspberry V3 avec Raspbian

Merci d'avance pour votre aide
Raspberry Lab
Bonjour @Anonyme,
Il me semble que j'avais aussi rencontré ce problème lorsque je passais des tags RFID "protégés". En effet, ce composant ne peut lire qu'une certaine catégorie de puces RFID (type tags vierges vendus avec le module).

Avec quels tags avez-vous essayé le code ?

RaspberryLab.
Anonyme
Bonjour,
J'ai essayé avec les tags fournit avec le module.
Je sais pas si le module est pas HS. Car même pour me dire "carte detectee" ça marche pas à tout les coups.
Anonyme
Bonjour,

j'utilise les tags fournit avec le module, c'est pour ça que je comprend pas.
Je sais pas si mon module n'est pas H.S.
Je vais en commander un autre au cas ou ça viendrait de là.
Anonyme
salut, sa marche nickel mais je voudrais récupérer les données quand tu passes une carte et les envoyer sur une base de donné SQL. Avez vous des solution?
Anonyme
Testé avec un Raspberry Pi v1, c'est top ! Il suffit d'adapter le branchement des broches GPIO. Merci !
Anonyme
Tuto testé aujourd'hui avec succès. Rapide, simple, efficace. Merci pour ce partage bon boulot ! :-)
Anonyme
Salut,
J'ai suivi le tuto à la lettre, j'ai eu le même problème que fap375 que j'ai résolu grâce à ClumsyApe, mais maintenant je n'arrive pas à lire les UID, cad que j'ai le message "carte detectee" mais c'est tout, est-ce que quelqu'un pourrait m'aider?
Merci
Raspberry Lab
Salut Bilel598,
Avez-vous essayé avec plusieurs cartes ? (badge d'entrée ou autre si tu n'as pas d'autres cartes programmables)
Parce que j'ai refait le tuto sur mon Raspberry il y a quelques jours pour corriger le problème qu'a rencontré @Anonyme et grâce à la solution apportée en réponse, tout marchait pour moi, que ce soit la lecture ou l'écriture.

Tenez moi au courant,
RaspberryLab.
Anonyme
Bonjour RaspberryLab,
Merci pour votre réponse, j'ai résolu mon pb, c'était à cause du cablage, mais est-ce normal que j'ai une erreur d'authentification ?
Merci
Anonyme
Bonjour,

Tout d'abord merci pour ce super tuto, malheureusement chez moi ça ne fonctionne pas voici le message que je reçois si quelqu'un pouvait m'aider.
Merci d'avance

Traceback (most recent call last):
File "Lecture.py", line 20, in <module>
MIFAREReader = MFRC522.MFRC522()
File "/home/pi/RFID-RC522/MFRC522.py", line 115, in __init__
self.MFRC522_Init()
File "/home/pi/RFID-RC522/MFRC522.py", line 394, in MFRC522_Init
self.MFRC522_Reset();
File "/home/pi/RFID-RC522/MFRC522.py", line 118, in MFRC522_Reset
self.Write_MFRC522(self.CommandReg, self.PCD_RESETPHASE)
File "/home/pi/RFID-RC522/MFRC522.py", line 121, in Write_MFRC522
spi.transfer(((addr<<1)&0x7E,val))
TypeError: function takes exactly 2 arguments (1 given)
Anonyme
Bonjour,

J'ai eu le même problème. Ce lien SO m'a aidé: <a target="_blank" href="https://stackoverflow.com/questions/54847012/raspberry-pi-3b-and-rfid-rc522-python-typeerror">https://stackoverflow.com/questions/54847012/raspberry-pi-3b-and-rfid-rc522-python-typeerror</a>

Le problème de vient de la lib' SPI-Py, en dépendance, dont la version la plus récente pose problème. Revenir au commit 8cce26b9ee6e69eb041e9d5665944b88688fca68, puis réinstaller la lib', a réglé le problème pour moi.
Raspberry Lab
Bonjour @Anonyme,
Merci pour votre partage solution ! Je vais mettre à jour le tuto au plus vite pour que tout le monde puisse faire fonctionner le module.

Cordialement,
RaspberryLab.
Anonyme
Bonjour
l'endroit : git clone https://github.com/lthiery/SPI-Py.git
pour la librairie mrc522 n'existe plus a cet endroit.
ou peut-on le trouver maintenant.

Cordialement
Anonyme
Bonjour, j'ai un raspberry pi 3 avec raspbian. J'ai suivi le tuto du début à la fin mais il y a une erreur.
pi@Anonyme:~ $ cd RFID-RC522/
pi@Anonyme:~/RFID-RC522 $ sudo python Lecture.py
can't open device: No such file or directory
Abandon

J'ai regardé beaucoup d'autre tutos mais à chaques fois, il y a une erreur. Merci - si vous connaissais la solution - de bien vouloir me répondre.

ISFU1
Raspberry Lab
Bonjour,
Cela signifie que la librairie RC522 n'a pas été correctement installée. Je vous invite donc à suivre ces étapes :
<ol>
<li>Rendez-vous sur la page : <a href="https://github.com/RaspberryLab/RFID-RC522.git">https://github.com/RaspberryLab/RFID-RC522.git</a></li>

<li>Cliquez sur Lecture.py et copiez le code contenu</li>

<li>Sur votre Raspberry, faites :
cd ~/RFID-RC522
sudo nano Lecture.py
Collez ici le code, enregistrez avec Ctrl+X puis en appuyant sur la touche o <i>(Oui)</i> ou y <i>(Yes)</i>, puis sur entrer.</li>

<li>Faites de même pour le fichier MFRC522.py</li>

<li>Exécutez le code avec la commande <b><i>sudo python Lecture.py</i></b>.</li>
</ol>

En espérant que votre problème sera résolu,
Cordialement,
RaspberryLab.
Anonyme
Bonjour, très bon tuto. Je fais un projet ou il faut récup l'ID d'une puce RFID afin de prendre des informations dans une base de donnée pour les afficher sur un écran et influencer un programme python. Je pourrais avoir des infos pour tout relier ??? Merci d'avance
Anonyme
Bonjour,
As-tu avancé sur ton projet ?
Si oui, je serai très intéressé d'en savoir plus sur comment tu t'en es sorti :)
Anonyme
Bonjour à tous
Petite question peut-on émulé une carte RFID avec le kit RC522.
Sauf mauvaise recherche de ma part sur la toile, je n'ai pas rien trouvé la dessus,
Cordialement.
Raspberry Lab
Salut Tof,
A ma connaissance, le RC522 n'est qu'un récepteur RFID et ne peut donc pas émuler une carte RFID :/

Cordialement,
RaspberryLab
Anonyme
Bonjour
Merci de m'avoir répondu rapidement.
Si le RC522 n'est qu'un récepteur RFID, on ne pourrais pas écrire je pense ?
j'ai reçu ma carte RC522 pour faire les tests, et j'ai remarqué que c’était pas le même câblage que votre tuto.
voici l'autre câblage : https://www.gotronic.fr/pj2-sbc-rfid-rc522-fr-1439.pdf
je teste les 2 et vous tiens au courant.

Cordialement.
Anonyme
Bonjour,

Je rencontre un problème de lecture et d'écriture des tags.
J'ai continuellement l'erreur suivante :
pi@Anonyme:~/RFID-RC522 $ sudo python Ecriture.py
Entrez une chaine de caractère :
bonjour
Placez votre carte RFID
Carte detectee
UID de la carte : 199.79.85.211
ERREUR AUTHENTIFICATION
AUTH ERROR (status2reg & 0x08) != 0
Erreur d authentication

J'ai cherché sur internet, j'ai trouvé pas mal de personnes qui ont eu le même problème, mais je n'ai trouvé aucune solution.

Est-ce que quelqu'un peut m'aider ?

Merci
Anonyme
ERREUR AUTHENTIFICATION
AUTH ERROR (status2reg & 0x08) != 0
Erreur d authentication

J'ai exactement le même problème en utilisant les tags déjà inscrits. Si quelqu'un trouve une solution je suis preneur! Merci.
Anonyme
Bonjour le tuto est vraiment claire mais seulement chez moi les tag ne sont reconnue quand j'essaie d'executer le fichier dans l'ide on me dit qu'on ne retouve pas le module spi le message donne"ImportError: No module named 'spi'"
comment je peut faire svp aidez moi
Anonyme
Merci pour ce tuto très clair et concis !
Anonyme
Bonjour,

J'ai pu constater qu'il y a plusieurs secteurs différents sur les cartes MiFare.
Mais une question me vient, pourquoi écrit-on généralement sur le secteur 8? J'ai pu écrire sur d'autres secteurs auparavant mais je ne comprend pas pourquoi les gens se tournent plus particulièrement vers le 8.

Merci pour le tuto par la même occasion :)!
Raspberry Lab
Bonjour Thétard,

Toutes les librairies utilisant le RC522 ne permettent l'écriture que sur le secteur 8. Je m'étais posé la même question que toi quand j'ai écrit le tuto et je n'avais pas trouvé la réponse. Peut être que les autres secteurs sont protégés ?

Si quelqu'un connait la réponse à la question de Thétard, qu'il la poste en commentaire, ce serait super !
Bonne journée !
Anonyme
Bonjour,
est-ce possible de brancher un RC522 sur le SPI1 d'un rpi3? j'ai déjà un ecran qui est branché sur le SPI0 et je voudrai pouvoir le garder ainsi.
++
Raspberry Lab
Bonjour mr_H,
Je pense qu'il est possible d'utiliser un RC522 sur le SPI1. La personne qui a écrit la librairie a répondu à cette question.
<a href="https://github.com/erivandoramos/TwoRC522RPi/issues/1">Lien ici</a>.

D'après lui, il suffirait de changer le <i>"/dev/spidev<b>0.0</b>"</i> en <i>"/dev/spidev<b>0.1</b>"</i> défini en argument dans la fonction __init__ du fichier MFRC522.py de la librairie que vous avez téléchargé en IV du tuto.

Il faudrait, en plus de ce changement dans le code, brancher les cables sur les ports SPI1 (4 cables sont concernés). <img class="t50p" src="https://docs.microsoft.com/en-us/windows/iot-core/media/pinmappingsrpi/rp2_pinout.png" >
Malheureusement, je ne peux pas tester ce que je vous avance pour l'instant.

N'hésitez pas à me tenir au courant en re postant un commentaire !
Anonyme
Bonjour,
effectivement je n'avais pas vu le post sur github...
par contre avec /dev/spidev0.1 aucun résultat.
Mais après m'être arraché les cheveux en reviriant code, cablage, doc (raspberry, github et BCM2835) j'ai enfin réussi à lire mes tag mais avec "/dev/spidev1.2".
Penser à rajouter dans /boot/config.txt la ligne "dtoverlay=spi1-3cs"
câblage :
MISO : 35
MOSI : 38
SCK : 40
SDA :36
Anonyme
Bonjour,
Très beau tuto et très bien expliqué, par contre petite question, je viens de voir qu'il existait plus fréquence
LF : 125 kHz - 134,2 kHz : basses fréquences,
HF : 13,56 MHz : hautes fréquences,
UHF : 860 MHz - 960 MHz : ultra hautes fréquences,
SHF : 2,45 GHz : super hautes fréquences,
cette méthode va fonctionné avec quelle fréquence ?

Et encore bravo
Raspberry Lab
Bonjour ToF,
Ravi que ce tutoriel vous plaise !

Le module RC522 fonctionne avec de l'haute fréquence à 13.56 MHz.

Bonne journée.
Anonyme
bonjour merci pour ce tuto clair et précis !
je voudrait juste savoir si il était possible d'activer un petit moteur grâce a ce dispositif ?
je débute avec raspberry, encore merci !
Raspberry Lab
Bonjour Victor Fourcaud,
Tout d'abord, merci pour vos compliments !

Il est en effet possible d'actionner un moteur (ou une LED, un servo moteur ...) avec ce dispositif.
Pour se faire, il faut :

1. Réussir à faire fonctionner le moteur en Python dans un programme qui fait que ça

2. Une fois que tout marche bien, il faut combiner les deux programmes :
-Prendre le programme <i>Lecture.py</i>, et récupérer l'UID de la carte valide, le noter quelque part.
-Ajouter une condition ligne 36 de type :
<div class = "Code">if status == MIFAREReader.MI_OK:
&nbsp;&nbsp;&nbsp;&nbsp;if (uid[:4] == [xxx, xxx, xxx, xxx]) :
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#COLLER ICI L'ACTION A REALISER
</div>

En espérant vous avoir apporté suffisamment de pistes pour répondre à votre question,

RaspberryLab.

Commenter

Votre adresse mail ne sera pas visible sur le site.