Développement de plugins

Développement de plugins MeshCore

Créez des modules personnalisés et étendez les fonctionnalités de MeshCore avec vos propres plugins

En quoi consiste le développement de plugins MeshCore ?

MeshCore dispose d'une architecture modulaire de plugins permettant aux développeurs d'étendre les fonctionnalités du réseau mesh sans toucher au firmware de base. Via les plugins, vous ajoutez des fonctionnalités sur mesure comme l'intégration de capteurs, la journalisation de données, l'appel à des API externes et bien plus encore.

L'API plugin offre des hooks dans le cycle de vie du firmware, vous permettant de réagir à des événements tels que la réception de messages, la détection de nœuds, les mises à jour de télémétrie et les décisions de routage. Cela rend MeshCore extrêmement flexible pour des applications spécifiques.

Que vous souhaitiez connecter une station météo, mettre en place un système d'alerte automatique ou créer des visualisations personnalisées – les plugins MeshCore rendent tout cela possible. Ce guide vous montre comment démarrer.

Aperçu de l'architecture plugin

Les plugins MeshCore reposent sur une architecture orientée événements avec des interfaces clairement définies

Manifeste du plugin

Chaque plugin commence par un fichier manifeste qui définit les métadonnées et les capacités :

plugin.json avec nom, version, auteur et dépendances

Gestionnaires d'événements

Les plugins enregistrent des gestionnaires pour des événements spécifiques du réseau mesh :

onMessageReceived(), onNodeDetected(), onRouteUpdated()

Gestion de l'état

Les plugins peuvent stocker un état persistant dans le firmware :

plugin.setState(), plugin.getState(), automatic persistence

Intégration API

Accédez aux fonctionnalités de base de MeshCore via l'API plugin :

sendMessage(), getNodes(), getRoutes(), getTelemetry()

Développement de plugin étape par étape

De la mise en place de votre environnement de développement au déploiement de votre premier plugin

1

Étape 1 : Configurer l'environnement de développement

Clonez le dépôt MeshCore et installez les outils de compilation :

git clone https://github.com/meshcore/meshcore-firmware.git
cd meshcore-firmware
git submodule update --init --recursive
pip install platformio
pio run
2

Étape 2 : Créer le squelette du plugin

Créez un nouveau dossier plugin avec les fichiers de base :

mkdir -p src/plugins/myPlugin
touch src/plugins/myPlugin/plugin.json
touch src/plugins/myPlugin/myPlugin.h
touch src/plugins/myPlugin/myPlugin.cpp
3

Étape 3 : Configurer le manifeste du plugin

Définissez les métadonnées de votre plugin dans plugin.json :

{\n "name": "MyPlugin",\n "version": "1.0.0",\n "author": "Your Name",\n "description": "Custom plugin",\n "dependencies": ["core", "radio"],\n "capabilities": ["messaging", "telemetry"]\n}
4

Étape 4 : Implémenter la logique du plugin

Écrivez le code de votre plugin en C++ et implémentez les gestionnaires d'événements dont vous avez besoin. Enregistrez des callbacks pour des événements comme la réception de messages, la détection de nœuds ou les mises à jour de télémétrie.

5

Étape 5 : Compiler et tester

Compilez le firmware avec votre plugin et flashez-le sur un appareil de test. Testez rigoureusement vos fonctionnalités et déboguez les éventuels problèmes via le moniteur série.

Exemple : plugin capteur de température

Un plugin simple qui lit un capteur DHT22 et envoie la température via le réseau mesh

#include "myPlugin.h"\n#include <DHT.h>\n\n#define DHT_PIN 4\n#define DHT_TYPE DHT22\nDHT dht(DHT_PIN, DHT_TYPE);\n\nvoid MyPlugin::init() {\n dht.begin();\n Log.info("MyPlugin initialized");\n}\n\nvoid MyPlugin::loop() {\n static unsigned long lastRead = 0;\n if (millis() - lastRead > 60000) { // Chaque minute\n float temp = dht.readTemperature();\n float humidity = dht.readHumidity();\n \n if (!isnan(temp) && !isnan(humidity)) {\n String payload = "T:" + String(temp, 1) + "°C H:" + String(humidity, 1) + "%";\n meshcore.sendMessage(payload, BROADCAST_ADDR);\n Log.info("Sent: " + payload);\n }\n lastRead = millis();\n }\n}\n\nvoid MyPlugin::onMessageReceived(MeshMessage* msg) {\n if (msg->payload.startsWith("TEMP_REQUEST")) {\n float temp = dht.readTemperature();\n meshcore.sendMessage("T:" + String(temp, 1) + "°C", msg->sender);\n }\n}

