Le lecteur RFID

Branchement du lecteur RFID sur le port série

Branchez le module Grove lecteur RFID sur le port "RPISER" du Grove PI+ (ou du Grove Pi0) qui relaye (avec une tension de 5V) l'interface Série (avec une tension de 3,3V) présente sur le connecteur GPIO du Raspberry PI.

Configuration du port série

Vérification préalable

Pour utiliser l'interface série, il faut que le Kernel du Système d'Exploitation Linux du Raspberry PI soit correctement paramètré. Si la configuration est déjà effectuée correctement, on voit alors dans le répertoire "/dev" le fichier d'entrée/sortie "ttyS0". La commande suivante permet de vérifier la présence du fichier d'entrée/sortie :

ls -la /dev/ttyS0

Elle doit alors afficher (la date et l'heure pouvant être différentes), avant le prompt du bash :

crw-rw---- 1 root dialout 4, 64 Apr 24 15:26 /dev/ttyS0

Si ce n'est pas le cas, il faut effectuer la configuration.

Configuration

Passez la commande suivante :

sudo raspi-config

Sélectionnez alors l'option n°3 "Interface Options" et ensuite sélectionnez l'option n°6 "Enable/disable shell messages on the serial connections" :

Répondez "No" à la question "Would you like a login shell to be accessible over serial?", car l'interface serie doit être libre pour l'utilisation du capteur RFID. On ne peut donc pas y activer un shell de connexion. Puis répondez "Yes" à la question "Would you like the serial port hardware to be enabled?", afin d'activer l'interface série du Raspberry PI.

L'écran suivant vous récapitule juste vos choix. Répondez "OK" afin de revenir au menu d'accueil puis sélectionnez sur l'écran d'accueil "Finish" pour sortir du programme :

Le programme doit alors vous proposer de redémarrer le système (Si ce n'était pas le cas, vous pourrez toujours optenir le redémarrage du système via la commande sudo reboot). Vous répondez "yes" à la question "Would you like to reboot now ?" :

Vérification de fonctionnement

Installation de minicom

"minicom" est un programme permettant de visualiser ce qui est reçu par une interface série. Il s'installe via la commande suivante :

sudo apt-get install minicom

Test de la communication série

Passez la commande suivante, pour lancer minicom sur l'interface série /dev/ttyS0 avec une vitesse de fonctionnement de 9600 (la vitesse réclamée par le lecteur RFID).

minicom -D /dev/ttyS0 -b 9600

Programmation en python

Vous trouverez si dessous un exemple de programme qui se connecte au port série /dev/ttyS0 et attend au plus 10 secondes avant d'afficher le numéro du badge présenté.

# -*- coding:Utf-8 -*-
import serial

ser = serial.Serial(
        port='/dev/ttyS0',
        baudrate = 9600,
        parity=serial.PARITY_NONE,
        stopbits=serial.STOPBITS_ONE,
        bytesize=serial.EIGHTBITS,
        timeout=0.01
)

print("Badgez votre carte")
i=0
buffer=b''
octet=ser.read()
while (i<1000) & (len(buffer)<14) :
    if octet != b'' :
        buffer+=octet
    else :
        i=i+1
    octet=ser.read()
if buffer != b'':
    id=str(buffer[1:-1],"UTF-8")
    print ("Badge id =",id)
    print ("Trame reçu =",buffer)
else:
    print ("temps écoulé")
	

Remarques :

La lecture d'un badge envoie une trame de 14 octets commençant par un marqueur de début sur 1 octet (0x02) suivi de 12 caractères correspondant à l'identifiant du badge en hexadécimal et se terminant par un marqueur de fin sur 1 octet (0x03).

Le paramètre timeout de la fonction serial.Serial() sert à indiquer le temps d'attente maximum d'un caractère dans la méthode read() de l'objet retourné par la fonction. Puisque le temps d'attente de lecture d'un caractère est fixé ici à 10ms, il faut appeler 1000 fois la méthode read() sans succès pour que 10 secondes se soient écoulées.