Voici le programme, sans couleurs c’est barbare, mais copié dans un éditeur ce sera + lisible 😉
( Il est disponible dans “Fichiers techniques” )
#!/usr/bin/python
from urllib import urlopen
import RPi.GPIO as gpio
import time
import os
# on utilise le mode BMC ca veut dire qu on utilise le numero GPIO plutot que sa position physique sur la carte
gpio.setmode(gpio.BCM)
os.system(‘clear’) # on utilise la librairie os pour effacer l’ecran
# on definit les numero des gpio
segmentA = 23
segmentB = 22
segmentC = 27
segmentD = 18
segmentE = 17
segmentF = 6
segmentG = 12
afficheur1 = 19 # le + a gauche..
afficheur2 = 16
afficheur3 = 26
afficheur4 = 20
buzzer = 24
champignon = 25 # bouton qui affiche l heure actuelle et arrete la sonnerie
shutdown = 21 # bouton qui eteind la raspberry (et rafraichit heure de l alarme du site si maintien enfoncer?)
rot_select = 13 # ajoute + 5min d alarme manuelle (et si le bouton rot_enfonce a ete presser: + 1h et si re-push: + 1 min sans ajouter 1h au passage de 59 a 00)
rot_enfonce = 5 # bouton qui affiche l heure prevue de l alarme
# on definit tous les ports comme etant des sorties output (ou entree input)
gpio.setup(afficheur1, gpio.OUT)
gpio.setup(afficheur2, gpio.OUT)
gpio.setup(afficheur3, gpio.OUT)
gpio.setup(afficheur4, gpio.OUT)
gpio.setup(segmentA, gpio.OUT)
gpio.setup(segmentB, gpio.OUT)
gpio.setup(segmentC, gpio.OUT)
gpio.setup(segmentD, gpio.OUT)
gpio.setup(segmentE, gpio.OUT)
gpio.setup(segmentF, gpio.OUT)
gpio.setup(segmentG, gpio.OUT)
gpio.setup(buzzer, gpio.OUT)
gpio.setup(champignon, gpio.IN)
gpio.setup(shutdown, gpio.IN)
gpio.setup(rot_select, gpio.IN)
gpio.setup(rot_enfonce, gpio.IN)
def affiche(nb, afficheur): # fonction affichage (nb: chiffre ou lettre a afficher. afficheur: selection du digit 1 a 4)
if afficheur == 1: # choix afficheur
gpio.output(afficheur1, gpio.HIGH)
else:
gpio.output(afficheur1, gpio.LOW)
if afficheur == 2:
gpio.output(afficheur2, gpio.HIGH)
else:
gpio.output(afficheur2, gpio.LOW)
if afficheur == 3:
gpio.output(afficheur3, gpio.HIGH)
else:
gpio.output(afficheur3, gpio.LOW)
if afficheur == 4:
gpio.output(afficheur4, gpio.HIGH)
else:
gpio.output(afficheur4, gpio.LOW)
if nb == ‘9’: # choix des segments a allumer (pour les chiffres et les lettres)
gpio.output(segmentA, gpio.HIGH)
gpio.output(segmentB, gpio.HIGH)
gpio.output(segmentC, gpio.HIGH)
gpio.output(segmentD, gpio.HIGH)
gpio.output(segmentE, gpio.LOW)
gpio.output(segmentF, gpio.HIGH)
gpio.output(segmentG, gpio.HIGH)
if nb == ‘8’:
gpio.output(segmentA, gpio.HIGH)
gpio.output(segmentB, gpio.HIGH)
gpio.output(segmentC, gpio.HIGH)
gpio.output(segmentD, gpio.HIGH)
gpio.output(segmentE, gpio.HIGH)
gpio.output(segmentF, gpio.HIGH)
gpio.output(segmentG, gpio.HIGH)
if nb == ‘7’:
gpio.output(segmentA, gpio.HIGH)
gpio.output(segmentB, gpio.HIGH)
gpio.output(segmentC, gpio.HIGH)
gpio.output(segmentD, gpio.LOW)
gpio.output(segmentE, gpio.LOW)
gpio.output(segmentF, gpio.LOW)
gpio.output(segmentG, gpio.LOW)
if nb == ‘6’:
gpio.output(segmentA, gpio.HIGH)
gpio.output(segmentB, gpio.LOW)
gpio.output(segmentC, gpio.HIGH)
gpio.output(segmentD, gpio.HIGH)
gpio.output(segmentE, gpio.HIGH)
gpio.output(segmentF, gpio.HIGH)
gpio.output(segmentG, gpio.HIGH)
if nb == ‘5’:
gpio.output(segmentA, gpio.HIGH)
gpio.output(segmentB, gpio.LOW)
gpio.output(segmentC, gpio.HIGH)
gpio.output(segmentD, gpio.HIGH)
gpio.output(segmentE, gpio.LOW)
gpio.output(segmentF, gpio.HIGH)
gpio.output(segmentG, gpio.HIGH)
if nb == ‘4’:
gpio.output(segmentA, gpio.LOW)
gpio.output(segmentB, gpio.HIGH)
gpio.output(segmentC, gpio.HIGH)
gpio.output(segmentD, gpio.LOW)
gpio.output(segmentE, gpio.LOW)
gpio.output(segmentF, gpio.HIGH)
gpio.output(segmentG, gpio.HIGH)
if nb == ‘3’:
gpio.output(segmentA, gpio.HIGH)
gpio.output(segmentB, gpio.HIGH)
gpio.output(segmentC, gpio.HIGH)
gpio.output(segmentD, gpio.HIGH)
gpio.output(segmentE, gpio.LOW)
gpio.output(segmentF, gpio.LOW)
gpio.output(segmentG, gpio.HIGH)
if nb == ‘2’:
gpio.output(segmentA, gpio.HIGH)
gpio.output(segmentB, gpio.HIGH)
gpio.output(segmentC, gpio.LOW)
gpio.output(segmentD, gpio.HIGH)
gpio.output(segmentE, gpio.HIGH)
gpio.output(segmentF, gpio.LOW)
gpio.output(segmentG, gpio.HIGH)
if nb == ‘1’:
gpio.output(segmentA, gpio.LOW)
gpio.output(segmentB, gpio.HIGH)
gpio.output(segmentC, gpio.HIGH)
gpio.output(segmentD, gpio.LOW)
gpio.output(segmentE, gpio.LOW)
gpio.output(segmentF, gpio.LOW)
gpio.output(segmentG, gpio.LOW)
if nb == ‘0’:
gpio.output(segmentA, gpio.HIGH)
gpio.output(segmentB, gpio.HIGH)
gpio.output(segmentC, gpio.HIGH)
gpio.output(segmentD, gpio.HIGH)
gpio.output(segmentE, gpio.HIGH)
gpio.output(segmentF, gpio.HIGH)
gpio.output(segmentG, gpio.LOW)
if nb == ‘s’: # s de stop
gpio.output(segmentA, gpio.HIGH)
gpio.output(segmentB, gpio.LOW)
gpio.output(segmentC, gpio.HIGH)
gpio.output(segmentD, gpio.HIGH)
gpio.output(segmentE, gpio.LOW)
gpio.output(segmentF, gpio.HIGH)
gpio.output(segmentG, gpio.HIGH)
if nb == ‘t’: # t de stop
gpio.output(segmentA, gpio.LOW)
gpio.output(segmentB, gpio.LOW)
gpio.output(segmentC, gpio.LOW)
gpio.output(segmentD, gpio.HIGH)
gpio.output(segmentE, gpio.HIGH)
gpio.output(segmentF, gpio.HIGH)
gpio.output(segmentG, gpio.HIGH)
if nb == ‘o’: # o de stop
gpio.output(segmentA, gpio.LOW)
gpio.output(segmentB, gpio.LOW)
gpio.output(segmentC, gpio.HIGH)
gpio.output(segmentD, gpio.HIGH)
gpio.output(segmentE, gpio.HIGH)
gpio.output(segmentF, gpio.LOW)
gpio.output(segmentG, gpio.HIGH)
if nb == ‘p’: # p de pb01
gpio.output(segmentA, gpio.HIGH)
gpio.output(segmentB, gpio.HIGH)
gpio.output(segmentC, gpio.LOW)
gpio.output(segmentD, gpio.LOW)
gpio.output(segmentE, gpio.HIGH)
gpio.output(segmentF, gpio.HIGH)
gpio.output(segmentG, gpio.HIGH)
if nb == ‘b’: # b de pb01
gpio.output(segmentA, gpio.LOW)
gpio.output(segmentB, gpio.LOW)
gpio.output(segmentC, gpio.HIGH)
gpio.output(segmentD, gpio.HIGH)
gpio.output(segmentE, gpio.HIGH)
gpio.output(segmentF, gpio.HIGH)
gpio.output(segmentG, gpio.HIGH)
if nb == ‘r’: # r de reso
gpio.output(segmentA, gpio.LOW)
gpio.output(segmentB, gpio.LOW)
gpio.output(segmentC, gpio.LOW)
gpio.output(segmentD, gpio.LOW)
gpio.output(segmentE, gpio.HIGH)
gpio.output(segmentF, gpio.LOW)
gpio.output(segmentG, gpio.HIGH)
if nb == ‘e’: # e de reso
gpio.output(segmentA, gpio.HIGH)
gpio.output(segmentB, gpio.LOW)
gpio.output(segmentC, gpio.LOW)
gpio.output(segmentD, gpio.HIGH)
gpio.output(segmentE, gpio.HIGH)
gpio.output(segmentF, gpio.HIGH)
gpio.output(segmentG, gpio.HIGH)
if nb == ‘y’: # y de type et de bye
gpio.output(segmentA, gpio.LOW)
gpio.output(segmentB, gpio.HIGH)
gpio.output(segmentC, gpio.HIGH)
gpio.output(segmentD, gpio.HIGH)
gpio.output(segmentE, gpio.LOW)
gpio.output(segmentF, gpio.HIGH)
gpio.output(segmentG, gpio.HIGH)
# fin de la fonction affiche()
def efface(): # fonction qui efface l affichage (a executer apres la fonction affiche)
gpio.output(afficheur1, gpio.LOW)
gpio.output(afficheur2, gpio.LOW)
gpio.output(afficheur3, gpio.LOW)
gpio.output(afficheur4, gpio.LOW)
gpio.output(segmentA, gpio.LOW)
gpio.output(segmentB, gpio.LOW)
gpio.output(segmentC, gpio.LOW)
gpio.output(segmentD, gpio.LOW)
gpio.output(segmentE, gpio.LOW)
gpio.output(segmentF, gpio.LOW)
gpio.output(segmentG, gpio.LOW)
# fin de la fonction efface()
# on recupere l heure d alarme prevue sur rasp_reveil.php (soit HHMM, stop ou reso)
# ensuite dans la boucle infinie on fera ce check que a 18:00
html = urlopen(“http://www.site.com/page.php”) # ici on recupere tout ce qu il y a entre les balises et (a adapter a chaque site..)
reponse = html.read() # met le code HTML complet dans la variable $reponse
#on affiche ce qui est entre les balises html:
i = 0
i = reponse.find(‘html’, i)
#trouve le prochain ‘>’ apres ‘html’
i = reponse.find(‘>’, i+1)
#trouve le premier ”, i+1)
#trouve le premier ‘ Arret de la sonnerie..”)
enfonce_tmp = 0
time.sleep(0.1)
# puis on fait une boucle de 50
for i in range(50): # boucle qui repete la sonnerie (50x ce block qui dure 9sec donc 7.5 minutes
gpio.output(buzzer, gpio.LOW) # on coupe le buzzer et on attend 7 sec
if enfonce_tmp != 0: # si $enfonce_tmp = 0 on laisse le buzzer couper
for i in range(23): # boucle de 23 pour le sleep 23×0.3sec donc 6.9sec
if(gpio.input(champignon) == False): # check bouton champignon pour arreter la sonnerie
print(“Vous appuyez sur le champignon -> Arret de la sonnerie..”)
enfonce_tmp = 0
time.sleep(0.3)
if enfonce_tmp != 0: # si $enfonce_tmp = 0 on laisse le buzzer couper
gpio.output(buzzer, gpio.HIGH) # on lance le buzzer durant 2sec
for i in range(7): # boucle de 7 pour le sleep 7×0.3sec donc 2.1sec
if(gpio.input(champignon) == False): # check bouton champignon pour arreter la sonnerie
print(“Vous appuyez sur le champignon -> Arret de la sonnerie..”)
enfonce_tmp = 0
time.sleep(0.3)
if enfonce_tmp == 0:
break # si le champignon a ete appuyer on sort de la boucle 50
# fin de la boucle for 50x
gpio.output(buzzer, gpio.LOW) # on coupe le buzzer car suivant ou on est sorti il est tjs cozant
enfonce_tmp = 0
variable = “stop” # on desactive l alarme definitivement
# fin de la sonnerie
# check bouton shutdown
if(gpio.input(shutdown) == False):
print(‘Vous appuyez sur le bouton shutdown et rafraichir’)
time.sleep(1.4) # on attend un moment et on recheck la position du bouton: si lever -> rafraich et si tjs enfoncer -> shutdown
if(gpio.input(shutdown) == False): # tjs appuyer -> shutdown
print(“Le bouton shutdwon est maintenu -> goodbye!”)
#ci-dessous: on affiche “bye”
rebour = 200 # definit le temps que l affichage s allume
while rebour >= 0:
affiche(“b”,1) # envoie le chiffre ou la lettre (p b s t o) a dessiner et le numero de l afficheur
time.sleep(0.005)
affiche(“y”,2)
time.sleep(0.005)
affiche(“e”,3)
time.sleep(0.005)
rebour = rebour – 1
# fin boucle quand retour on rafraichit l heure de l alarme
print(“Le bouton shutdwon n’est pas maintenu -> on rafraichit l’heure de l’alarme”)
# on recupere l heure d alarme prevue sur rasp_reveil.php (soit HHMM, stop ou reso)
html = urlopen(“http://www.site.com/page.php”) # ici on recupere tout ce qu il y a entre les balises et (a adapter a chaque site..)
reponse = html.read() # met le code HTML complet dans la variable $reponse
#on affiche ce qui est entre les balises html:
i = 0
i = reponse.find(‘html’, i)
#trouve le prochain ‘>’ apres ‘html’
i = reponse.find(‘>’, i+1)
#trouve le premier ‘= 0:
affiche(heure_actuelle[0],1) # envoie le chiffre ou la lettre (p b s t o) a dessiner et le numero de l afficheur
time.sleep(0.005)
affiche(heure_actuelle[1],2)
time.sleep(0.005)
affiche(heure_actuelle[2],3)
time.sleep(0.005)
affiche(heure_actuelle[3],4)
time.sleep(0.005)
rebour = rebour – 1
# fin boucle quand retour Ajout de +5 min a l’heure d’alarme..”)
rebour = 20 # definit le temps que l affichage s allume
if variable1 == “s” or variable1 == “t” or variable1 == “r”: # c est stop ou type ou reso: on remet 00:00 (en variable type decimal)
print(“L’heure etait sur stop, type ou reso -> on la remet a 00:00”)
if enfonce_tmp == 0: # on met 00:00 car on fait heure alarme +5min
variable = ‘0000’
variable1 = ‘0’
variable2 = ‘0’
variable3 = ‘0’
variable4 = ‘0’
else: # enfonce_tmp == 1: # on met 23:55 car on fait heure alarme -5min
variable = ‘2355’
variable1 = ‘2’
variable2 = ‘3’
variable3 = ‘5’
variable4 = ‘5’
else:
minute = (int(variable1)*600)+(int(variable2)*60)+(int(variable3)*10)+(int(variable4)*1) # on transforme heure alarm en min
if enfonce_tmp == 0: # on ajoute ou enleve 5 min en fonction de la position de $enfonce_tmp definit par le bouton rot_enfonce
minute = (int(minute)+5)
else:
minute = (int(minute)-5)
if int(minute) > 1439 or int(minute) 9:
variable3 = minute[0]
variable4 = minute[1]
else:
minute = “0”+(minute)
variable3 = “0”
variable4 = minute[1]
variable = variable1 + variable2 + variable3 + variable4 # retour en HHMM
while rebour >= 0:
affiche(variable1,1) # on envoie la nouvelle heure d alarme (HHMM) sur l afficheur
time.sleep(0.005)
affiche(variable2,2)
time.sleep(0.005)
affiche(variable3,3)
time.sleep(0.005)
affiche(variable4,4)
time.sleep(0.005)
rebour = rebour – 1
# fin boucle quand retour Affiche l’heure de l’alarme, et inverse le sens de rotation du bouton rot_select..”)
if enfonce_tmp == 0:
enfonce_tmp = 1 # heure alarme +5min
else:
enfonce_tmp = 0 # heure alarme -5min
rebour = 200 # definit le temps que l affichage s allume
while rebour >= 0:
affiche(variable1,1) # on envoie l heure de l alarme (HHMM) sur l afficheur
time.sleep(0.005)
affiche(variable2,2)
time.sleep(0.005)
affiche(variable3,3)
time.sleep(0.005)
affiche(variable4,4)
time.sleep(0.005)
rebour = rebour – 1
# fin boucle quand retour < 0
efface() # on reset l affichage
# fin bouton rot_enfonce
# une petite pause entre chaque boucle, afin de reduire la charge sur le CPU
time.sleep(0.06)
#retour debut de la boucle
http://ouiaremakers.com/wp-includes/images/media/text.png