Lire badge RFID

Utiliser un lecteur RFID avec la Raspberry Pi.

Mis à jour le 14 janvier 2020 - 11 Commentaires - , , ,

Ce tutoriel est la seconde partie d’un dossier consacré à la découverte de l’électronique avec la Raspberry Pi. Si vous ne l’avez pas lu, je vous conseils de consulter le premier tutoriel pour contrôler une LED avec la Raspberry Pi.

Que ce soit pour des systèmes d’identification, de gestion d’inventaire, de paiement, ou pour de la domotique, les puces RFID sont de plus en plus utilisées.

Dans ce tutoriel nous allons voir comment lire des cartes RFID avec la Raspberry Pi et un lecteur RFID RC522.

À la fin du tutoriel, vous serez capable de lire un badge RFID, vérifier si c’est bien celui attendu, et allumer une LED verte ou rouge, selon le résultat. Il ne vous restera plus qu’à adapter cet exemple de base pour le projet de votre choix !

Le matériel nécessaire

Pour réaliser ce tutoriel, vous aurez besoin du matériel suivant :

Assembler le lecteur RFID RC522

Quand vous recevez le module RFID RC522, vous pouvez constater qu’il est livré avec un jeu de 2 fois 8 pins. La première étape va donc être de souder 8 de ces pins sur le lecteur RFID. Pas de panique, souder c’est très facile !

Vous devez donc insérer les PINs dans les emplacements prévus sur la carte RFID et les souder avec votre fer.

Module RFID RC522 soudé
Vous trouverez probablement des connecteurs droits et courbés. Je vous conseil d’utiliser les courbés, plus pratiques.

Si vous n’avez jamais soudé, je vous conseil cet excellent guide pour apprendre à souder de François de chez framboise314.fr.

Connecter le lecteur RFID et les LED à la Raspberry Pi

Avant de passer à l’écriture du code qui nous permettra de lire des badges RFID et de contrôler les LEDs, nous devons en premier lieu connecter tout les composants à la Raspberry Pi.

Pour rappel, le fait de brancher et débrancher des composants doit toujours se faire Raspberry Pi éteinte.

Brancher le lecteur RFID RC522 sur la Raspberry Pi

Le premier composant que nous allons brancher est le lecteur RFID.

Pour contrôler le lecteur RFID nous allons utiliser une bibliothèque externe. Hélas, celle-ci est écrite avec les ports GPIOs directement renseignés dans le code. Cela signifie que nous ne pouvons pas les configurer différemment et que nous sommes donc contraints d’utiliser exactement les mêmes ports que ceux prévus dans la librairie.

Voici un tableau listant les ports du lecteur et le port GPIO de la Raspberry Pi auquel vous devrez le relier.

Correspondance ports GPIO/ports RC522
Reliez les ports du RC522 aux ports correspondants sur la Raspberry Pi.

Pour rappel, vous trouverez une carte des ports GPIO de la Raspberry Pi dans le premier tutoriel de cette série.

Brancher les LEDs

Après le lecteur RFID, connectons les LEDs à la Raspberry Pi.

Nous allons faire un montage très simple. Chaque LED aura son anode (la patte allongée) reliée à un port GPIO et les deux LEDs auront leur anode reliée à la même résistance, elle même reliée à un port GPIO de type Ground de la Raspberry Pi.

Ainsi, nous utilisons une seule résistance pour deux LEDs, et on limite le nombre de câbles.

Au final, une fois la carte RFID et les LEDs reliées à la Pi, vous devriez avoir un montage ressemblant à celui-ci.

À noter, vous pouvez aussi brancher la RC522 en direct sur la Raspberry Pi sans utiliser de breadbord.

Écrire le programme pour lire un badge RFID.

Nous avons un circuit fonctionnel, il ne nous reste plus qu’à activer les ports SPI de la Raspberry Pi, nécessaires pour utiliser le lecteur RFID, et écrire le programme qui permettra de lire un badge RFID.

Comme dans le tutoriel précédent, le programme sera écrit en Python. Ce tutoriel n’est pas un cours de Python, et nous ne ferons qu’expliquer de façon sommaire le programme. Si vous voulez en apprendre plus sur Python, nous avons publié un cours d’introduction à la programmation avec Python.

Activer le protocole SPI de la Raspberry Pi

Avant d’écrire le programme, activons le protocole SPI sur notre Raspberry Pi afin de pouvoir utiliser le module RFID.

Pour l’activer, il vous suffit de lancer la commande sudo raspi-config, sur votre Raspberry, puis de choisir Interfacing Options, SPI, Yes et enfin Finish.

Installer la librairie pi-rc522

Dernière pré-requis, nous allons installer la librairie Python3 « pi-rc522 » qui permet de contrôler le lecteur RC522.

Nous allons utiliser Pip3, un gestionnaire de librairie pour Python.

Il vous suffit de lancer la commande :

sudo pip3 install pi-rc522

Écrire le programme pour lire l’identifiant d’un badge RFID

Chaque badge RFID possède un identifiant unique. C’est en lisant cet identifiant et en le comparant à une liste d’identifiants autorisés que l’on peut savoir si un badge est autorisé.

