Portfolio de Brice BERNARDIN

Réseaux sans fil pour l'IoT

IoT

Contexte :

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.

Mots-clés :

IoT, MQTT, Wi-Fi IEEE 802.11ac, Pycom FiPy, Pysense, InfluxDB, Grafana, Home Assistant, MicroPython.

Mise en Situation Professionnelle :

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.

Architecture du système :

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.

Tableau d'adressage :

É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

Protocoles de communication :

Liaison filaire — USB / Série

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.

Liaison sans fil — Wi-Fi IEEE 802.11ac + MQTT

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.

Topics MQTT définis :

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

Capteurs et actionneur :

LTR-329ALS-01 — Capteur de lumière ambiante

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.

SI7006-A20 — Capteur de température et d'humidité

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é.

LED RGB intégrée — Actionneur

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.

Implémentation — main.py :

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.

main.py — Pycom FiPy

# === 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)

Serveur et supervision :

Broker MQTT — Mosquitto

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.

mosquitto.conf

listener 1883

allow_anonymous true

Grafana et Home Assistant

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.

Résultats obtenus :

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 me confirme dans mon orientation vers l'IoT :

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.

Conclusion :

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.