from machine import ADC, Pin
import dht
import time
# ==========================================
# 1. INITIALISATION DES COMPOSANTS
# ==========================================
# LDR sur GPIO34
ldr = ADC(Pin(34))
ldr.atten(ADC.ATTN_11DB)
# DHT11 sur GPIO14 (Étape 2.2)
capteur = dht.DHT11(Pin(14))
# Bouton-poussoir sur GPIO13 avec PULL_UP interne (Étape 2.3)
bouton = Pin(13, Pin.IN, Pin.PULL_UP)
# Potentiomètre (Solaire) sur GPIO35 (Étape 2.4)
solaire = ADC(Pin(35))
solaire.atten(ADC.ATTN_11DB)
# LED (Étapes 3.1, 3.3, 4.1)
led_lampe = Pin(27, Pin.OUT)
led_vert = Pin(26, Pin.OUT)
led_rouge = Pin(25, Pin.OUT)
led_bleue = Pin(23, Pin.OUT)
# Configuration & variables
SEUIL_LUMIERE = 1500
compteur = 0
# ==========================================
# 2. BOUCLE PRINCIPALE
# ==========================================
while True:
# --- 2.1 Lecture de la lumière (LDR) ---
valeur_lumiere = ldr.read()
print("Luminosité =", valeur_lumiere)
# --- 2.2 Lecture Température / Humidité (DHT11) ---
try:
capteur.measure()
temp = capteur.temperature()
humid = capteur.humidity()
print("Température =", temp, " °C - Humidité =", humid, "%")
except OSError:
temp = 20
humid = 50
# --- 2.3 Lecture du bouton "présence" (0 = pressé, 1 = relâché) ---
etat = bouton.value()
if etat == 0:
print("✅ Quelqu’un est présent !")
else:
print("❌ Aucune présence")
# --- 2.4 Lecture de la production solaire ---
valeur_brute = solaire.read()
watts = (valeur_brute / 4095) * 100
print("Production solaire =", round(watts, 1), "W")
# --- 3.1 Gestion de la lampe ---
lumiere = valeur_lumiere
presence = etat
if lumiere < SEUIL_LUMIERE and presence == 0:
led_lampe.on()
print("💡 Lampe allumée")
else:
led_lampe.off()
print("🌑 Lampe éteinte")
# --- 3.2 Calcul de la consommation ---
conso = 0
if led_lampe.value() == 1:
conso += 10
if temp > 28:
conso += 20
print("❄️ Climatisation active → +20W")
print("📊 Consommation totale =", conso, "W")
# --- 3.3 Comparaison production / consommation ---
if watts >= conso:
led_vert.on()
led_rouge.off()
print("✅ Équilibre énergétique")
else:
led_vert.off()
led_rouge.on()
print("❌ Surconsommation !")
# --- 4.1 Gestion de l'excédent (LED bleue) ---
if watts > conso + 20:
led_bleue.on()
print("🔋 Excédent d'énergie → peut alimenter le quartier !")
else:
led_bleue.off()
# --- 4.2 Compteur d'envoi de données ---
compteur += 1
if compteur % 5 == 0:
print("📡 Données transmises au gestionnaire urbain")
print("----------------------------------")
# Temps d'attente court (0.5s) pour mieux détecter l'appui sur le bouton dans Wokwi
time.sleep(0.5)
Loading
esp32-devkit-c-v4
esp32-devkit-c-v4
Ameni Ben Ammar,Fatma najjar