Raspberry Pi Tutorial Using the RFID RC522 module in Python
May 9, 2019 • 44 • 4.3
RFID circuits have been everywhere for some time and come in various forms. The most well-known use is the entry pass for a building, but you also find them in anti-theft devices, ski passes, and bank cards (equipped with contactless). More recently, some Decathlon stores replaced barcodes with RFID chips, so you just put items in a bin to scan them! But what is it really? RFID(Radio Frequency Identification) is a technology that allows very fast identification of an item. The RFID technology uses radio tags (commonly called RFID tags) that come in different forms (cards, chips, stickers). These tags are composed of an antenna and an electronic chip that allow them to receive and respond to radio requests from the transceiver. These chips do not need batteries because they are powered wirelessly by the reader, via induction.
Prerequisites
To use this RFID module with a Raspberry Pi, you need:
Once you have everything, you can proceed to wiring.
Wiring the RFID module
Connect the RC522 module to the Raspberry following the diagram below.
Enable SPI
Before using our module, we need to enable SPI(Serial Peripheral Interface). Nothing complicated, just enter in the console:
sudo raspi-config
Information
Navigating raspi-config
To navigate raspi-config menus, use the keyboard arrow keys. Press the Enter key to validate. To quit, press Esc.
Once in the menu, go to 5. Interfacing Options, then to P4. SPI and answer Yes to the question Would you like the SPI interface to be enabled?. Restart the Raspberry.
sudo reboot
To check that the SPI module has been enabled, enter the following command:
lsmod | grep spi
If the spi_bcm2835 module is listed, then SPI is enabled.
Information
Module not listed?
It may happen that the spi_bcm2835 line is not in the list. To fix this problem, enter the following command:
sudo nano /boot/config.txt
In the opened file, look for the line dtparam=spi=on. If this line exists, remove the opening "#". Otherwise, if the line does not exist, add it at the end of the file. Save and exit (Ctrl+X > "Y" > Enter). Restart the Raspberry.
Installing the MFRC522 library
Now it's time to install the library we will use to read and write to our RFID tags. First, let's update our Raspberry Pi.
sudo apt-get update sudo apt-get upgrade
Now install Python 2.7. It may already be installed; if so, the Raspberry will not reinstall it.
sudo apt-get install python2.7-dev
We can now install SPI-Py which is used by the MFRC522 library:
cd ~ git clone https://github.com/lthiery/SPI-Py.git cd ~/SPI-Py git checkout 8cce26b9ee6e69eb041e9d5665944b88688fca68 sudo python setup.py install
Finally, we can install the MFRC522 library:
cd ~ git clone https://github.com/Espace RaspberryFrancais/RFID-RC522.git
Now that the library is properly installed, we can start using the RFID RC522 module.
Read an RFID tag
Let's start with reading RFID tags. The library I provide includes a Lecture.py program that retrieves two pieces of information from the RFID tags placed on the reader:
UID(User Identifier). This is a (theoretically unique) number stored in a non-rewritable area. However, some newer special tags have this storage area rewritable, which means you can have two tags with the same UID.
Data sector #8: An RFID tag has different data sectors. The RC522 allows us to read and write sector 8 (so it is rewritable). Its size is 16 bytes. We can therefore store 16 characters in basic ASCII on it.
The Lecture.py program is located in the ~/RFID-RC522/Lecture.py directory. Just enter these two commands to run it.
cd ~/RFID-RC522 sudo python Lecture.py
Once launched, you get something like this:
Write to an RFID tag
Now that we know how to read the information on an RFID tag, let's see how to write to sector 8. The Ecriture.py program performs the following actions:
It asks you to enter the information you want to store on the tag. Enter a character string (it is automatically cut at the 16th character) and it will be converted to hexadecimal, then stored on the card as integers.
The program then waits for you to pass the card over the reader, then writes to it and displays the new content of the card.
The Ecriture.py program is located in the ~/RFID-RC522/Ecriture.py directory. Just enter these two commands to run it.
cd ~/RFID-RC522 sudo python Ecriture.py
Once launched, you get something like this:
This tutorial is now complete. Modify the reading and writing files as you like to build your project. If you have any questions, feel free to post them in the comments. Have fun!
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, 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
Anonyme, 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?
Anonyme, 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
Anonyme, 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 ?
Anonyme, 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!
Anonyme, 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 <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, le 31/03/2020 à 23h20
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, 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@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, 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 @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, 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.
Anonyme, 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à.
Anonyme, 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?
Anonyme, le 25/11/2019 à 21h59
Testé avec un Raspberry Pi v1, c'est top ! Il suffit d'adapter le branchement des broches GPIO. Merci !
Anonyme, le 06/09/2019 à 12h05
Tuto testé aujourd'hui avec succès. Rapide, simple, efficace. Merci pour ce partage bon boulot ! :-)
Anonyme, 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é @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, 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
Anonyme, 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 <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, le 28/04/2019 à 18h07
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, le 28/04/2019 à 18h25
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, 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
Anonyme, 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@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, 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 :
<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, 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
Anonyme, 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 :)
Anonyme, 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
Anonyme, 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.
Anonyme, 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@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.
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, 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
Anonyme, le 18/07/2018 à 22h32
Merci pour ce tuto très clair et concis !
Anonyme, 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 !
Anonyme, 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.
<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, 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
Anonyme, 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.
Anonyme, 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 <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:
if (uid[:4] == [xxx, xxx, xxx, xxx]) :
#COLLER ICI L'ACTION A REALISER
</div>
En espérant vous avoir apporté suffisamment de pistes pour répondre à votre question,