Présentation du projet
Mocktastic est un firmware minimaliste destiné aux cartes ESP32 équipées d’un module LoRa SX1276. Il reproduit le protocole Meshtastic sans être un fork du firmware officiel, ce qui en fait un banc d’essai pédagogique pour le décodage et l’encodage de paquets Meshtastic en C++. Le projet cible en priorité la LilyGO T3 LoRa32 V1.6.1, qui intègre un ESP32‑PICO et le radio Semtech SX1276, mais la structure du code permet de le porter sur tout matériel ESP32/LoRa compatible.
Architecture et modes de compilation
Deux modes sont sélectionnés à la compilation grâce à des macros : DECODER active un shell série interactif capable de recevoir, décoder et transmettre des messages texte sur les canaux publics ou privés configurés, tandis que SENSOR transforme la carte en capteur DHT22 de température et d’humidité. Le choix du mode se fait en modifiant la directive
#define DECODER ou #define SENSOR au début du fichier meshtastic_decoder.ino. Cette séparation garantit que la logique protocolaire reste indépendante des effets matériels, ce qui facilite les tests unitaires sur une machine de développement.Le paramétrage radio est fixé à la valeur « EU Medium Fast » : fréquence 869 525 024 Hz, facteur d’étalement 9, bande passante 250 kHz, taux de codage 4/5, mot de synchronisation 0x2B, préambule de 16 octets et CRC activé. Ces paramètres sont appliqués via la bibliothèque LoRa de Sandeep Mistry :
LoRa.begin(869525024);
LoRa.setSpreadingFactor(9);
LoRa.setSignalBandwidth(250E3);
LoRa.setCodingRate4(5);
LoRa.setSyncWord(0x2B);
LoRa.setPreambleLength(16);
LoRa.enableCrc();Les broches du module LoRa sont définies explicitement pour la LilyGO :
#define LORA_SCK 5
#define LORA_MISO 19
#define LORA_MOSI 27
#define LORA_SS 18
#define LORA_RST 23
#define LORA_DIO0 26Cette configuration matérielle est indispensable pour garantir la compatibilité avec les nœuds Meshtastic existants.
Gestion cryptographique et tests unitaires
Le chiffrement des paquets utilise la bibliothèque MBDTLS pendant la phase de test, tandis que l’encodage protobuf repose sur Nano‑Protobuf, une implémentation légère adaptée aux contraintes de mémoire des microcontrôleurs. Le projet intègre un jeu de tests écrit avec le framework Doctest ; le Makefile compile et exécute ces tests en une seule commande (make test). Les tests couvrent les fonctions indépendantes de la plateforme, la cryptographie, le traitement des paquets Meshtastic et l’analyse du shell, assurant que toute modification du code de décodage ou du parsing ne corrompt pas la logique protocolaire.
Le même répertoire contient un répertoire meshtastic_decoder/ dédié aux tests hébergés sur la machine de développement, séparés du code qui interagit avec le radio, le port série ou le capteur. Cette séparation permet de valider la plupart des chemins de code sans nécessiter le matériel cible, ce qui accélère le cycle de développement.
Déploiement, configuration et limites
Le processus d’installation requiert l’Arduino IDE, les bibliothèques LoRa, Adafruit Unified Sensor et DHT sensor, ainsi que la configuration des clés publiques/privées dans keys.h. Les clés sont des chaînes hexadécimales, éventuellement converties depuis Base64 avec la fonction b64StrToHexStr(). Le firmware ne doit jamais exposer de clés privées dans un dépôt public.
En mode SENSOR, le DHT22 est relié au GPIO 21 et le dispositif nécessite une alimentation autonome pour fonctionner hors ligne. Le firmware ne prétend pas offrir la même fiabilité ou l’efficacité énergétique que le firmware officiel Meshtastic ; il est destiné à la recherche, à l’apprentissage et à la prototypisation. Aucun test de résistance à long terme n’est fourni, et l’utilisation en environnement critique est déconseillée.