#Importation des dependances import binascii import sys import Adafruit_PN532 as PN532 import time import requests import hashlib import RPi.GPIO as GPIO import time # Configuration des pins de sorties pour la Raspberry Pi (numero GPIO): SS = 8 MOSI = 25 MISO = 24 SCK = 23 channel_buzzer = 18 channel_relais = 14 #Parametres pour accéder à l'API PUUCE (donnant la correspondance pseudo Centrale/UID) apikey="XXXXXXXXXXX" #APIKEY DE LECTURE url = "http://puuce.ginfo/access" #ADRESSE DES REQUETES uid_porte="uid1porteginfo"; #ID DE LA PORTE #Initialisation des sorties RSPBRYPI GPIO.cleanup() GPIO.setmode(GPIO.BCM) GPIO.setup(channel_relais,GPIO.OUT) GPIO.output(channel_relais,GPIO.HIGH) #Définition de la fonctionpour le buzz du lecteur def buzz(frequency, duration, channel): GPIO.setmode(GPIO.BCM) GPIO.setup(channel, GPIO.OUT) p = GPIO.PWM(channel, frequency) p.start(5) #ici, rapport_cyclique vaut entre 0.0 et 100.0 time.sleep(duration) p.stop() #Définition de la fonction pour ouvrir le relais def openrelais(channel): GPIO.output(channel,GPIO.LOW) time.sleep(5) GPIO.output(channel,GPIO.HIGH) # Initialisation du lecteur pn532 = PN532.PN532(cs=SS, sclk=SCK, mosi=MOSI, miso=MISO) pn532.begin() # Récupération du firmware PN532 et affichage ic, ver, rev, support = pn532.get_firmware_version() print('Found PN532 with firmware version: {0}.{1}'.format(ver, rev)) #Configuration du lecteur pn532.SAM_configuration() #Boucle principale de lecture print('En attente d\'une carte...') while True: # Vérification si un carte est là uid = pn532.read_passive_target() # On recommence la boucle s'il n'y a pas de carte if uid is None: continue #Sinon, on a une carte et donc UID et on continue #On buzz donc la lecture buzz(1000,0.1, channel_buzzer); time.sleep(0.1); buzz(1000,0.1, channel_buzzer); time.sleep(0.1); buzz(1000,0.1, channel_buzzer); #On récupère l'UID sous forme hexa uid_encrypted = format(binascii.hexlify(uid)); #On prépare la requête POST pour l'API payload={'apikey': apikey, 'uid_personne': uid_encrypted, 'uid_porte': uid_porte} r = requests.post(url, data=payload) #Si la requête POST est un succès if(r.status_code == 200): reponse = r.text[:300] resultat = reponse.split("_") #Si la personne est autorisée on ouvre la porte if(resultat[1] == "1"): print("Acces autorise"); buzz(1500,1, channel_buzzer); openrelais(channel_relais); #Sinon on ouvre pas la porte else: print("Acces refuse"); buzz(440,1, channel_buzzer); print(reponse) #Dans le cas ou la réponse n'est pas 200, on n'ouvre pas la porte else: print("pas de reponse serveur"); print(r.status_code); print("Acces refuse"); buzz(440,1, channel_buzzer); #A la fin : reinitialsation uid puis pause d lecture uid_encrypted = "" time.sleep(3) # pause 3 secondes