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

Voir le paragraphe précédent sur l'interface RS232, pour la configuration du système d'explotation et la vérification du fonctionnement de l'interface.

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.