Développement firmware

Architecture firmware MeshCore

Aperçu technique du firmware MeshCore : modules, composants et architecture interne pour les développeurs

Le firmware MeshCore : comment est-il structuré ?

Le firmware MeshCore est le logiciel qui tourne sur les chipsets ESP32, nRF52 et STM32. Il est écrit en C/C++ et se compose de plusieurs composants modulaires qui travaillent ensemble pour piloter le réseau mesh.

L'architecture firmware est conçue avec la modularité et l'abstraction hardware comme principes de base. Ainsi, le même code source peut être utilisé sur des plateformes hardware variées sans modifications majeures.

Sur cette page, nous expliquons comment le firmware est structuré en interne, quels modules existent et comment ils interagissent.

Modules firmware principaux

Le firmware MeshCore est composé de 5 modules principaux :

1. Module radio (driver LoRa)

Gère la puce radio LoRa (SX1262, SX1276, etc.). S'occupe de la transmission, réception, frequency hopping et gestion de l'alimentation.

radio.init(868MHz, SF9, BW125, CR4_5); radio.send(packet, size); radio.receive(callback);

2. Module routage mesh

Contient l'algorithme de routage mesh. Détermine quels messages doivent être retransmis, maintient une liste de voisins et gère la table de routage.

routing.handlePacket(packet); routing.addNeighbor(nodeId, rssi, snr); routing.findRoute(destination);

3. Module protocole

Implémente le protocole MeshCore : encodage/décodage des paquets, types de messages, chiffrement/déchiffrement via AES-256.

protocol.encodePacket(message, dest); protocol.decodePacket(rawData); protocol.encrypt(payload, key);

4. Module application

Contient la logique applicative : messages texte, GPS, télémétrie, infos nœud. C'est ce que l'utilisateur voit et utilise.

app.sendMessage("Bonjour", userId); app.updatePosition(lat, lon, alt); app.getTelemetry();

5. Module interface

Gère la communication avec les interfaces externes : Bluetooth (GSM), Série (CLI), Écran (OLED/TFT), boutons.

bluetooth.init(); bluetooth.sendToApp(message); screen.display(text);

Architecture système

Les modules fonctionnent ensemble dans une architecture événementielle :

Boucle d'événements

Le firmware exécute une boucle d'événements principale qui vérifie continuellement les événements : paquet radio entrant, message Bluetooth, appui sur bouton, timer expiré. Chaque événement déclenche le module approprié.

Radio pilotée par interruptions

La puce LoRa déclenche une interruption hardware quand un paquet arrive. Le module radio place le paquet dans une file d'attente, qui est ensuite traitée dans la boucle d'événements.

Conception non-bloquante

Toutes les opérations sont non-bloquantes. Les tâches longues (comme le chiffrement ou le fix GPS) s'exécutent comme tâches en arrière-plan ou sont découpées en étapes plus petites, pour que la boucle d'événements reste réactive.

Hardware Abstraction Layer (HAL)

La HAL permet d'exécuter le même firmware sur différent hardware :

Abstraction GPIO

Les boutons, LEDs et autres broches GPIO sont pilotés via une interface HAL. Chaque variante hardware dispose d'un fichier de configuration avec les mappings de broches.

hal_gpio_write(LED_PIN, HIGH);

Abstraction SPI/I2C

La communication avec la puce LoRa (SPI) et les écrans (I2C/SPI) passe par des fonctions HAL ayant une implémentation différente par plateforme.

hal_spi_transfer(data, size);

Gestion de l'alimentation

Deep sleep, mise à l'échelle de la fréquence CPU et contrôle de l'alimentation des périphériques sont spécifiques à la plateforme et abstraits via la HAL.

hal_enter_deep_sleep(seconds);

Système de fichiers

La configuration et les messages sont stockés en flash. L'ESP32 utilise LittleFS, le nRF52 une autre implémentation, mais tous via la même API HAL.

hal_fs_write("config.json", data);

Atouts de cette architecture

🔧

Modularité

Les modules sont faiblement couplés. Vous pouvez mettre à jour le module de routage sans toucher au module radio.

📱

Multiplateforme

Grâce à la HAL, le même code source fonctionne sur ESP32, nRF52 et STM32.

🔄

Extensibilité

De nouvelles fonctionnalités s'ajoutent facilement comme modules supplémentaires.

🐛

Testabilité

Les modules peuvent être testés séparément. Tests unitaires par module.

Performance

La conception événementielle et non-bloquante assure une faible latence et une bonne réactivité.

🔓

Open source

L'intégralité du firmware est open source. Vous pouvez lire le code, le modifier et y contribuer.

Questions fréquentes

Dans quel langage de programmation le firmware est-il écrit ?

Le firmware MeshCore est écrit en C++ (pour la plupart des modules) et C (pour la HAL bas niveau). Il utilise le framework Arduino pour ESP32 et le Nordic SDK pour nRF52.

Combien de mémoire le firmware consomme-t-il ?

Sur ESP32, le firmware consomme environ 200-300 KB de flash et 40-60 KB de RAM. Il reste suffisamment d'espace pour le stockage de messages et les futures fonctionnalités.

Puis-je ajouter mes propres modules ?

Absolument, l'architecture modulaire rend facile l'ajout de modules personnalisés. Pensez à : un module capteur supplémentaire, une logique de routage personnalisée ou une nouvelle interface.

À quelle fréquence les mises à jour firmware sont-elles publiées ?

MeshCore connaît un développement actif avec des releases tous les 2-3 mois. Les corrections de bugs suivent plus rapidement, les nouvelles fonctionnalités arrivent dans les releases majeures.

Le firmware est-il rétrocompatible ?

Oui, le protocole est rétrocompatible au sein des versions majeures. Un nœud v2.3 peut communiquer avec des nœuds v2.1. Lors d'une mise à jour majeure (v3.0), cela peut changer.

Plongez dans le firmware MeshCore

Maintenant que vous comprenez l'architecture firmware, vous pouvez explorer le code source, contribuer au développement ou effectuer vos propres modifications.