import network
import time
from machine import Pin
import dht
from umqtt.simple import MQTTClient
# WiFi
ssid = "Wokwi-GUEST"
password = ""
# MQTT
mqtt_server = "broker.emqx.io"
topic_temp = b"esp32/temperature"
topic_hum = b"esp32/humidity"
topic_led_cmd = b"esp32/led"
topic_led_state = b"esp32/led/state"
topic_alert = b"esp32/alert"
# LED
led = Pin(2, Pin.OUT)
# DHT22
capteur = dht.DHT22(Pin(15))
# Connexion WiFi
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(ssid, password)
print("Connexion WiFi...")
while not wifi.isconnected():
time.sleep(0.2)
print("WiFi connecté")
# Fonction callback MQTT
def callback(topic, msg):
print("Message reçu:", topic, msg)
if topic == topic_led_cmd:
if msg == b"ON":
led.on()
client.publish(topic_led_state, b"ON")
elif msg == b"OFF":
led.off()
client.publish(topic_led_state, b"OFF")
# Connexion MQTT
client = MQTTClient("esp32_client", mqtt_server)
client.set_callback(callback)
client.connect()
client.subscribe(topic_led_cmd)
print("MQTT connecté")
print("Abonné à esp32/led")
while True:
try:
capteur.measure()
temp = capteur.temperature()
hum = capteur.humidity()
print("Temperature:", temp, "C")
print("Humidite:", hum, "%")
# LED automatique selon température
if temp > 50:
led.on()
etat = "ON"
else:
led.off()
etat = "OFF"
# Publication MQTT
client.publish(topic_temp, str(temp))
client.publish(topic_hum, str(hum))
client.publish(topic_led_state, etat)
# Alerte si température > 50
if temp > 50:
client.publish(topic_alert, b"ALERTE: temperature > 50C")
else:
client.publish(topic_alert, b"Temperature normale")
# Vérifie aussi les commandes reçues depuis Node-RED
for i in range(10):
client.check_msg()
time.sleep(0.2)
except Exception as e:
print("Erreur capteur ou MQTT:", e)
time.sleep(2)