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.
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.
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 ?" :
"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
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
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.