Tutoriel Raspberry Pi
Utilisation du module RFID RC522 en Python


09 mai 2019 • 50 • 4.4

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 d'un module RFID sur Raspberry Pi - 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 :

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 :

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 !

A lire

Branchement caméra - présentation

Choisir et utiliser une caméra sur un Raspberry Pi


Branchement caméra - présentation

Obtenir la température avec une sonde DS18B20






Ce tutoriel vous a plu ?

starstarstarstarstar

4.4/5 | 14 votes




Commentaires

44 commentaires publiés.

Azk4b, le 21/03/2023 à 09h51
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 ?
SteFF, le 13/09/2021 à 15h19
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

Zeph, le 14/09/2020 à 02h57
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?
Lama, le 26/08/2020 à 16h23
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
autruche, le 10/07/2020 à 22h41
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 ?
autruche, le 10/07/2020 à 23h35
problème résolu. Pas la peine de prêter attention à mon commentaire précédent.
Encore merci pour ce tuto!
ghiles_123, le 31/03/2020 à 21h38
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
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, le 31/03/2020 à 23h20
Bonsoir @ghiles_123,
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 Lecture.py ?

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.
ghiles_123, le 02/04/2020 à 14h27
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@raspberrypi:~/SPI-Py $ cd ~
pi@raspberrypi:~ $ 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@raspberrypi:~ $ cd ~/RFID-RC522

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


Merci, pour votre aide
Bouns, le 05/12/2019 à 02h45
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, le 05/12/2019 à 10h14
Bonjour @Bouns,
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.
Bouns , le 05/12/2019 à 12h56
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.
Bouns, le 06/12/2019 à 15h46
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à.
Antoine, le 02/12/2019 à 15h38
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?
Sébastien, le 25/11/2019 à 21h59
Testé avec un Raspberry Pi v1, c'est top ! Il suffit d'adapter le branchement des broches GPIO. Merci !
José, le 06/09/2019 à 12h05
Tuto testé aujourd'hui avec succès. Rapide, simple, efficace. Merci pour ce partage bon boulot ! :-)
Bilel598, le 09/05/2019 à 11h17
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, le 13/05/2019 à 10h22
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é @fab375 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.
Bilel598, le 13/05/2019 à 10h50
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
fab375, le 18/04/2019 à 20h16
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
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)

ClumsyApe, le 28/04/2019 à 18h07
Bonjour,

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

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, le 28/04/2019 à 18h25
Bonjour @ClumsyApe,
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.
Montechristo, le 14/04/2019 à 20h09
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
ISFU1, le 05/04/2019 à 16h07
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@raspberrypi:~ $ cd RFID-RC522/
pi@raspberrypi:~/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, le 06/04/2019 à 17h32
Bonjour,
Cela signifie que la librairie RC522 n'a pas été correctement installée. Je vous invite donc à suivre ces étapes :

  1. Rendez-vous sur la page : https://github.com/RaspberryLab/RFID-RC522.git


  2. Cliquez sur Lecture.py et copiez le code contenu


  3. 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 (Oui) ou y (Yes), puis sur entrer.


  4. Faites de même pour le fichier MFRC522.py


  5. Exécutez le code avec la commande sudo python Lecture.py.



En espérant que votre problème sera résolu,
Cordialement,
RaspberryLab.

Spicy , le 12/02/2019 à 11h28
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
Thibaut WATRIGANT, le 21/08/2019 à 20h54
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 :)
Tof, le 26/11/2018 à 10h15
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, le 26/11/2018 à 15h44
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
Tof, le 27/11/2018 à 10h29
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.
Baptiste, le 02/10/2018 à 21h38
Bonjour,

Je rencontre un problème de lecture et d'écriture des tags.
J'ai continuellement l'erreur suivante :
pi@raspberrypi:~/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
Charly, le 08/05/2019 à 17h59
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.
spider, le 01/10/2018 à 11h43
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
Anthony, le 18/07/2018 à 22h32
Merci pour ce tuto très clair et concis !
Thétard, le 18/05/2018 à 13h08
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, le 19/05/2018 à 14h43
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 !
mr_H, le 25/04/2018 à 23h20
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, le 27/04/2018 à 14h41
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.
Lien ici.

D'après lui, il suffirait de changer le "/dev/spidev0.0" en "/dev/spidev0.1" 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).
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 !
mr_H, le 27/04/2018 à 18h43
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
ToF, le 05/04/2018 à 13h25
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, le 05/04/2018 à 14h02
Bonjour ToF,
Ravi que ce tutoriel vous plaise !

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

Bonne journée.
Victor fourcaud, le 31/03/2018 à 10h04
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, le 31/03/2018 à 23h21
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 Lecture.py, et récupérer l'UID de la carte valide, le noter quelque part.
-Ajouter une condition ligne 36 de type :
if status == MIFAREReader.MI_OK:
    if (uid[:4] == [xxx, xxx, xxx, xxx]) :
        #COLLER ICI L'ACTION A REALISER


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.

Les commentaires sous soumis à vérification avant publication.