UE1.6 · 4 ECTS

Projet d'Initiation IoT

60h Projet — 7 séances. Capteur → microcontrôleur → réseau → serveur → dashboard. Sujet libre.

7 Séances 0h CM 60h TP 4 ECTS
💡 Conseil projet
Documentez chaque décision dans le carnet de bord du projet. Le carnet de bord est un fichier Markdown versionné sur GitHub qui décrit vos choix techniques, les difficultés rencontrées et les solutions adoptées.
1

Phase 1 : Kickoff — Définition du sujet IoT et liste des composants

Semaine 1Atelier · 2h
Définir un cahier des charges fonctionnel pour le projet
Savoir expliquer
Identifier les composants matériels et logiciels nécessaires
Savoir faire
Analyser la faisabilité et les contraintes du projet
Savoir analyser
Produire un planning prévisionnel et une maquette fonctionnelle
Savoir produire

1. Cadrage du projet

Le projet d'initiation IoT vous demande de concevoir un système complet allant du capteur à la visualisation des données. Le sujet est libre, mais doit impérativement inclure : ① un ou plusieurs capteurs ② un microcontrôleur (Arduino/ESP32) ③ une transmission de données (série, WiFi, LoRa) ④ un serveur de collecte ⑤ une interface de visualisation (dashboard).

2. Carnet de bord

Le carnet de bord est livrable intermédiaire noté. Il doit contenir : le cahier des charges, le schéma fonctionnel, la liste des composants, les difficultés rencontrées, les décisions justifiées. Utilisez GitHub pour versionner ce document.

3. Exemples de sujets

Station météo connectée, serre automatisée, compteur d'énergie, parking intelligent, poubelle connectée, suivi de qualité de l'air, ruche connectée, arrosage automatique.

Exercice 1 — Lancement du projet

a) Réaliser la phase : Rédigez le cahier des charges fonctionnel (1 page A4). Décrivez le problème résolu, les utilisateurs cibles et les fonctionnalités attendues.

b) Documenter carnet de bord : Créez le dépôt GitHub du projet. Initialisez le carnet de bord avec la section "Cahier des charges".

c) Préparer 2 slides : Slide 1 — Problème et solution proposée. Slide 2 — Architecture fonctionnelle (schéma bloc).

d) BONUS fonctionnalité supplémentaire : Ajoutez une fonctionnalité "intelligente" (seuil adaptatif, alerte SMS, commande vocale) non demandée dans le cahier des charges de base.

2

Phase 2 : Montage matériel et tests des capteurs

Semaine 2Atelier · 2h
Câbler les capteurs et actionneurs sur breadboard/protoboard
Savoir expliquer
Vérifier le brochage et les tensions d'alimentation
Savoir faire
Tester chaque capteur individuellement avec un sketch de validation
Savoir analyser
Documenter le schéma de câblage et les résultats de test
Savoir produire

1. Montage et tests unitaires

Avant d'intégrer tous les composants, testez chaque capteur séparément avec un sketch dédié. Vérifiez les tensions d'alimentation avec un multimètre. Utilisez une breadboard pour le prototypage, puis une protoboard pour la version finale.

2. Validation des mesures

Comparez les valeurs lues par le capteur avec un instrument de référence (thermomètre, luxmètre, etc.). Enregistrez les écarts dans le carnet de bord. Un capteur mal calibré fausse tout le système.

Exercice 2 — Montage et tests

a) Réaliser la phase : Câblez l'ensemble des capteurs sur breadboard. Écrivez un sketch de test unitaire pour chaque capteur.

b) Documenter carnet de bord : Ajoutez le schéma de câblage (photo légendée ou schéma Fritzing). Notez les tensions mesurées et les écarts constatés.

c) Préparer 2 slides : Slide 1 — Photo du montage réel avec annotations. Slide 2 — Résultats des tests unitaires (tableau valeurs réelles vs. attendues).

d) BONUS fonctionnalité supplémentaire : Ajoutez un second capteur de même type pour faire une moyenne redondante (filtrage anti-erreur).

3

Phase 3 : Firmware Arduino/ESP32 — collecte et envoi des données

Semaine 3Atelier · 2h
Écrire un firmware structuré (setup/loop, fonctions modulaires)
Savoir expliquer
Acquérir les données capteurs et les formater en JSON
Savoir faire
Transmettre les données par liaison série ou WiFi
Savoir analyser
Gérer les erreurs et les timeouts de communication
Savoir produire

1. Architecture du firmware

Organisez le firmware en plusieurs fichiers : main.ino (boucle principale), capteurs.h/cpp (lecture des capteurs), communication.h/cpp (envoi des données). Utilisez des délais non-bloquants (millis()) pour permettre l'exécution parallèle des tâches.

2. Format des données

Utilisez le format JSON pour structurer les données envoyées. Exemple : {"device":"meteo01","temp":28.5,"hum":72.3,"timestamp":1234567890}. Ce format est universel et facile à parser côté serveur.

Exercice 3 — Firmware de collecte

a) Réaliser la phase : Écrivez le firmware complet de collecte des données avec formatage JSON et envoi série.

b) Documenter carnet de bord : Documentez la structure du code, l'algorithme d'acquisition et les protocoles de communication utilisés.

c) Préparer 2 slides : Slide 1 — Diagramme de flux du firmware. Slide 2 — Extrait de code commenté (fonction critique).

d) BONUS fonctionnalité supplémentaire : Implémentez un mode "deep sleep" avec réveil périodique pour économiser l'énergie.

4

Phase 4 : Backend Python — API et base de données

Semaine 4Atelier · 2h
Comprendre le modèle client-serveur REST
Savoir expliquer
Créer une API Flask/FastAPI avec une route POST pour les données
Savoir faire
Stocker les données dans une base SQLite ou InfluxDB
Savoir analyser
Interroger l'API avec des requêtes GET filtrées
Savoir produire

