RadioManager

Descripción

El RadioManager es responsable de la gestión de la comunicación LoRa mesh en el sistema de monitoreo agrícola. Proporciona funcionalidades avanzadas para transmisión, recepción y enrutamiento de datos en la red mesh.

Características Principales

  • Comunicación LoRa: Transmisión de largo alcance (hasta 10km)

  • Red Mesh: Enrutamiento dinámico y redundante

  • Protocolo Personalizado: Optimizado para datos agrícolas

  • Gestión de Congestión: Control de tráfico de red

  • Retransmisión Automática: Garantía de entrega de datos

Especificaciones Técnicas

  • Frecuencia: 433 MHz (configurable)

  • Potencia: Hasta 20 dBm

  • Modulación: LoRa (SF7-SF12)

  • Ancho de Banda: 125 kHz

  • Tasa de Datos: 0.3-37.5 kbps

  • Alcance: 10km en condiciones óptimas

Ejemplo de Uso

#include "radio_manager.h"

RadioManager radioManager;

void setup() {
    radioManager.begin();
    radioManager.setNodeId(1);
}

void loop() {
    // Enviar datos
    if (radioManager.sendData(data, size)) {
        Serial.println("Datos enviados exitosamente");
    }

    // Procesar datos recibidos
    if (radioManager.dataAvailable()) {
        uint8_t receivedData[256];
        uint8_t size = radioManager.receiveData(receivedData);
        processReceivedData(receivedData, size);
    }
}

Métodos Principales

begin()

Inicializa el módulo LoRa y configura los parámetros de comunicación.

void begin();

setNodeId()

Configura el ID único del nodo en la red mesh.

void setNodeId(uint8_t nodeId);

sendData()

Envía datos a través de la red LoRa mesh.

bool sendData(uint8_t* data, uint8_t size);

receiveData()

Recibe datos de la red LoRa mesh.

uint8_t receiveData(uint8_t* buffer);

dataAvailable()

Verifica si hay datos disponibles para recibir.

bool dataAvailable();

getNetworkStatus()

Obtiene el estado actual de la red mesh.

NetworkStatus getNetworkStatus();

Configuración de Red

El RadioManager utiliza las siguientes configuraciones desde config.h:

#define LORA_FREQUENCY 433E6
#define LORA_POWER 20
#define LORA_SPREADING_FACTOR 7
#define LORA_SIGNAL_BANDWIDTH 125E3
#define LORA_CODING_RATE 5
#define LORA_PREAMBLE_LENGTH 8
#define LORA_SYNC_WORD 0x12

Protocolo de Comunicación

Estructura de Paquete: .. code-block:: cpp

struct LoRaPacket {

uint8_t header; // 0xAA uint8_t nodeId; // ID del nodo uint8_t packetType; // Tipo de datos uint8_t sequence; // Número de secuencia uint8_t data[240]; // Datos del paquete uint8_t checksum; // Checksum para validación

};

Tipos de Paquetes: * 0x01: Datos atmosféricos * 0x02: Datos de suelo * 0x03: Datos GPS * 0x04: Datos de energía * 0x05: Comando de control * 0x06: Respuesta de estado

Enrutamiento Mesh

Algoritmo de Enrutamiento: * Flooding Controlado: Transmisión con TTL * Rutas Múltiples: Redundancia de comunicación * Detección de Vecinos: Descubrimiento automático * Optimización de Rutas: Selección de mejor camino

TTL (Time To Live): .. code-block:: cpp

#define MESH_TTL_DEFAULT 5 #define MESH_TTL_MAX 10 #define MESH_TTL_CRITICAL 15

Gestión de Congestión

  • Control de Flujo: Limita transmisiones por nodo

  • Priorización: Datos críticos tienen prioridad

  • Backoff Exponencial: Reduce colisiones

  • Monitoreo de Calidad: RSSI y SNR

Optimizaciones

  • Sleep Inteligente: Reduce consumo entre transmisiones

  • Compresión de Datos: Minimiza tamaño de paquetes

  • Ack Selectivo: Solo confirma paquetes críticos

  • Cache de Rutas: Evita recálculo frecuente

Casos de Uso

Transmisión de Datos Sensoriales: .. code-block:: cpp

// Enviar datos atmosféricos uint8_t data[] = {temp, humidity, pressure}; radioManager.sendData(data, sizeof(data));

Comunicación de Control: .. code-block:: cpp

// Enviar comando de calibración uint8_t command[] = {0x05, 0x01, 0x00}; radioManager.sendData(command, sizeof(command));

Monitoreo de Red: .. code-block:: cpp

NetworkStatus status = radioManager.getNetworkStatus(); if (status.connectedNodes < 3) {

// Alerta: Red poco conectada

}

Notas de Implementación

  • Thread-Safe: Seguro para uso concurrente

  • Error Recovery: Recuperación automática de fallos

  • Debug Logging: Información detallada de comunicación

  • Configuración Dinámica: Parámetros ajustables en tiempo real

Ver también