Séance : Le Lave-vitre DMS - Un système domotique intelligent
Informations générales
Niveau : Terminale STI2D - 2I2D / SIN
Durée : 2h (séance unique + suite possible)
Prérequis : TP1 à TP7 sur le lave-vitre réalisés
Objectif : Intégrer le lave-vitre dans un écosystème domotique
Compétences visées
- CO2.1 : Identifier et caractériser les grandeurs agissant sur un système
- CO5.2 : Simuler et mesurer un comportement
- CO6.1 : Valider une solution technique
- CO7.1 : Concevoir une architecture de commande
- Domotique : Intégrer un système dans une installation domotique
2. PARTIE 2 : Intégration technique (40 min)
Activité 2.1 : Ajout d'un module de communication
Rappel TP1 : Le lave-vitre possède une carte de contrôle avec microcontrôleur.
Question 4 : Proposez une solution pour rendre le lave-vitre communicant
Option A : Module Wi-Fi ESP32
- Avantages :
- Inconvénients :
- Coût estimé :
Option B : Module Zigbee
- Avantages :
- Inconvénients :
- Coût estimé :
Activité 2.2 : Interface de communication
Travail pratique : Vous allez concevoir l'interface entre le lave-vitre et le module Wi-Fi
Rappel TP2 & TP3 : Le lave-vitre fonctionne avec une machine à états
États principaux :
- ARRET
- ATTENTE
- ASPIRATION_VENTOUSE
- DEPLACEMENT_HORIZONTAL
- DEPLACEMENT_VERTICAL (TP6)
- NETTOYAGE
- FIN_CYCLE
Question 5 : Complétez le tableau des informations à transmettre

Activité 2.3 : Protocole MQTT pour la domotique
Introduction : MQTT est un protocole léger idéal pour l'IoT et la domotique
Architecture MQTT :

Question 6 : Proposez une structure de topics MQTT pour le lave-vitre
Exemple :

Activité 2.4 : Code Python - Communication MQTT
Travail à réaliser : Complétez le code Python pour publier les données du lave-vitre
Rappel TP2 : Vous avez déjà utilisé Python pour programmer les états
import paho.mqtt.client as mqtt
import time
# Configuration MQTT
BROKER = "192.168.1.100" # Adresse de la box domotique
PORT = 1883
TOPIC_BASE = "maison/exterieur/lavevitre"
# Connexion au broker
client = mqtt.Client("LaveVitre_DMS")
client.connect(BROKER, PORT, 60)
# Fonction pour publier l'état
def publier_etat(etat):
topic = f"{TOPIC_BASE}/etat"
client.publish(topic, etat)
print(f"État publié : {etat}")
# Fonction pour publier la position
def publier_position(x, y):
# À COMPLÉTER
pass
# Fonction callback pour les commandes
def on_message(client, userdata, message):
topic = message.topic
commande = message.payload.decode()
if "commande/start" in topic:
# À COMPLÉTER : démarrer le cycle
pass
elif "commande/stop" in topic:
# À COMPLÉTER : arrêter le lave-vitre
pass
# Abonnement aux topics de commande
client.subscribe(f"{TOPIC_BASE}/commande/#")
client.on_message = on_message
# Boucle principale
try:
while True:
# Simulation : lecture des capteurs
etat_actuel = lire_etat_systeme()
position_x, position_y = lire_position()
# Publication MQTT
publier_etat(etat_actuel)
publier_position(position_x, position_y)
time.sleep(1) # Rafraîchissement 1 Hz
except KeyboardInterrupt:
client.disconnect()
print("Déconnexion MQTT")Question 7 : Complétez les fonctions manquantes