Nous allons donc écrire un programme nous permettant de lire un l’identifiant unique d’un badge RFID.

Comme nous l’avions fait dans le tutoriel précédent, nous allons écrire le programme dans le dossier /home/pi/electronic (si vous ne l’avez pas déjà fait, créez le dossier).

Dans ce dossier, créez un fichier read_rfid_uid.py et mettez-y le code suivant :

#!/usr/bin/env python3.5
#-- coding: utf-8 --

import RPi.GPIO as GPIO #Importe la bibliothèque pour contrôler les GPIOs
from pirc522 import RFID
import time


GPIO.setmode(GPIO.BOARD) #Définit le mode de numérotation (Board)
GPIO.setwarnings(False) #On désactive les messages d'alerte

rc522 = RFID() #On instancie la lib

print('En attente d\'un badge (pour quitter, Ctrl + c): ') #On affiche un message demandant à l'utilisateur de passer son badge

#On va faire une boucle infinie pour lire en boucle
while True :
    rc522.wait_for_tag() #On attnd qu'une puce RFID passe à portée
    (error, tag_type) = rc522.request() #Quand une puce a été lue, on récupère ses infos

    if not error : #Si on a pas d'erreur
        (error, uid) = rc522.anticoll() #On nettoie les possibles collisions, ça arrive si plusieurs cartes passent en même temps

        if not error : #Si on a réussi à nettoyer
            print('Vous avez passé le badge avec l\'id : {}'.format(uid)) #On affiche l'identifiant unique du badge RFID
            time.sleep(1) #On attend 1 seconde pour ne pas lire le tag des centaines de fois en quelques milli-secondes

Une fois le fichier enregistré, on en autorise l’exécution avec la commande :

sudo chmod +x /home/pi/electronic/read_rfid_uid.py

Nous pouvons maintenant démarrer le programme en l’appelant avec la commande :

/home/pi/electronic/read_rfid_uid.py

À chaque fois que vous passerez un badge RFID devant le lecteur, son identifiant unique sera affiché !

Écrire un programme qui permet d’afficher si un badge est valide ou non.

Maintenant que nous pouvons lire l’identifiant unique d’un badge, il ne nous reste plus qu’à adapter le code précédent pour comparer l’identifiant lu à un identifiant écrit dans le programme.

Nous allons donc modifier un peu le programme précédent pour qu’il compare l’uid lu à celui écris dans le programme, et allumer la led rouge ou verte selon le résultat.

Copiez donc le fichier précédent, dans un nouveau fichier verify_rfid.py et modifier le pour le code ci-dessous :

Modifiez la ligne RFID_UID pour mettre l’identifiant de votre tag RFID !

#!/usr/bin/env python3.5
#-- coding: utf-8 --

import RPi.GPIO as GPIO #Importe la bibliothèque pour contrôler les GPIOs
from pirc522 import RFID
import time


GPIO.setmode(GPIO.BOARD) #Définit le mode de numérotation (Board)
GPIO.setwarnings(False) #On désactive les messages d'alerte

LED_RED = 3 #Définit le numéro du port GPIO qui alimente la led rouge
LED_GREEN = 5 #Définit le numéro du port GPIO qui alimente la led verte
RFID_UID = [21, 35, 5, 43, 57] #Définit l'UID du badge RFID

#Définit la fonction permettant d'allumer une led
def turn_led_on (led) :
    GPIO.setup(led, GPIO.OUT) #Active le contrôle du GPIO
    GPIO.output(led, GPIO.HIGH) #Allume la led

#Définit la fonction permettant d'éteindre une led
def turn_led_off (led) :
    GPIO.setup(led, GPIO.OUT) #Active le contrôle du GPIO
    GPIO.output(led, GPIO.LOW) #Eteind la led

#Définit la fonction permettant d'allumer la rouge et éteindre la verte
def turn_red_on () :
    turn_led_off(LED_GREEN) #Eteind la led verte
    turn_led_on(LED_RED) #Allume la led rouge

#Définit la fonction permettant d'allumer la verte et éteindre la rouge
def turn_green_on () :
    turn_led_off(LED_RED) #Eteind la led rouge
    turn_led_on(LED_GREEN) #Allume la led verte


rc522 = RFID() #On instancie la lib

print('En attente d\'un badge (pour quitter, Ctrl + c): ') #On affiche un message demandant à l'utilisateur de passer son badge

#On va faire une boucle infinie pour lire en boucle
while True :
    rc522.wait_for_tag() #On attnd qu'une puce RFID passe à portée
    (error, tag_type) = rc522.request() #Quand une puce a été lue, on récupère ses infos

    if not error : #Si on a pas d'erreur
        (error, uid) = rc522.anticoll() #On nettoie les possibles collisions, ça arrive si plusieurs cartes passent en même temps

        if not error : #Si on a réussi à nettoyer
            if RFID_UID == uid :
                print('Badge {} autorisé !'.format(uid))
                turn_green_on()
            else :
                print('Badge {} interdit !'.format(uid))
                turn_red_on()

            time.sleep(1) #On attend 1 seconde pour ne pas lire le tag des centaines de fois en quelques milli-secondes

