Ce projet a pour objectif la conception et le déploiement d'une maquette de réseau IoT fonctionnelle, basée sur une carte Pycom FiPy. Il s'inscrit dans la continuité des enseignements en réseaux sans fil et systèmes embarqués, en mettant en pratique des compétences allant de la programmation bas niveau des capteurs jusqu'à la supervision applicative des données.
Le projet couvre l'intégralité de la chaîne IoT : acquisition des données environnementales (température, humidité, luminosité), transmission sans fil via le protocole MQTT, stockage dans une base de données InfluxDB, visualisation dans Grafana et contrôle à distance d'un actionneur LED RGB depuis Home Assistant sur mobile.
IoT, MQTT, Wi-Fi IEEE 802.11ac, Pycom FiPy, Pysense, InfluxDB, Grafana, Home Assistant, MicroPython.
Dans le cadre de ce projet, nous incarnons une équipe technique mandatée par une entreprise souhaitant déployer une infrastructure de supervision IoT. L'objectif est de concevoir une solution complète permettant de collecter des données environnementales en temps réel, de les centraliser sur un serveur local et de les rendre accessibles depuis un dashboard. L'entreprise souhaite également pouvoir déclencher des actions à distance sur ses équipements connectés.
Ce type de mission est représentatif des enjeux actuels dans les secteurs de la domotique, de l'industrie 4.0 et des bâtiments intelligents. Notre solution doit être modulaire, fiable et suffisamment documentée pour être maintenue ou étendue par d'autres équipes.
L'architecture retenue repose sur une topologie en étoile avec la carte Pycom au centre. Les capteurs (SI7006-A20 et LTR329ALS-01) lui sont raccordés en I²C via la carte d'extension Pysense. La Pycom se connecte en Wi-Fi au réseau local et publie ses données vers le broker Mosquitto installé sur le PC. Ce dernier redistribue les messages à InfluxDB pour le stockage et à Grafana pour la visualisation. En sens inverse, Grafana ou Home Assistant peuvent publier des commandes sur le topic dédié à l'actionneur LED, fermant ainsi la boucle capteur → réseau → traitement → action.
| Équipement | Rôle | Connexion | Adresse IP | Remarques |
|---|---|---|---|---|
| Ordinateur (PC) | Serveur local : Mosquitto + InfluxDB + Grafana | Wi-Fi / Ethernet | 10.204.29.246 | Broker MQTT, base de données, dashboard |
| Carte Pycom FiPy | Collecte et envoi des données capteurs | Wi-Fi | DHCP | Publie via MQTT, reçoit commandes LED |
| Capteurs SI7006-A20 / LTR329ALS-01 | Mesure température, humidité, luminosité | I²C (via Pysense) | N/A | Intégrés à la carte d'extension Pysense |
| Actionneur — LED RGB intégrée | Retour visuel et validation de commande MQTT | Interne Pycom | N/A | Topic : capteurs/action |
| Serveur MQTT (Mosquitto) | Broker central publish/subscribe | Local (sur PC) | 10.204.29.246 | Port 1883 — connexion anonyme |
| InfluxDB | Stockage des séries temporelles | Local (sur PC) | 10.204.29.246 | Alimenté par Mosquitto, interrogé par Grafana |
| Grafana / Home Assistant | Supervision et contrôle à distance | Local (sur PC) / Mobile | 10.204.29.246 | Dashboard temps réel + panneau LED |
La phase de configuration de la carte s'appuie sur une liaison USB entre la Pycom et le poste
de développement. L'IDE VSCode, équipé du plugin Pymakr, permet de détecter le port série,
de transférer les scripts Python et d'accéder à la console REPL de la carte (invite >>>).
Cette étape est indispensable avant toute mise en œuvre du réseau sans fil.
La communication applicative repose sur le protocole MQTT (port 1883),
un protocole léger de type publish/subscribe particulièrement adapté aux contraintes des objets
connectés (faible bande passante, ressources limitées). La Pycom publie ses mesures toutes les
5 secondes sous forme de payload JSON sur le topic capteurs/data, et s'abonne
simultanément au topic capteurs/action pour recevoir les commandes destinées
à l'actionneur LED.
| Topic | Direction | Description |
|---|---|---|
capteurs/data |
Pycom → Broker | Publication des mesures JSON : température, humidité, luminosité |
capteurs/action |
Broker → Pycom | Commandes de couleur LED envoyées depuis Grafana ou Home Assistant |
Ce capteur numérique mesure l'éclairement ambiant en lux via une interface I²C. Sa plage de mesure s'étend de 0,01 à 64 000 lux avec une résolution de 16 bits, ce qui le rend adapté aussi bien aux environnements très sombres qu'en plein soleil. Lors des tests, la valeur relevée avec la lampe torche d'un téléphone atteignait 1 922 lux.
Ce capteur dual-fonction acquiert simultanément la température (±1 °C, plage −40 à +125 °C) et l'humidité relative (±5 %, plage 0 à 100 % RH). Il est intégré à la carte Pysense et communique avec la Pycom via I²C. Les valeurs mesurées en salle lors du TP étaient de 37 °C pour la température et 38,5 % pour l'humidité.
La LED RGB embarquée dans la carte Pycom constitue l'actionneur du projet. Elle est pilotée
via MQTT : la carte est abonnée au topic capteurs/action et une fonction callback
analyse le message reçu pour appliquer la couleur correspondante. Sept couleurs sont prises en
charge (rouge, vert, bleu, jaune, cyan, magenta, blanc) ainsi que l'extinction. Ce mécanisme
valide concrètement la boucle de contrôle bidirectionnelle de l'architecture.
Le script principal embarqué sur la Pycom assure trois fonctions : la connexion au broker MQTT, l'écoute des commandes LED via un callback, et la publication périodique des données capteurs sous forme de payload JSON. La boucle principale s'exécute toutes les 5 secondes.
# === Connexion MQTT ===
broker_ip = "10.204.29.246"
client = MQTTClient("pycom1", broker_ip, port=1883)
# Callback LED — réception des commandes couleur
def sub_cb(topic, msg):
msg = msg.decode('utf-8')
if msg == "rouge": pycom.rgbled(0xFF0000)
elif msg == "vert": pycom.rgbled(0x00FF00)
elif msg == "bleu": pycom.rgbled(0x0000FF)
elif msg == "jaune": pycom.rgbled(0xFFFF00)
elif msg == "cyan": pycom.rgbled(0x00FFFF)
elif msg == "magenta": pycom.rgbled(0xFF00FF)
elif msg == "blanc": pycom.rgbled(0xFFFFFF)
else: pycom.rgbled(0x000000)
client.set_callback(sub_cb)
client.connect()
client.subscribe(b"capteurs/action")
# === Boucle principale ===
while True:
temp = si.temperature()
hum = si.humidity()
lux = lt.light()[0]
payload = ujson.dumps({
"temperature": round(temp),
"humidite": round(hum, 1),
"luminosite": lux
})
client.publish(b"capteurs/data", payload)
client.check_msg() # écoute les commandes LED
time.sleep(5)
Mosquitto joue le rôle de broker central dans l'architecture. Il reçoit les publications de la Pycom, les transmet à InfluxDB pour persistance et les redistribue à tout abonné enregistré. La configuration retenue pour ce projet est volontairement minimaliste afin de faciliter les tests, avec une connexion anonyme sur le port 1883. Une sécurisation (authentification, ACL, TLS) serait indispensable en environnement de production.
listener 1883
allow_anonymous true
Grafana est connecté à InfluxDB comme source de données principale et affiche les séries temporelles de température, humidité et luminosité sous forme de graphiques interactifs. Home Assistant, configuré sur mobile, offre quant à lui une interface de supervision légère avec affichage des valeurs en direct et un panneau de contrôle permettant de choisir parmi 7 couleurs pour piloter la LED RGB de la Pycom en temps réel.
L'ensemble des fonctionnalités du projet a été validé lors des tests en salle. Les mesures relevées et les comportements observés sont conformes aux spécifications :
Ce projet a représenté pour moi une expérience particulièrement marquante. Pour la première fois, j'ai conçu et fait fonctionner une architecture IoT complète, de la couche physique des capteurs jusqu'à l'interface de supervision sur mobile. Chaque brique — Pycom, MQTT, InfluxDB, Grafana, Home Assistant — s'est assemblée pour former un système cohérent et opérationnel.
Ce que j'ai le plus apprécié, c'est de voir concrètement la boucle capteur → réseau → donnée → action se refermer en temps réel : appuyer sur un bouton dans Home Assistant et voir la LED changer de couleur instantanément sur la carte en face de moi. Cette expérience m'a confirmé que je veux poursuivre mes études dans le domaine des objets connectés et des réseaux intelligents.
Les thématiques de la domotique, des bâtiments intelligents, de l'industrie 4.0 et des Smart Cities m'attirent tout particulièrement. Je souhaite approfondir ces domaines, notamment en explorant la sécurité des protocoles IoT, le edge computing et les technologies LPWAN comme LoRa ou Sigfox, qui permettent de connecter des objets sur de très longues distances avec une consommation énergétique minimale.
Ce projet a permis de mettre en œuvre une architecture IoT complète et fonctionnelle, en couvrant toutes les étapes de la chaîne : acquisition des données par les capteurs, transport via MQTT, stockage dans InfluxDB et supervision via Grafana et Home Assistant. Les objectifs fixés ont été atteints et les résultats validés en conditions réelles.
Plusieurs améliorations sont néanmoins à envisager pour une mise en production : sécurisation du broker MQTT (authentification, règles ACL, chiffrement TLS), renforcement de la robustesse réseau (gestion des déconnexions Wi-Fi, reconnexion automatique, mise en file des messages non envoyés) et normalisation du format des données et de l'horodatage pour garantir la cohérence et la traçabilité des mesures dans le temps.