# Importation des bibliothèques nécessaires
import network # Permet la gestion de la connexion WiFi
import time # Utilisé pour ajouter des délais dans le programme
import dht # Permet l'utilisation du capteur DHT22 pour température et humidité
import ujson # Permet de convertir les données en format JSON
from machine import Pin # Permet de gérer les entrées/sorties GPIO
from umqtt.simple import MQTTClient # Bibliothèque pour utiliser MQTT avec l'ESP32
# Paramètres WiFi
SSID = "Wokwi-GUEST" # Nom du réseau WiFi auquel se connecter
PASSWORD = "" # Mot de passe du réseau WiFi (vide pour Wokwi)
# Paramètres MQTT ThingsBoard
THINGSBOARD_HOST = "demo.thingsboard.io" # Adresse du serveur MQTT ThingsBoard
ACCESS_TOKEN = "BJLvBGGCmKXzXuV3uaR0" # Token d'authentification pour l'appareil ThingsBoard
# Initialisation du capteur DHT22 sur le GPIO15 de l'ESP32
sensor = dht.DHT22(Pin(15))
# Connexion au WiFi
wifi = network.WLAN(network.STA_IF) # Active le mode station (client WiFi)
wifi.active(True) # Active le WiFi
wifi.connect(SSID, PASSWORD) # Connecte l'ESP32 au réseau WiFi
# Attente de la connexion WiFi avant de continuer
while not wifi.isconnected():
time.sleep(1) # Attendre 1 seconde avant de vérifier à nouveau
print("WiFi connecté") # Affiche un message une fois connecté
# Connexion au broker MQTT de ThingsBoard
client = MQTTClient("ESP32_DHT22", THINGSBOARD_HOST, user=ACCESS_TOKEN, password="")
# Création du client MQTT avec l'identifiant "ESP32_DHT22", l'hôte du serveur MQTT et le token d'authentification
client.connect() # Connexion au serveur MQTT
# Boucle infinie pour lire et envoyer les données en continu
while True:
sensor.measure() # Demande une nouvelle mesure du capteur DHT22
temp = sensor.temperature() # Récupère la température mesurée (en °C)
hum = sensor.humidity() # Récupère l'humidité mesurée (en %)
# Création du message JSON contenant les valeurs de température et humidité
message = ujson.dumps({
"temperature": temp, # Ajoute la température au message
"humidity": hum # Ajoute l'humidité au message
})
print("Publication MQTT :", message) # Affiche le message publié dans la console
client.publish("v1/devices/me/telemetry", message) # Envoie les données au serveur MQTT via le topic dédié
time.sleep(5) # Attente de 5 secondes avant d'envoyer une nouvelle mesure