SE5 ECEAI/eceai 2024/2025/ling

De wiki-se.plil.fr
Aller à la navigation Aller à la recherche

L’objectif de ce module est de comprendre ce qu'est le Edge Computing. Durant ces TP, il va falloir créer un réseau d'objets connectés qui pourront distribuer le calcul à différents endroits du réseau afin d’être en mesure de pouvoir optimiser le système en termes de performances et sobriété énergétique.

Le matériel qui m'a été fourni est :

- Un Raspberry Pi 4

- Un NUCLEO-F401RE

- Un X-NUCLEO-53L5A1 (capteur de type Time Of Flight)

J'ai donc décidé de réaliser le réseau d'objets connectés suivant :

Réseau d'objets connectés


Création d'un serveur cloud

Dans un premier temps, j'ai créé une VM appelée SE5-ling sur le serveur Capbreton en utilisant l'hyperviseur Xen. Pour se faire, j'ai utilisé la commande suivante

xen-create-image --hostname SE5-ling --force --dist bookworm --size 10G --memory 1G --dir /usr/local/xen --dhcp --bridge bridgeStudents

J'ai configuré cette VM afin qu'elle puisse me servir de serveur cloud qui pourra communiquer avec les autres objets du réseau.

Pour la suite, je vais utiliser mon ordinateur personnel en tant que Serveur cloud car je m'y suis pris trop tard et les VM de Capbreton ne sont plus disponible. Pour le sous-réseau, étant donné que le point d'accès original a été retiré, j'ai décidé d'utiliser celui de mon téléphone portable .

Communication entre la Raspberry Pi et le serveur cloud

Configuration de la Raspberry Pi

J'ai choisi de communiquer avec le serveur cloud en utilisant le protocole MQTT (Message Queuing Telemetry Transport).

Il s'agit d'un protocole très utilisé en IoT (Internet of Things) car il est léger, efficace et fiable pour les communications entre appareils connectés et est également adapté pour de nombreux appareils connectés.

Pour pouvoir communiquer en MQTT, j'ai installé le service Mosquitto sur la Raspberry Pi et ainsi que sur le serveur cloud qui sont tous les deux sur le même sous-réseau.

Pour interagir avec la Raspberry Pi, je me suis connecté en série, puis j'ai utilisé Minicom pour exécuter "ip a" et obtenir son adresse IP afin d'établir une connexion SSH ensuite.

ssh pifou@192.168.53.212

Test de publication de messages MQTT sur le serveur cloud

Mosquitto est configuré par défaut pour être utilisé sur le port 1883 (sans SSL). Le service Mosquitto étant le broker MQTT a la même adresse IP que le serveur cloud donc : 192.168.53.172

Du côté de la Raspberry Pi (client MQTT), je vais souscrire à un topic appelé mqtt_rpi_cloud/test et publier un message "test MQTT depuis RPI4". Le broker va recevoir et relayer ce message à un client qui écoute sur le topic où on a publié :

mosquitto_pub -h 192.168.53.172 -p 1883 -t mqtt_rpi_cloud/test -m "test MQTT depuis RPI4"

Du côté du serveur cloud, je vais créer un client qui reçoit les messages du broker MQTT en étant souscrit au topic mqtt_rpi_cloud/test

mosquitto_sub -h 192.168.53.172 -p 1883 -t mqtt_rpi_cloud/test 

Ci-dessous, on voit bien que la communication entre la Raspberry Pi et le serveur cloud fonctionne :

Le message publié est bien arrivé au client souscrit au topic


Entraînement du modèle d’apprentissage

Réception des données du capteur

Avant de commencer à entraîner le modèle, j'ai cherché à faire fonctionner le capteur en envoyant les données du capteur sur la liaison série. Pour cela, sur Nanoedge AI Studio, j'ai cliqué sur data logger et sélectionné les paramètres d’acquisitions au maximum avec : Data rate à 15Hz, Frame resolution à 64 et Frame à 32.

Cela a généré un programme que l'on peut téléverser en utilisant l'utilitaire STM32CubeProgrammer conçu spécialement pour les microcontroleurs STM32 comme le nucleo. Après avoir sélectionné la carte NUCLEO-F401RE, j'ai pu téléverser mon programme de data logger.

Téléversement réussi sur STM32cubeProgrammer


Si on se connecte au port série de la carte, on peut voir les données acquises par le capteur :

Donnée qui arrivent sur le port série :