Il ne vous reste plus qu’à lancer le programme et tester !

Vous pouvez ensuite adapter le code pour vos propres projets, comme créer un serrure connectée, ou encore un jukebox utilisant des tags RFID !

Pour info, vous pouvez récupérer l’ensemble du code de ce tutoriel sur le Github de Raspbian France.

Dans le prochain tutoriel, nous verrons comment contrôler un servo-moteur avec la Raspberry Pi !

4.1/5 - (28 votes)
Partager
Newsletter
Auteur :
Raspberry Pi FR
Rejoignez la communauté Raspberry Pi
Un ordinateur à 35€ déjà vendu à 10 millions d'exemplaires
ACHETEZ LA NOUVELLE RASPBERRY PI 4
Tutoriels en rapport
Installer un media-center avec OSMC sur votre Raspberry Pi ! RaspiSMS 2.0, envoyer des SMS par internet avec la Raspberry Pi Installer un serveur web sur votre Raspberry (Apache + PHP + MySQL) Bien choisir vos accessoires pour les Raspberry Pi 3 et 2 Installer un serveur Minecraft sur votre Raspberry Pi !
11 commentaires
Besoin d'aide ? Vous la trouverez plus vite sur notre forum.

  1. zeddycus dit :

    bonsoir ,

    j’ai bien aimer le tuto très clair ,

    mais je me suis allez sur le github et trouver le fichier manage , comment je peut liez la liste des badges autorisé avec le programme de vérification .

    1. Salut, pour lier les deux il faut modifier le fichier qui fait la vérification pour ne plus utiliser une constante RFID_UID qui contient le code du badge, mais à la place lire le fichier généré par le script de management et vérifier si le badge fait partie de la liste.

  2. BOURDIN Yannick dit :

    Bonjour,
    Merci pour cet excellent article.
    Je cherche à associer plusieurs badges mais je n’y parviens pas. Aucun problème pour la lecture mais je ne peut autoriser qu’un seul badge.
    Auriez-vous la solution à mon pb?

    D’avance merci

    1. Salut, je te conseils de faire un tour sur le forum où il sera plus facile pour les gens de t’aider.

  3. florent dit :

    Bonjour et bonne année 2020,

    Nouveau dans le monde RPi et arduino je cherche (et trouve en partie) mes informations sur la toile.
    Je vous remercie pour votre excellent tuto.

    Pourriez-vous m’indiquer la marche à suivre pour que tous les badges rfid lus (valides ou non), soient inscrits sur une carte SD ?
    Je cherche la traçabilité, savoir qui est venu (sur un laps de temps donné).
    Voili voulou

    1. Salut, comme nous sommes déjà dans un programme en Python je pense que le plus simple serait d’utiliser un fichier et d’y écrire sur une nouvelle ligne le numéro du badge et la date à chaque fois qu’un badge est lu.
      Pour ouvrir et écrire dans un fichier en Python sur une nouvelle ligne voici le code :

      filename = "/path/to/your/file"
      myfile = open(filename, 'a')
      myfile.write('\nYour text')
      myfile.close()

  4. Jeremy dit :

    Excellent TUTO bien expliqué hâte d’avoir la suite et des projets concret pour appliquer ces connaissances.
    Très bon travail

  5. DRISSI dit :

    Bonjour,
    Merci pour le tuto.
    Bon courage.
    Je vous demande de bien vouloir étudier la possibilité de refaire les codes de programmation en utilisant le Module GPIOZERO. Je trouve que l’utilisation de cette librairie rend le programme simplifié, clair et simple.
    dans l’attente de vous lire, veuillez recevoir mes meilleures salutations.

    1. Salut, je n’ai jamais utilisé GPIOZERO, mais je jetterai un coup d’œil pour un prochain tuto.

  6. DANIEL dit :

    Super tuto !
    De grosses possibilités à un prix abordable.
    Est-ce que cette configuration permet de piloter plusieurs RFID et surtout plusieurs serrures ?
    L’idée serait d’avoir ce lecteur RFID pour ouvrir des casiers : une carte RFID ouvrant un casier pour une petite trentaine de casiers.

    Merci pour vos lumières !

    1. Salut, je pense que tu ne peux avoir qu’un seul lecteur RFID. Après il serait possible de faire des montages un peu compliqués à base de multiplexeurs et autres, mais je pense qu’il serait alors plus simple de faire un lecteur RFID central, et contrôler plusieurs serrures, ce qui est beaucoup plus simple.
      Après 30 serrures c’est trop pour une seule raspberry en terme de nombre de GPIO disponibles. Là encore, des montages plus complexes permettent de résoudre le problème. Je pense qu’avec deux multiplexeurs 16:1, il doit être possible de piloter 32 moteurs depuis une seule raspberry, en multiplexant uniquement le fil de signal.
      Le contrôle du moteur sera le prochain tuto de la série 🙂

Partager
Inscription à la Newsletter
Inscrivez-vous à la Newsletter.
Vous avez aimé cet article ?
Inscrivez-vous et restez informé !