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 !
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 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.
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.
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.