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 :

  1. ARRET
  2. ATTENTE
  3. ASPIRATION_VENTOUSE
  4. DEPLACEMENT_HORIZONTAL
  5. DEPLACEMENT_VERTICAL (TP6)
  6. NETTOYAGE
  7. 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