# ===============================
# Projet IoT : Température & Humidité
# ESP32 + DHT22 + MQTT + Node-RED
# ===============================
# Import des bibliothèques
import network # Gestion WiFi
import time # Gestion du temps
from umqtt.simple import MQTTClient # MQTT
import dht # Capteur DHT22
from machine import Pin # Gestion des broches
# ===============================
# Paramètres WiFi (Wokwi)
# ===============================
WIFI_SSID = "Wokwi-GUEST" # Nom du WiFi simulé
WIFI_PASSWORD = "" # Pas de mot de passe
# ===============================
# Paramètres MQTT
# ===============================
MQTT_BROKER = "broker.hivemq.com" # Broker public
CLIENT_ID = "esp32_abdo_01" # Identifiant unique
# Topics MQTT (doivent être les mêmes dans Node-RED)
TOPIC_TEMP = b"Capteur_Temperature"
TOPIC_HUM = b"Capteur_Humidite"
# ===============================
# Initialisation du capteur DHT22
# ===============================
capteur = dht.DHT22(Pin(15)) # DATA connecté au GPIO 15
# ===============================
# Connexion au WiFi
# ===============================
def connecter_wifi():
print("Connexion au WiFi...")
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(WIFI_SSID, WIFI_PASSWORD)
# Attente de connexion
while not wifi.isconnected():
print(".", end="")
time.sleep(0.5)
print("\nWiFi connecté")
# ===============================
# Connexion au broker MQTT
# ===============================
def connecter_mqtt():
print("Connexion au broker MQTT...")
client = MQTTClient(CLIENT_ID, MQTT_BROKER, port=1883)
client.connect()
print("MQTT connecté")
return client
# ===============================
# Programme principal
# ===============================
connecter_wifi() # Connexion WiFi
client = connecter_mqtt() # Connexion MQTT
while True:
try:
# Lecture des données du capteur
capteur.measure()
temperature = capteur.temperature() # Température en °C
humidite = capteur.humidity() # Humidité en %
# Affichage dans le terminal (debug)
print("Température:", temperature, "°C")
print("Humidité:", humidite, "%")
# Envoi des données vers MQTT
client.publish(TOPIC_TEMP, str(temperature))
client.publish(TOPIC_HUM, str(humidite))
# Attente (important pour DHT22)
time.sleep(2)
except Exception as e:
# Gestion d'erreur (si problème capteur ou réseau)
print("Erreur :", e)
time.sleep(2)