import time
import machine
import dht
from umqtt.simple import MQTTClient
# Paramètres MQTT
SERVER = "192.168.1.2" # Adresse IP du serveur MQTT
CLIENT_ID = "esp32_001" # Identifiant du client MQTT
TOPIC_TEMPERATURE = "maison/salon/temperature"
TOPIC_RELAY = "maison/salon/relay"
MQTT_USER = "client1"
MQTT_PASSWORD = "client1234"
# Paramètres de connexion au réseau WiFi
WIFI_SSID = "nyhome"
WIFI_PASSWORD = "bm@1574d"
# Broche du relais et du capteur DHT11
RELAY_PIN = 12
DHT_PIN = 27
# Fonction de connexion au réseau WiFi
def connect_wifi():
import network
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print("Connexion au réseau WiFi...")
wlan.connect(WIFI_SSID, WIFI_PASSWORD)
while not wlan.isconnected():
pass
print("Connecté au réseau WiFi :", wlan.ifconfig())
# Fonction de lecture de la température
def read_temperature():
dht_sensor = dht.DHT11(machine.Pin(DHT_PIN))
dht_sensor.measure()
return dht_sensor.temperature()
# Fonction de contrôle du relais
def control_relay(state):
relay = machine.Pin(RELAY_PIN, machine.Pin.OUT)
relay.value(state)
# Fonction de publication de la température via MQTT
def publish_temperature(temperature):
mqtt_client.publish(TOPIC_TEMPERATURE, str(temperature))
# Fonction de souscription au sujet MQTT pour le contrôle du relais
def on_message(topic, message):
print("Topic:",topic,"message:",message)
message_str = message.decode('UTF-8')
topic_str = topic.decode('UTF-8')
if topic_str == TOPIC_RELAY:
if message_str == "on":
control_relay(1)
print("Relais activé")
elif message_str == "off":
control_relay(0)
print("Relais désactivé")
# Connexion au réseau WiFi
connect_wifi()
# Connexion au serveur MQTT
mqtt_client = MQTTClient(CLIENT_ID, SERVER, user=MQTT_USER, password=MQTT_PASSWORD)
topiclast = b"home/esp32/last"
msglast = b"ESP32 deconnectée !!!!"
mqtt_client.set_last_will(topiclast, msglast, retain=False, qos=0)
mqtt_client.set_callback(on_message)
mqtt_client.connect()
mqtt_client.subscribe(TOPIC_RELAY)
print("Connecté au serveur MQTT :", SERVER)
# Boucle principale
while True:
try:
# Lecture de la température
temperature = read_temperature()
print("Température :", temperature)
# Publication de la température via MQTT
publish_temperature(temperature)
# Attente de 2 secondes avant de lire à nouveau la température
time.sleep(2)
# Vérification des messages MQTT
mqtt_client.check_msg()
except Exception as e:
print("Erreur :", e)
time.sleep(1)