code esteban
This commit is contained in:
32
composants/byPanda/board2main.py
Normal file
32
composants/byPanda/board2main.py
Normal file
@@ -0,0 +1,32 @@
|
||||
import time
|
||||
from thermostat import SystemeThermostat
|
||||
from lumieres import SystemeLumieres
|
||||
from volets import SystemeVolets
|
||||
from etatsysteme import EtatSysteme
|
||||
|
||||
thermostat = SystemeThermostat()
|
||||
lumieres = SystemeLumieres()
|
||||
volets = SystemeVolets()
|
||||
etat = EtatSysteme()
|
||||
|
||||
try:
|
||||
while True:
|
||||
erreurThermostat = thermostat.mettreAJour()
|
||||
erreurLumieres = lumieres.mettreAJour()
|
||||
erreurVolets = volets.mettreAJour()
|
||||
|
||||
if erreurThermostat or erreurLumieres or erreurVolets:
|
||||
etat.signalerProbleme()
|
||||
else:
|
||||
etat.signalerOk()
|
||||
|
||||
time.sleep(0.2)
|
||||
|
||||
except KeyboardInterrupt:
|
||||
print("\nArrêt du programme.")
|
||||
|
||||
finally:
|
||||
thermostat.cleanup()
|
||||
lumieres.cleanup()
|
||||
volets.cleanup()
|
||||
etat.cleanup()
|
||||
25
composants/byPanda/etatsysteme.py
Normal file
25
composants/byPanda/etatsysteme.py
Normal file
@@ -0,0 +1,25 @@
|
||||
import RPi.GPIO as GPIO
|
||||
|
||||
GPIO.setmode(GPIO.BOARD)
|
||||
GPIO.setwarnings(False)
|
||||
|
||||
|
||||
class EtatSysteme:
|
||||
def __init__(self):
|
||||
self.pinLedRouge = 35
|
||||
self.pinLedVerte = 37
|
||||
|
||||
GPIO.setup(self.pinLedRouge, GPIO.OUT, initial=GPIO.LOW)
|
||||
GPIO.setup(self.pinLedVerte, GPIO.OUT, initial=GPIO.LOW)
|
||||
|
||||
def signalerOk(self):
|
||||
GPIO.output(self.pinLedVerte, GPIO.HIGH)
|
||||
GPIO.output(self.pinLedRouge, GPIO.LOW)
|
||||
|
||||
def signalerProbleme(self):
|
||||
GPIO.output(self.pinLedVerte, GPIO.LOW)
|
||||
GPIO.output(self.pinLedRouge, GPIO.HIGH)
|
||||
|
||||
def cleanup(self):
|
||||
GPIO.output(self.pinLedRouge, GPIO.LOW)
|
||||
GPIO.output(self.pinLedVerte, GPIO.LOW)
|
||||
87
composants/byPanda/lumieres.py
Normal file
87
composants/byPanda/lumieres.py
Normal file
@@ -0,0 +1,87 @@
|
||||
import time
|
||||
import RPi.GPIO as GPIO
|
||||
|
||||
GPIO.setmode(GPIO.BOARD)
|
||||
GPIO.setwarnings(False)
|
||||
|
||||
|
||||
class SystemeLumieres:
|
||||
def __init__(self):
|
||||
# la pin de la 2e photorésistance manque sur le schéma
|
||||
# donc ici on met une valeur temporaire
|
||||
# elle apparaîtra peut-être un jour, comme la motivation en fin de projet
|
||||
self.pinPhotoInterieure = 29
|
||||
|
||||
self.led1 = 21
|
||||
self.led2 = 31
|
||||
self.led3 = 33
|
||||
|
||||
self.boutonManuel = 36
|
||||
|
||||
self.modeManuel = False
|
||||
self.lumieresAllumees = False
|
||||
|
||||
GPIO.setup(self.pinPhotoInterieure, GPIO.IN)
|
||||
GPIO.setup(self.led1, GPIO.OUT, initial=GPIO.LOW)
|
||||
GPIO.setup(self.led2, GPIO.OUT, initial=GPIO.LOW)
|
||||
GPIO.setup(self.led3, GPIO.OUT, initial=GPIO.LOW)
|
||||
|
||||
GPIO.setup(self.boutonManuel, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
|
||||
|
||||
self.derniereLectureBouton = 0
|
||||
self.delaiLectureBouton = 0.25
|
||||
|
||||
def lireLuminositeInterieure(self):
|
||||
return GPIO.input(self.pinPhotoInterieure)
|
||||
|
||||
def allumerLumieres(self):
|
||||
GPIO.output(self.led1, GPIO.HIGH)
|
||||
GPIO.output(self.led2, GPIO.HIGH)
|
||||
GPIO.output(self.led3, GPIO.HIGH)
|
||||
self.lumieresAllumees = True
|
||||
|
||||
def eteindreLumieres(self):
|
||||
GPIO.output(self.led1, GPIO.LOW)
|
||||
GPIO.output(self.led2, GPIO.LOW)
|
||||
GPIO.output(self.led3, GPIO.LOW)
|
||||
self.lumieresAllumees = False
|
||||
|
||||
def gererBoutonManuel(self):
|
||||
maintenant = time.time()
|
||||
|
||||
if maintenant - self.derniereLectureBouton < self.delaiLectureBouton:
|
||||
return
|
||||
|
||||
if GPIO.input(self.boutonManuel):
|
||||
self.modeManuel = not self.modeManuel
|
||||
self.derniereLectureBouton = maintenant
|
||||
|
||||
if self.modeManuel:
|
||||
self.lumieresAllumees = not self.lumieresAllumees
|
||||
|
||||
if self.lumieresAllumees:
|
||||
self.allumerLumieres()
|
||||
else:
|
||||
self.eteindreLumieres()
|
||||
else:
|
||||
print("Lumières : retour en auto")
|
||||
|
||||
def mettreAJour(self):
|
||||
self.gererBoutonManuel()
|
||||
|
||||
if self.modeManuel:
|
||||
return False
|
||||
|
||||
luminosite = self.lireLuminositeInterieure()
|
||||
|
||||
if luminosite == 0:
|
||||
self.allumerLumieres()
|
||||
print("Lumières : on allume")
|
||||
else:
|
||||
self.eteindreLumieres()
|
||||
print("Lumières : on coupe")
|
||||
|
||||
return False
|
||||
|
||||
def cleanup(self):
|
||||
self.eteindreLumieres()
|
||||
76
composants/byPanda/thermostat.py
Normal file
76
composants/byPanda/thermostat.py
Normal file
@@ -0,0 +1,76 @@
|
||||
import time
|
||||
import RPi.GPIO as GPIO
|
||||
import Adafruit_DHT
|
||||
|
||||
GPIO.setmode(GPIO.BOARD)
|
||||
GPIO.setwarnings(False)
|
||||
|
||||
|
||||
class SystemeThermostat:
|
||||
def __init__(self):
|
||||
self.capteur = Adafruit_DHT.DHT11
|
||||
self.pinDht = 22
|
||||
|
||||
self.boutonPlus = 16
|
||||
self.boutonMoins = 18
|
||||
|
||||
# display 4 digits
|
||||
# à brancher proprement quand le module exact sera fixé
|
||||
self.pinDisplayClk = 7
|
||||
self.pinDisplayDio = 11
|
||||
|
||||
self.temperatureCible = 18
|
||||
self.temperatureReelle = None
|
||||
|
||||
self.derniereLectureBouton = 0
|
||||
self.delaiLectureBouton = 0.25
|
||||
|
||||
GPIO.setup(self.boutonPlus, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
|
||||
GPIO.setup(self.boutonMoins, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
|
||||
|
||||
def lireTemperature(self):
|
||||
humidite, temperature = Adafruit_DHT.read_retry(self.capteur, self.pinDht)
|
||||
|
||||
if temperature is None:
|
||||
print("Thermostat : lecture DHT11 impossible")
|
||||
return None
|
||||
|
||||
return temperature
|
||||
|
||||
def lireBoutons(self):
|
||||
maintenant = time.time()
|
||||
|
||||
if maintenant - self.derniereLectureBouton < self.delaiLectureBouton:
|
||||
return
|
||||
|
||||
if GPIO.input(self.boutonPlus):
|
||||
self.temperatureCible += 1
|
||||
self.derniereLectureBouton = maintenant
|
||||
print("Consigne :", self.temperatureCible, "°C")
|
||||
|
||||
elif GPIO.input(self.boutonMoins):
|
||||
self.temperatureCible -= 1
|
||||
self.derniereLectureBouton = maintenant
|
||||
print("Consigne :", self.temperatureCible, "°C")
|
||||
|
||||
def afficherTemperatures(self):
|
||||
# pour l'instant on affiche dans la console
|
||||
# le vrai code du display ira ici
|
||||
if self.temperatureReelle is None:
|
||||
print("Temp réelle : -- | cible :", self.temperatureCible)
|
||||
else:
|
||||
print("Temp réelle :", str(self.temperatureReelle) + "°C", "| cible :", str(self.temperatureCible) + "°C")
|
||||
|
||||
def mettreAJour(self):
|
||||
self.lireBoutons()
|
||||
self.temperatureReelle = self.lireTemperature()
|
||||
self.afficherTemperatures()
|
||||
|
||||
if self.temperatureReelle is None:
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
def cleanup(self):
|
||||
# rien à éteindre ici, incroyable mais vrai
|
||||
pass
|
||||
73
composants/byPanda/volets.py
Normal file
73
composants/byPanda/volets.py
Normal file
@@ -0,0 +1,73 @@
|
||||
import time
|
||||
import RPi.GPIO as GPIO
|
||||
|
||||
GPIO.setmode(GPIO.BOARD)
|
||||
GPIO.setwarnings(False)
|
||||
|
||||
|
||||
class SystemeVolets:
|
||||
def __init__(self):
|
||||
self.pinPhotoExterieure = 32
|
||||
self.pinServo = 12
|
||||
self.boutonManuel = 13
|
||||
|
||||
self.modeManuel = False
|
||||
self.voletsOuverts = True
|
||||
|
||||
GPIO.setup(self.pinPhotoExterieure, GPIO.IN)
|
||||
GPIO.setup(self.pinServo, GPIO.OUT)
|
||||
GPIO.setup(self.boutonManuel, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
|
||||
|
||||
self.pwm = GPIO.PWM(self.pinServo, 50)
|
||||
self.pwm.start(0)
|
||||
|
||||
self.derniereLectureBouton = 0
|
||||
self.delaiLectureBouton = 0.25
|
||||
|
||||
def ouvrirVolets(self):
|
||||
self.pwm.ChangeDutyCycle(7)
|
||||
self.voletsOuverts = True
|
||||
print("Volets : ouverts")
|
||||
|
||||
def fermerVolets(self):
|
||||
self.pwm.ChangeDutyCycle(2)
|
||||
self.voletsOuverts = False
|
||||
print("Volets : fermés")
|
||||
|
||||
def gererBoutonManuel(self):
|
||||
maintenant = time.time()
|
||||
|
||||
if maintenant - self.derniereLectureBouton < self.delaiLectureBouton:
|
||||
return
|
||||
|
||||
if GPIO.input(self.boutonManuel):
|
||||
self.derniereLectureBouton = maintenant
|
||||
|
||||
if self.voletsOuverts:
|
||||
self.fermerVolets()
|
||||
else:
|
||||
self.ouvrirVolets()
|
||||
|
||||
self.modeManuel = True
|
||||
print("Volets : mode manuel")
|
||||
|
||||
def lireLuminositeExterieure(self):
|
||||
return GPIO.input(self.pinPhotoExterieure)
|
||||
|
||||
def mettreAJour(self):
|
||||
self.gererBoutonManuel()
|
||||
|
||||
if self.modeManuel:
|
||||
return False
|
||||
|
||||
luminosite = self.lireLuminositeExterieure()
|
||||
|
||||
if luminosite == 1:
|
||||
self.fermerVolets()
|
||||
else:
|
||||
self.ouvrirVolets()
|
||||
|
||||
return False
|
||||
|
||||
def cleanup(self):
|
||||
self.pwm.stop()
|
||||
Reference in New Issue
Block a user