from machine import Pin, ADC, PWM
import time
import dht
import onewire
import ds18x20
import urequests # Pour envoyer les alertes via API comme Twilio ou Pushbullet
# Définir les broches et initialiser les capteurs
ambiante1 = dht.DHT22(Pin(22))
ambiante2 = dht.DHT22(Pin(21))
ambiante3 = dht.DHT22(Pin(20))
ambiante4 = dht.DHT22(Pin(19))
light1 = ADC(Pin(28))
light2 = ADC(Pin(27))
# Relais pour les actionneurs
relay_chauffage = Pin(17, Pin.OUT) # Relais chauffage
relay_extractor = Pin(18, Pin.OUT) # Relais extracteur
relay_brumisateur = Pin(15, Pin.OUT) # Relais brumisateur
relay_pad_cooling = Pin(14, Pin.OUT) # Relais pad cooling
# Température sol (DS18B20)
dat = Pin(16)
ow = onewire.OneWire(dat)
sensor = ds18x20.DS18X20(ow)
roms = sensor.scan()
# Seuils
TEMP_SOL_MIN = 22
TEMP_SOL_MAX = 26
TEMP_AMBIANTE_MIN = 20
TEMP_AMBIANTE_MAX = 24
HUMIDITE_MIN = 70
HUMIDITE_MAX = 85
HUMIDITE_SOL_MIN = 50
HUMIDITE_SOL_MAX = 60
# Envoi des alertes (exemple via Twilio, Pushbullet, ou autre service)
def envoyer_alerte(message):
url = "https://api.pushbullet.com/v2/pushes"
headers = {
"Access-Token": "VOTRE_TOKEN_PUSHBULLET"
}
data = {
"type": "note",
"title": "Alerte Serre",
"body": message
}
response = urequests.post(url, json=data, headers=headers)
print(response.json())
# Fonction de gestion de la température du sol
def gestion_temperature_sol(temp_sol):
if temp_sol < TEMP_SOL_MIN:
print("Température du sol trop basse. Allumer chauffage...")
relay_chauffage.value(1) # Allumer chauffage
elif temp_sol > TEMP_SOL_MAX:
print("Température du sol trop haute. Éteindre chauffage.")
relay_chauffage.value(0) # Éteindre chauffage
# Fonction de gestion de la température ambiante
def gestion_temperature_ambiante(temp_ambiante):
if temp_ambiante > TEMP_AMBIANTE_MAX:
print("Température trop haute. Activer extraction et refroidissement...")
relay_extractor.value(1) # Activer extracteur
if temp_ambiante > 24:
print("Température toujours élevée. Activer brumisateur...")
relay_brumisateur.value(1) # Activer brumisateur
elif temp_ambiante < TEMP_AMBIANTE_MIN:
print("Température trop basse. Rien à faire.")
relay_extractor.value(0) # Désactiver extracteur
relay_brumisateur.value(0) # Désactiver brumisateur
# Fonction de gestion de l'humidité
def gestion_humidite(humidite_ambiante, humidite_sol):
# Humidité ambiante
if humidite_ambiante < HUMIDITE_MIN:
print("Humidité ambiante trop basse. Activer brumisateur...")
relay_brumisateur.value(1) # Activer brumisateur
elif humidite_ambiante > HUMIDITE_MAX:
print("Humidité ambiante trop élevée. Activer extracteur...")
relay_extractor.value(1) # Activer extracteur
# Humidité du sol
if humidite_sol < HUMIDITE_SOL_MIN:
print("Humidité du sol trop basse. Activer brumisateur...")
relay_brumisateur.value(1) # Activer brumisateur
elif humidite_sol > HUMIDITE_SOL_MAX:
print("Humidité du sol trop élevée. Éteindre brumisateur...")
relay_brumisateur.value(0) # Désactiver brumisateur
# Fonction principale de gestion des capteurs et actionneurs
def boucle_principale():
while True:
# Lire les données des capteurs DHT22 et DS18B20
ambiante1.measure()
t1 = ambiante1.temperature()
h1 = ambiante1.humidity()
print("Température coin 1:", t1, "Humidité coin 1:", h1)
ambiante2.measure()
t2 = ambiante2.temperature()
h2 = ambiante2.humidity()
print("Température coin 2:", t2, "Humidité coin 2:", h2)
ambiante3.measure()
t3 = ambiante3.temperature()
h3 = ambiante3.humidity()
print("Température coin 3:", t3, "Humidité coin 3:", h3)
ambiante4.measure()
t4 = ambiante4.temperature()
h4 = ambiante4.humidity()
print("Température coin 4:", t4, "Humidité coin 4:", h4)
# Lire la température du sol
if roms:
sensor.convert_temp()
time.sleep(1) # Attendre la conversion de température
temp_sol = sensor.read_temp(roms[0]) # Lire la première sonde de température du sol
print("Température du sol:", temp_sol)
# Gestion de la température du sol
gestion_temperature_sol(temp_sol)
# Gestion de la température ambiante (par exemple pour le coin 1)
gestion_temperature_ambiante(t1)
# Gestion de l'humidité (par exemple pour le coin 1)
gestion_humidite(h1, h1) # Vous pouvez ajouter d'autres capteurs d'humidité du sol ici
# Attendre avant la prochaine lecture
time.sleep(5)
# Démarrer la boucle principale
if __name__ == "__main__":
boucle_principale()