Desarrollo de Plugins

Desarrollo de Plugins MeshCore

Crea modulos personalizados y extiende la funcionalidad de MeshCore con tus propios plugins

Que es el Desarrollo de Plugins MeshCore?

MeshCore incluye una arquitectura modular de plugins que permite a los desarrolladores extender la funcionalidad de la red mallada sin modificar el firmware principal. Con plugins puedes agregar funciones personalizadas como integrar sensores, registrar datos, llamar APIs externas y mucho mas.

La API de plugins ofrece hooks dentro del ciclo de vida del firmware, permitiendote reaccionar a eventos como mensajes recibidos, nodos detectados, actualizaciones de telemetria y decisiones de enrutamiento. Esto hace que MeshCore sea excepcionalmente flexible para casos de uso especificos.

Ya sea que quieras conectar una estacion meteorologica, crear un sistema automatico de alerta de emergencia o generar visualizaciones personalizadas, los plugins de MeshCore lo hacen posible. Esta guia muestra como iniciar el desarrollo de plugins.

Resumen de la Arquitectura de Plugins

Los plugins de MeshCore se basan en una arquitectura orientada a eventos con interfaces claramente definidas

Manifiesto del Plugin

Cada plugin comienza con un archivo de manifiesto que define metadatos y capacidades:

plugin.json con nombre, version, autor y dependencias

Manejadores de Eventos

Los plugins registran manejadores para eventos especificos en la malla:

onMessageReceived(), onNodeDetected(), onRouteUpdated()

Gestion de Estado

Los plugins pueden guardar estado persistente en el firmware:

plugin.setState(), plugin.getState(), persistencia automatica

Integracion de API

Acceso a la funcionalidad principal de MeshCore mediante la API de plugins:

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

Desarrollo de Plugins Paso a Paso

Desde configurar el entorno de desarrollo hasta desplegar tu primer plugin

1

Paso 1: Configura el Entorno de Desarrollo

Clona el repositorio de MeshCore y configura las herramientas de build:

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

Paso 2: Crea el Esqueleto del Plugin

Crea una nueva carpeta de plugin con los archivos basicos:

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

Paso 3: Configura el Manifiesto del Plugin

Define los metadatos de tu plugin en plugin.json:

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

Paso 4: Implementa la Logica del Plugin

Escribe tu codigo del plugin en C++ e implementa los manejadores de eventos que necesites. Registra callbacks para eventos como mensajes recibidos, nodos detectados o actualizaciones de telemetria.

5

Paso 5: Compila y Prueba

Compila el firmware con tu plugin y flashea a un dispositivo de prueba. Prueba tu funcionalidad a fondo y depura cualquier problema con el monitor serial.

Ejemplo: Plugin de Sensor de Temperatura

Un plugin simple que lee un sensor DHT22 y transmite la temperatura por la malla

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

Como Funciona Esto?

Este plugin lee temperatura y humedad desde un sensor DHT22 cada minuto y lo difunde por la red mallada. Tambien responde a mensajes "TEMP_REQUEST" enviando de inmediato una lectura de temperatura de vuelta al solicitante.

Tipos de Plugins Populares

🌡️

Integracion de Sensores

Conecta sensores externos (temperatura, GPS, presion) y transmite datos por la malla

📊

Registro de Datos

Registra eventos de la malla en SD o en una base de datos externa para analisis

🔔

Sistemas de Notificaciones

Envia alertas automaticas basadas en eventos de la malla o valores de sensores

🗺️

Plugins de Mapeo

Visualiza la topologia de red, posiciones de nodos y potencia de senal

🔌

Puentes de Protocolo

Conecta MeshCore con otras redes (WiFi, LoRaWAN, MQTT)

🤖

Automatizacion

Crea bots que responden automaticamente a mensajes o eventos

Buenas Practicas para el Desarrollo de Plugins

Sigue estas pautas para crear plugins estables y de buen rendimiento

  • Manten los plugins pequenos y enfocados - Un plugin debe hacer una cosa bien, no todo a la vez

  • Respeta los limites de recursos - ESP32 tiene memoria y CPU limitadas; optimiza tu codigo

  • Usa patrones async - Nunca bloquees el loop principal; usa callbacks y temporizadores

  • Implementa manejo de errores - Captura excepciones y registra errores con claridad

  • Documenta tu API - Escribe comentarios claros y un README para usuarios

  • Prueba a fondo - Prueba en hardware real y en diferentes condiciones de red

Preguntas Frecuentes

En que lenguaje de programacion escribo plugins de MeshCore?

Los plugins de MeshCore se escriben en C/C++ porque el firmware corre en hardware embebido (ESP32, nRF52). Tambien puedes usar Python para plugins externos que se comuniquen con el firmware por serial o MQTT.

Puedo usar librerias existentes de Arduino en mi plugin?

Si, la mayoria de las librerias de Arduino son compatibles con MeshCore porque esta construido sobre el framework de Arduino. Solo ten cuidado con conflictos de librerias y uso de memoria.

Como depuro mi plugin durante el desarrollo?

Usa el monitor serial en PlatformIO para salida de debug. Puedes usar Log.info(), Log.debug() y Log.error() para logging estructurado. Tambien puedes usar un depurador de hardware (como J-Link) para poner breakpoints.

Los plugins pueden modificar la configuracion de radio?

Si, con los permisos adecuados los plugins pueden cambiar parametros de radio como potencia de transmision, spreading factor y ancho de banda. Esto debe hacerse con cuidado para mantener la estabilidad de la red.

Como distribuyo mi plugin a otros usuarios?

Puedes compartir tu plugin como una carpeta con codigo mas plugin.json por GitHub. Luego los usuarios pueden agregar tu plugin a su build de firmware y compilar por su cuenta. Puede que llegue un marketplace de plugins en el futuro.

Puedo ganar dinero con plugins?

MeshCore es open source, pero puedes crear plugins comerciales si lo deseas. Muchos desarrolladores eligen un modelo de open source mas donaciones, o venden soporte y desarrollo a medida.

Empieza con el Desarrollo de Plugins MeshCore

Con la API de plugins puedes personalizar MeshCore para tu caso de uso especifico sin modificar el firmware principal

Empieza a crear tu primer plugin hoy y comparte tus creaciones con la comunidad!