1. API REST

L'API REST (Representational State Transfer) permet au microcontrôleur d'envoyer des données via HTTP POST et au dashboard de les récupérer via GET. Utilisez Flask pour un serveur léger ou FastAPI pour des performances élevées avec typage automatique.

2. Stockage des données

SQLite est idéal pour un projet éducatif : zéro configuration, fichier unique. Pour des séries temporelles IoT, InfluxDB est plus adapté avec son langage de requête Flux et sa gestion automatique de la rétention des données.

Exercice 4 — API et base de données

a) Réaliser la phase : Créez un serveur Flask avec une route POST /api/mesures et une route GET /api/mesures?limit=50.

b) Documenter carnet de bord : Documentez le schéma de la base de données, les endpoints de l'API et les exemples de requêtes curl.

c) Préparer 2 slides : Slide 1 — Schéma de la base de données. Slide 2 — Exemple d'appel API avec curl et réponse JSON.

d) BONUS fonctionnalité supplémentaire : Ajoutez une route POST /api/alerte qui envoie une notification par email ou Telegram en cas de dépassement de seuil.

5

Phase 5 : Dashboard Grafana ou interface web

Semaine 5Atelier · 2h
Choisir entre Grafana et une interface web custom
Savoir expliquer
Configurer Grafana avec une source de données InfluxDB/SQLite
Savoir faire
Créer des graphiques temps réel avec seuils et alertes visuelles
Savoir analyser
Produire un dashboard fonctionnel et esthétique
Savoir produire

1. Grafana

Grafana est la solution leader pour la visualisation de données temps réel. Elle se connecte à de nombreuses sources (InfluxDB, Prometheus, MySQL, PostgreSQL) et permet de créer des dashboards riches avec alertes, annotations et variables de templating.

2. Interface web custom

Si vous préférez une solution sur mesure, créez une interface web avec Chart.js ou Plotly qui interroge votre API Flask et affiche les données en temps réel. Cela démontre des compétences full-stack supplémentaires.

Exercice 5 — Dashboard

a) Réaliser la phase : Installez et configurez Grafana. Connectez-le à votre source de données. Créez au moins 3 panneaux (jauge, graphique temporel, tableau).

b) Documenter carnet de bord : Capture d'écran du dashboard. Documentez la configuration de Grafana, les requêtes utilisées et les alertes configurées.

c) Préparer 2 slides : Slide 1 — Capture d'écran du dashboard avec annotations. Slide 2 — Explication des alertes et seuils configurés.

d) BONUS fonctionnalité supplémentaire : Créez une alerte Grafana qui envoie une notification Slack/Discord quand une valeur dépasse un seuil critique.

6

Phase 6 : Documentation et rapport technique

Semaine 6Atelier · 2h
Structurer un rapport technique professionnel
Savoir expliquer
Rédiger l'analyse des résultats et les difficultés rencontrées
Savoir faire
Produire des graphiques et schémas de qualité publication
Savoir analyser
Soumettre le rapport et le code source complet
Savoir produire

1. Structure du rapport technique

Le rapport doit suivre le plan suivant : ① Introduction et contexte ② Description du système (schéma bloc, composants) ③ Implémentation (firmware, backend, dashboard) ④ Résultats (graphiques, analyse) ⑤ Difficultés et solutions ⑥ Conclusion et perspectives. Maximum 15 pages.

2. Qualité des livrables

Le code source doit être commenté, structuré et versionné sur GitHub. Le rapport doit être rendu au format PDF. Les graphiques doivent être légendés avec titres d'axes et unités.

Exercice 6 — Rapport technique

a) Réaliser la phase : Rédigez le rapport technique complet (10-15 pages) au format PDF.

b) Documenter carnet de bord : Finalisez le carnet de bord avec la section "Retour d'expérience". Listez les compétences acquises.

c) Préparer 2 slides : Slide 1 — Résultats clés avec graphique de performance. Slide 2 — Schéma d'architecture final du projet.

d) BONUS fonctionnalité supplémentaire : Ajoutez une section "Améliorations possibles" détaillant 3 évolutions futures du projet avec analyse coût/bénéfice.

7

Phase 7 : Démonstration finale et soutenance

Semaine 7Soutenance · 2h
Présenter le projet de manière claire et structurée
Savoir expliquer
Démontrer le fonctionnement en condition réelle
Savoir faire
Répondre aux questions techniques du jury
Savoir analyser
Justifier les choix techniques et les compromis effectués
Savoir produire

1. Préparation de la soutenance

La soutenance dure 15 minutes : 10 minutes de présentation + 5 minutes de questions. Structure : ① Problématique (2 min) ② Architecture et choix techniques (3 min) ③ Démonstration en direct (3 min) ④ Résultats et améliorations (2 min).

2. Démonstration

Préparez la démonstration en condition réelle. Ayez un plan B (vidéo pré-enregistrée) en cas de problème technique. Montrez le matériel, le dashboard en direct et le carnet de bord GitHub.

3. Critères d'évaluation

Fonctionnalité (30%), Qualité du code (20%), Documentation (20%), Présentation (15%), Innovation/BONUS (15%).

Exercice 7 — Soutenance

a) Réaliser la phase : Préparez et répétez la soutenance de 10 minutes avec diapositives.

b) Documenter carnet de bord : Ajoutez la section "Préparation soutenance" avec les questions potentielles et vos réponses préparées.

c) Préparer 2 slides : Slide 1 — Plan de la présentation. Slide 2 — Questions/réponses anticipées.

d) BONUS fonctionnalité supplémentaire : Déployez le projet sur un serveur accessible publiquement (ngrok, VPS) pour une démonstration à distance.