i2c.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #!/usr/bin/python
  2. import smbus
  3. import time
  4. import subprocess
  5. # Fonction d'envois d'un texte
  6. def send(text):
  7. try :
  8. for ch in text:
  9. bus.write_byte(address, ord(ch))
  10. bus.write_byte(address, ord("$"))
  11. except IOError:
  12. print "Erreur d'ecriture..."
  13. # Fonction de lecture d'un texte
  14. def read():
  15. reading = True
  16. reponse = ""
  17. # tant qu'on est en lecture la boucle tourne
  18. while reading:
  19. try :
  20. # on lit les caracteres de reponse un par un
  21. char = chr(bus.read_byte(address))
  22. # si le caractere $ est lu, c'est la fin de la reponse
  23. if char == '$':
  24. reading = False
  25. break;
  26. # sinon on continue a lire la reponse
  27. else:
  28. reponse += char;
  29. except IOError:
  30. reponse = ""
  31. # Une fois la reponse lu on l'affiche
  32. return reponse
  33. # Remplacer 0 par 1 si nouveau Raspberry
  34. bus = smbus.SMBus(1)
  35. # Adressse I2C de communication 0x12
  36. address = 0x12
  37. while 1:
  38. time.sleep(1)
  39. # envois de la commande ping (demande de badge a verifier) et recuperation du resultat
  40. send("ping")
  41. response = read()
  42. # Traitement du resultat, si un badge est en attente
  43. if response != '%' and response != '':
  44. print "check badge..."+response
  45. # on envois le badge a un script php de yana qui check en base de donnee si il est autorise
  46. proc = subprocess.Popen(["php domodoor.plugin.php"+" "+response], shell=True, stdout=subprocess.PIPE)
  47. script_response = proc.stdout.read()
  48. # on renvois la reponse de php direct a l'arduino 1: ouvre la porte, 0: ne fait rien
  49. send(script_response)