Conception d’un protocole adapté aux objets connectés dans un réseau dense.
Ce projet correspond à la partie logicielle de mon TIPE (Travail d'Initiative Personnelle Encadré) pour les concours des grandes écoles 2023. Il s'inscrit dans le thème de "La Ville" et vise à concevoir un protocole de communication efficace pour les objets connectés dans un environnement urbain dense.
Pour ce faire, le projet se décompose en deux parties : une partie conception basée sur l'état de l'art et une partie pratique / programmation. J'ai développé une preuve de concept de ce protocole de couche liaison, en utilisant des modules radio LoRa (qui servent de couche physique), de microcontrolleurs Espressif ESP32, et des bibliothèques logicielles disponibles pour le langage Rust.
Note
À l'issue du concours 2023, ce projet a été publié sur prepas-mp2i.fr en tant qu'exemple de TIPE pour la filière MPI. Vous pourrez y retrouver les documents annexes (Présentation, MCOT, Annexes).
La partie code se divise en deux parties principales :
- radio-tipe-poc : Le code source principal du projet, destiné à être utilisé en tant que bibliothèque et avec un minimum de dépendances au matériel (ce qui n'est pas toujours possible).
- esp32-tipe-client : Le programme qui permet de faire fonctionner un nœud client/serveur dans le réseau, basé sur la bibliothèque
radio-tipe-poc.
De façon secondaire, il existe également :
- esp32-lora-tests : Un petit programme de test destiné à tester rapidement les modules LoRa (SX127x) sur ESP32.
- radio-hal : La bibliothèque radio-hal qui abstrait le fonctionnements des modules radio.
- rust-radio-sx127x : Un fork légèrement modifié de la bibliothèque déjà existante rust-radio-sx127x, qui permet de supporter nos modules LoRa (SX127x).
Le matériel utilisé pour cette preuve de concept est le suivant :
- Radio LoRa: RFM95W (SX1276) de HopeRF
- DevKit ESP32-WROOM par uPesy (v1)
Les techniques suivantes ont été implémentées dans cette preuve de concept :
- Agrégation de trames : Permet de regrouper plusieurs trames de données en une seule transmission pour réduire la surcharge de protocole.
- Messages groupés : Permet d'envoyer un message à plusieurs destinataires en une seule transmission.
- Accusés de réception par lots : Permet de confirmer la réception de plusieurs messages en une seule réponse (permettant de limiter l'utilisation de la bande passante).
- Canaux de fréquence rotatifs : Permet de changer dynamiquement la fréquence de transmission pour éviter les interférences et utiliser efficacement le spectre disponible.
- Adaptive Transmission Power Control (ATPC) : Permet d'ajuster dynamiquement la puissance de transmission en fonction de la qualité du lien pour économiser l'énergie et réduire les interférences.
- Un ordinateur avec Rust et cargo-espflash installés.
- Si vous souhaitez utiliser les ESP32 fonctionnant sous architecture Xtensa, vous devrez également installer espup et
une target Xtensa (par exemple
xtensa-esp32-espidf). - Une carte de développement ESP32 (comme l'ESP32 DevKitC).
- Un module radio LoRa (comme le RFM95W).
Si vous avez configurer correctement cargo-espflash,
vous pouvez simplement cloner le dépot, compiler et flasher le projet principal avec les commandes suivantes :
git clone [email protected]:fusetim/radio_tipe_poc.git
cd radio_tipe_poc/
cargo run -p esp32-tipe-client --releaseCaution
Assurez-vous de configurer correctement les broches GPIO dans le code source pour correspondre à votre configuration matérielle.