Visión General del Sistema

Introducción

El Sistema de Monitoreo Agrícola con Red Mesh LoRa es una solución integral para la agricultura de precisión, combinando tecnologías IoT avanzadas con arquitectura de software robusta y escalable.

Características Principales

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

  • Arquitectura Modular: Principios SOLID para máxima flexibilidad

  • Sensores Especializados: Monitoreo completo de condiciones agrícolas

  • Energía Inteligente: Sistema de gestión energética avanzado

  • Escalabilidad: Soporte para hasta 100 nodos por red

Componentes del Sistema

  • Unidades de Campo (Nodos): ESP32 + SX1278 + GPS + Sensores Agrícolas

  • Gateway Central: Procesamiento y almacenamiento de datos

  • Sistema de Comunicación: Protocolo LoRa mesh personalizado

Arquitectura del Sistema

Flujo de Datos

Errores Comunes y Decisiones de Diseño

Errores Comunes y Decisiones de Diseño

Durante el desarrollo del sistema de monitoreo agrícola, se presentaron diversos desafíos técnicos y de integración. Aquí se documentan los errores más frecuentes, los llamados «errores fantasma» y las decisiones clave tomadas para robustecer el sistema.

Errores Comunes

  • Problemas de comunicación LoRa: - Causados por interferencias, mala configuración de pines o falta de ACK. - Solución: Verificar conexiones, reiniciar el módulo y ajustar parámetros en config.h.

  • Desbordamiento de buffers: - Ocurre si no se controla el tamaño de los arrays de muestras. - Solución: Uso de defines y verificaciones en el código.

  • Lecturas inválidas de sensores: - Por desconexión, mal cableado o sensores defectuosos. - Solución: Manejo de errores y valores por defecto en las estructuras.

  • Pérdida de datos GPS con SoftwareSerial: - El módulo GPS envía datos continuamente sin solicitud previa. - Con SoftwareSerial se perdían datos críticos de ubicación. - Solución: Cambiar a HardwareSerial (UART2) para GPS. - Configuración: Pines 16 (RX), 17 (TX) para UART2.

  • Errores de comunicación RS485: - Timeouts en comunicación con módulo sensor externo. - Datos corruptos o incompletos. - Solución: Verificar conexiones, ajustar timeouts y usar protocolo simple «ILF». - Configuración: Pines 14 (RX), 15 (TX), 2 (Control DE/RE).

Errores Fantasma

  • Reseteos inesperados del ESP32: - A veces causados por watchdog, otras por picos de consumo o fallos de memoria. - Decisión: Implementar el Task Watchdog Timer (TWDT) y documentar los síntomas.

  • Datos GPS nulos tras reinicio: - El GPS puede tardar 30-60 segundos en obtener señal tras un cold start. - Decisión: Alimentar el GPS de forma independiente para hot start.

  • Mensajes que no llegan al gateway: - Puede ser por tablas de enrutamiento perdidas o gateway fuera de línea. - Decisión: Reintentos automáticos y logging detallado.

Decisiones de Diseño

  • Arquitectura por capas: - Separación clara entre lógica de aplicación, comunicación, sensores y protocolo.

  • Configuración centralizada: - Uso de config.h para todos los parámetros críticos.

  • Buffers circulares y manejo de errores: - Para evitar pérdida de datos y facilitar el debug.

  • Documentación y pruebas continuas: - Uso de Sphinx y ejemplos prácticos para asegurar mantenibilidad.

  • Comunicación Serial Optimizada: - GPS (HardwareSerial UART2): El módulo GPS envía datos continuamente sin solicitud previa.

    Con SoftwareSerial se perdían datos críticos de ubicación. HardwareSerial garantiza captura completa.

    • RS485 (SoftwareSerial): Comunicación bajo demanda (solicitamos datos cuando los necesitamos). SoftwareSerial es suficiente para comunicación controlada y permite flexibilidad en pines.

    • Configuración: GPS (pines 16,17) + RS485 (pines 14,15, control 2)

Nota

Lección Aprendida: Para dispositivos que envían datos continuamente (GPS), usar HardwareSerial. Para comunicación controlada bajo demanda (RS485), SoftwareSerial es suficiente.

Nota

Si encuentras un error no documentado aquí, por favor repórtalo para mejorar el sistema.

Arquitectura de Capas (Visual)

flowchart TD A["main.cpp / main_nodo.ino\n(Capa de Entrada Principal)"] --> B["AppLogic\n(Capa de Lógica de Aplicación)"] B --> C["SensorManager / NodeIdentity\n(Adquisición de Sensores / Identidad)"] B --> D["RadioManager\n(Capa de Radio)"] D --> E["LoRa Mesh Network"] B --> F["Protocol\n(Capa de Protocolo)"] C --> G["Sensores Físicos\n(DHT, GPS, NPK, etc.)"] style A fill:#e0f7fa style B fill:#ffe0b2 style C fill:#c8e6c9 style D fill:#d1c4e9 style F fill:#fff9c4 style G fill:#f8bbd0 style E fill:#b3e5fc

Para más detalles técnicos, consulta las secciones de API y Especificaciones.

Diagrama de Bloques de Hardware

flowchart TD ESP32["ESP32 (MCU)"] LoRa["Módulo LoRa (SX1278)\nRFM95_CS: 5\nRFM95_INT: 26\nRFM95_RST: 27\nVSPI_SCK: 18\nVSPI_MISO: 19\nVSPI_MOSI: 23\nVSPI_SS: 5"] GPS["Módulo GPS (UART2)\nGPS_RX_UART2: 16\nGPS_TX_UART2: 17"] RS485["Módulo RS485 (SoftwareSerial)\nRS485_RX_SOFTWARE: 14\nRS485_TX_SOFTWARE: 15\nRS485_RE_DE: 2"] DHT["Sensor DHT (Temp/Hum)\nPIN_SENS_DHTT: 22"] BAT["Medición Batería\nBATTERY_VOLTAGE_ADC_PIN: 34"] ESP32 --> LoRa ESP32 --> GPS ESP32 --> RS485 ESP32 --> DHT ESP32 --> BAT style ESP32 fill:#e3f2fd,stroke:#1976d2,stroke-width:2px style LoRa fill:#fffde7,stroke:#fbc02d style GPS fill:#e8f5e9,stroke:#388e3c style RS485 fill:#f3e5f5,stroke:#7b1fa2 style DHT fill:#ffe0b2,stroke:#f57c00 style BAT fill:#f8bbd0,stroke:#c2185b Diagrama de bloques de conexiones físicas entre el ESP32 y los periféricos principales según los pines definidos en config.h.