Bienvenue sur la page du lecteur NFC !

Un lecteur NFC qu'est ce que c'est ?

Le NFC, ou Near Field Communication, est une technologie permettant d’échanger des données entre un lecteur et n’importe quel terminal mobile compatible ou entre les terminaux eux-mêmes. C’est la technologie qu’utilise votre carte bancaire pour le paiement sans contact, ou votre carte de transport. L’avantage de cette technologie est qu’en principe, aucune application n’est requise. Il suffit de rapprocher les deux supports. Attention, il ne faut pas que ces derniers soient trop éloignés l’un de l’autre : une dizaine de centimètres maximum !

Le matériel à avoir

Pour ce petit projet vous aurez besoins d'un RPI de n'importe qu'ellle version, pour ma part sa sera un RPI model B donc les schémas des ports GPIO y seront liéé, si vous avez un RPI d'une autre version il faudra que vous alliez rechercher les schémas des GPIO qui correspondent.

Il vous faudra aussi un lecteur NFC que vous pourrait trouver en clickant sur les mots " lecteur NFC " juste avant. Dans ce kit il y a un lecteur NFC avec une carte et un badge avec un tag qui leurs est admit par défault mais que vous pourrait changer.

Les ports GPIO qu'est ce que c'est ?

Les ports GPIO sont des ports physiques se présentant généralement sous forme de picots métalliques carrés permettant de transmettre un signal électrique. Un port GPIO transmet un signal numérique binaire (0 ou 1) ou analogique (variation d'une tension électrique).

Ce sont ces ports qui nous permettront de récupérer les informations que le lecteur NFC nous envoi.

Premiers branchements

Chaque broche du lecteur NFC est nommée de cette manière:

Board pin name Board pin Physical RPI pin RPI pin name Beaglebone Black pin name
SDA 1 24 GPIO8, CE8 P9_17, SPIO_CSO
SCK 2 23 GPIO11, SCKL P9_22, SPIO_SCLK
MOSI 3 19 GPIO10, MOSI P9_18, SPIO_D1
MISO 4 21 GPIO19, MISO P9_21, SPIO_DO
IRQ 5 18 GPIO24 P9_15, GPIO_48
GND 6 20 GROUND GROUND
RST 7 22 GPIO25 P9_23, GPIO_49
3.3V 8 17 3V3 VDD_3V3

Le port GPIO de votre RPI (ici un modèle B)contient le brochage suivant :

Sur le schéma ci-dessus vous avez les noms des pins du GPIO de votre RPI, ils vous suffit de regarder le noms des pins qui correspond au bon port sur le lecteur nfc avec la colonnne " RPI pin name " puis a les relier ensemble parun fil ou une soudure.

Attention pour ne pas vous tromper de sens avec les pins du GPIO il y a un détompeur carré sur le schéma et sur le GPIO de votre RPI.

Cela vous donnera quelque chose dans le genre. Mais attention j'utilise une carte Pyrack pour avoir plusieur GPIO sur un RPI, mais ce n'est pas obligé, cela sert même a rien pour ce projet car nous brancherons que notre lecteur NFC sur le GPIO de notre RPI.

Le programme

Nous allons faire le programme en python, il sera assez court et assez simple a comprendre. Créez un programme et allez sur nano, si vous ne savez pas faire sa allez regarder la page " Les bases " dans la catégorie RPI. Je vous laisserez également étudier les bases de python dans la page " Python " si vous ne connaissez pas les bases de ce langage.

Commençons par importer les bibliothèques dont nous aurons besoin.

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

Ensuite nous allons préciser le mode de GPIO que l'on veut mettre sur le RPI, car il existe deux modes le " BOARD " et le " BCM ". Ensuite nous désactivons le messages d'alerte du GPIO qui est activé de base sur le RPI.

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
                

Nous allons ensuite mettre des fonctions dans des variables avec un autre nom plus simple a utiliser.

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()
util = rc522.util()
                

Maintenant commençons le corps du programme avec la boucle " while " avec condition " true " pour que la boucle soit infinie.Puis nous mettons la requeête permettant de regarder si un badge est présent ou pas .

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()
util = rc522.util()

print ("attente passage badge employe")
while True:
        (error, tag_type) = rc522.request()
                

Nous y ajoutons ensuite la condition de si il n'y a pas d'erreur lire le tag de la carte.

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()
util = rc522.util()
print ("attente passage badge employe")
while True:
        (error, tag_type) = rc522.request()
        if not error:
            (error, uid) = rc522.anticoll()
                

Par la suite nous remettrons une condition que si il n'y a pas d'erreur alors afficher le tag reçus avec le DEBUG.

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()
util = rc522.util()

print ("attente passage badge employe")
while True:
        (error, tag_type) = rc522.request()
        if not error:
            (error, uid) = rc522.anticoll()
            if not error:
                        print("UID: " + str(uid))
                        E_UID=str(uid).replace(" ", "")
                        print("DEBUG E_UID:",E_UID)
                

Nous avons finit le programme permettant d'utiliser un lecteur NFC avec son RPI, il ne vous reste plus qu'a le tester en passant un tag. Mais ils n'est pas vraiment complet il manquerait une condition qui aretterait le programme comme par example au bout de 20 minutes aretter le programmes etc... Laissez libre cour a votre imaginations.