Comment ça fonctionne ?

Ce plugin lit chaque minute la température et l'humidité d'un capteur DHT22 et diffuse les données via le réseau mesh. De plus, le plugin répond aux messages « TEMP_REQUEST » en renvoyant immédiatement une mesure de température au demandeur.

Types de plugins populaires

🌡️

Intégration de capteurs

Connectez des capteurs externes (température, GPS, pression atmosphérique) et transmettez les données via le réseau mesh

📊

Journalisation de données

Enregistrez les événements mesh sur une carte SD ou dans une base de données externe pour analyse ultérieure

🔔

Systèmes de notification

Envoyez des alertes automatiques basées sur des événements mesh ou des valeurs de capteurs

🗺️

Plugins de cartographie

Visualisez la topologie du réseau, les positions des nœuds et la puissance du signal

🔌

Ponts de protocole

Connectez MeshCore à d'autres réseaux (WiFi, LoRaWAN, MQTT)

🤖

Automatisation

Créez des bots qui réagissent automatiquement aux messages ou événements du réseau

Bonnes pratiques pour le développement de plugins

Suivez ces recommandations pour créer des plugins stables et performants

  • Gardez vos plugins compacts et ciblés - Un plugin doit faire une seule chose, mais la faire bien

  • Respectez les limites de ressources - L'ESP32 dispose de mémoire et CPU limitées, optimisez votre code

  • Utilisez des patterns asynchrones - Ne bloquez jamais la boucle principale, utilisez des callbacks et des timers

  • Prévoyez une gestion d'erreur solide - Capturez les exceptions et enregistrez les erreurs clairement

  • Documentez votre API - Rédigez des commentaires clairs et un README pour les utilisateurs

  • Testez rigoureusement - Testez sur du matériel réel et dans différentes conditions réseau

Questions fréquentes

Dans quel langage écrit-on les plugins MeshCore ?

Les plugins MeshCore sont écrits en C/C++ car le firmware tourne sur du matériel embarqué (ESP32, nRF52). Vous pouvez également utiliser Python pour des plugins externes communiquant avec le firmware via série ou MQTT.

Puis-je utiliser des bibliothèques Arduino existantes dans mon plugin ?

Oui, la plupart des bibliothèques Arduino sont compatibles avec MeshCore car il est basé sur le framework Arduino. Attention toutefois aux conflits de bibliothèques et à la consommation mémoire.

Comment déboguer mon plugin pendant le développement ?

Utilisez le moniteur série dans PlatformIO pour la sortie de débogage. Vous pouvez utiliser Log.info(), Log.debug() et Log.error() pour une journalisation structurée. Avec un débogueur matériel (comme J-Link), vous pouvez également placer des points d'arrêt.

Les plugins peuvent-ils modifier la configuration radio ?

Oui, avec les bonnes permissions, les plugins peuvent modifier les paramètres radio comme la puissance d'émission, le spreading factor et la bande passante. Cela doit se faire avec précaution pour préserver la stabilité du réseau.

Comment distribuer mon plugin à d'autres utilisateurs ?

Partagez votre plugin sous forme de dossier avec le code + plugin.json via GitHub. Les utilisateurs ajoutent ensuite votre plugin à leur build du firmware et compilent eux-mêmes. À l'avenir, une marketplace de plugins pourrait voir le jour.

Peut-on gagner de l'argent avec des plugins ?

MeshCore est open source, mais vous êtes libre de développer des plugins commerciaux. Beaucoup de développeurs optent pour un modèle open source + donations, ou vendent du support et du développement sur mesure.

Lancez-vous dans le développement de plugins MeshCore

Avec l'API plugin, adaptez MeshCore à votre application spécifique sans toucher au firmware de base

Commencez dès aujourd'hui votre premier plugin et partagez vos créations avec la communauté !