Utiliser un lecteur RFID avec la Raspberry Pi.
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 :
- Une raspberry pi
- Son alimentation
- Une carte MicroSD
- Un lecteur RFID RC522
- Un ensemble de câbles, LEDs, résistances et plaques de test
- Un fer à souder et de la soudure
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.
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.
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.
É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 !
Lire l'article complet : Utiliser un lecteur RFID avec la Raspberry Pi.