🌐
TPs Internet des Objets (IoT)
3 Projets : MQTT, ThingSpeak, Dashboard Node-RED
📨 MQTT
☁️ Cloud
📊 Dashboard
TP1 : Communication MQTT
Protocole Publish/Subscribe pour IoT
🎯 Objectifs
- Comprendre le protocole MQTT et ses concepts
- Configurer un broker MQTT
- Publier et souscrire a des topics
- Échanger des donnees entre ESP32
Architecture MQTT
BROKER MQTT
(broker.hivemq.com)
┌───────────────────┐
│ │
┌──────────┤ TOPICS ├──────────┐
│ │ │ │
│ │ bts/salle1/temp │ │
│ │ bts/salle1/hum │ │
│ │ bts/led/cmd │ │
│ │ │ │
│ └───────────────────┘ │
│ ▲ │
PUBLISH │ SUBSCRIBE
│ │ │
▼ │ ▼
┌─────────────┐ │ ┌─────────────┐
│ ESP32 │ │ │ ESP32 │
│ CAPTEUR │────────────┘ │ LED │
│ (DHT11) │ │ (actuator) │
└─────────────┘ └─────────────┘
QoS (Quality of Service):
- QoS 0 : Au plus une fois (fire & forget)
- QoS 1 : Au moins une fois (ACK)
- QoS 2 : Exactement une fois (handshake)
Code ESP32 : Publisher MQTT
# TP1 : MQTT Publisher (MicroPython ESP32) from umqtt.simple import MQTTClient import network import dht from machine import Pin import time import json # Configuration WIFI_SSID = "VotreWiFi" WIFI_PASS = "MotDePasse" MQTT_BROKER = "broker.hivemq.com" MQTT_PORT = 1883 CLIENT_ID = "esp32_bts_pub" TOPIC_TEMP = "bts/salle1/temperature" TOPIC_HUM = "bts/salle1/humidity" # Capteur DHT11 sensor = dht.DHT11(Pin(4)) # Connexion WiFi wlan = network.WLAN(network.STA_IF) wlan.active(True) wlan.connect(WIFI_SSID, WIFI_PASS) while not wlan.isconnected(): time.sleep(1) print(f"WiFi OK: {wlan.ifconfig()[0]}") # Connexion MQTT client = MQTTClient(CLIENT_ID, MQTT_BROKER, MQTT_PORT) client.connect() print("MQTT connecte!") # Publication periodique while True: try: sensor.measure() temp = sensor.temperature() hum = sensor.humidity() # Publier temperature client.publish(TOPIC_TEMP, str(temp)) # Publier humidite client.publish(TOPIC_HUM, str(hum)) print(f"📤 T={temp}°C, H={hum}%") except Exception as e: print(f"Erreur: {e}") time.sleep(10)
Code ESP32 : Subscriber MQTT
# MQTT Subscriber - Controle LED from umqtt.simple import MQTTClient from machine import Pin import network, time led = Pin(2, Pin.OUT) TOPIC_CMD = "bts/led/cmd" def callback(topic, msg): print(f"📥 {topic}: {msg}") if msg == b"ON": led.value(1) elif msg == b"OFF": led.value(0) # ... connexion WiFi ... client = MQTTClient("esp32_bts_sub", "broker.hivemq.com") client.set_callback(callback) client.connect() client.subscribe(TOPIC_CMD) print("🎧 En ecoute sur", TOPIC_CMD) while True: client.check_msg() time.sleep_ms(100)
TP2 : Plateforme Cloud ThingSpeak
Stockage et visualisation de donnees IoT
Configuration ThingSpeak
- Creer un compte sur thingspeak.com
- Creer un nouveau Channel
- Ajouter les Fields : Field1=Temperature, Field2=Humidity
- Copier la Write API Key
Code : Envoi vers ThingSpeak
# TP2 : Envoi donnees vers ThingSpeak import urequests import network import dht from machine import Pin import time # Configuration ThingSpeak API_KEY = "VOTRE_WRITE_API_KEY" URL = "http://api.thingspeak.com/update" sensor = dht.DHT11(Pin(4)) # ... connexion WiFi ... while True: try: sensor.measure() temp = sensor.temperature() hum = sensor.humidity() # Construire URL avec parametres params = f"?api_key={API_KEY}&field1={temp}&field2={hum}" # Envoyer requete HTTP GET response = urequests.get(URL + params) print(f"ThingSpeak: {response.text}") response.close() except Exception as e: print(f"Erreur: {e}") time.sleep(15) # ThingSpeak: min 15s entre updates
TP3 : Dashboard Node-RED
Interface de visualisation et controle
Installation Node-RED
# Installation sur Raspberry Pi ou PC npm install -g node-red npm install node-red-dashboard # Lancer Node-RED node-red # Acceder a l'interface # http://localhost:1880 # Dashboard: http://localhost:1880/ui
Flow Node-RED : MQTT → Dashboard
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ MQTT In │────▶│ Function │────▶│ Gauge │
│ │ │ (parse) │ │ Temperature │
│ bts/salle1/ │ │ │ │ │
│ temperature │ └─────────────┘ └─────────────┘
└─────────────┘
┌─────────────┐ ┌─────────────┐
│ Button │────▶│ MQTT Out │
│ (ON/OFF) │ │ │
│ │ │ bts/led/cmd │
└─────────────┘ └─────────────┘
Configuration MQTT In:
- Server: broker.hivemq.com:1883
- Topic: bts/salle1/temperature
- QoS: 0
Criteres d'evaluation
| Critere | Points |
|---|---|
| TP1 : Communication MQTT bidirectionnelle | /7 |
| TP2 : Envoi donnees vers ThingSpeak | /6 |
| TP3 : Dashboard Node-RED fonctionnel | /7 |
| Total | /20 |