config.h - Configuración Central del Sistema Gateway
📋 Descripción General
Archivo de configuración central que define todos los parámetros, constantes y configuraciones del sistema Gateway agrícola. Este archivo actúa como punto único de configuración para facilitar el mantenimiento y personalización del sistema.
🏗️ Estructura de Configuración
Modos de Operación
El sistema soporta dos modos de operación principales:
Modo Debug
#define DEBUG_MODE
#ifdef DEBUG_MODE
#define DEBUG_PRINT(x) Serial.print(x)
#define DEBUG_PRINTLN(x) Serial.println(x)
// Configuraciones optimizadas para desarrollo
#endif
Características:
Debugging Activo: Salida detallada por Serial
Timeouts Reducidos: Para desarrollo rápido
Intervalos Cortos: Para testing intensivo
Logging Detallado: Información completa del sistema
Modo Producción
#else
#define DEBUG_PRINT(x)
#define DEBUG_PRINTLN(x)
// Configuraciones optimizadas para producción
#endif
Características:
Debugging Deshabilitado: Sin salida Serial
Timeouts Extendidos: Para operación estable
Intervalos Largos: Para conservación de energía
Logging Mínimo: Solo información crítica
📊 Parámetros de Red
Configuración de Nodos
#define MAX_NODES 250 ///< Número máximo de nodos en la red
#define NUMERO_MUESTRAS_ATMOSFERICAS 8 ///< Muestras atmosféricas por nodo
#define CANTIDAD_MUESTRAS_SUELO 2 ///< Muestras de suelo por nodo
Propósito:
Escalabilidad: Soporte para redes grandes
Almacenamiento: Optimización de memoria
Flexibilidad: Configuración por tipo de dato
Timeouts y Delays
// Modo Debug
#define TIMEOUTGRAL 2000 ///< Timeout general (2 segundos)
#define INTERVALOANNOUNCE 5000 ///< Intervalo de announce (5 segundos)
#define INTERVALOATMOSPHERIC 30000 ///< Intervalo atmosférico (30 segundos)
// Modo Producción
#define TIMEOUTGRAL 1500 ///< Timeout general (1.5 segundos)
#define INTERVALOANNOUNCE 120000 ///< Intervalo de announce (2 minutos)
#define INTERVALOATMOSPHERIC 480000 ///< Intervalo atmosférico (8 minutos)
Características:
Adaptabilidad: Diferentes valores según modo
Optimización: Balance entre responsividad y energía
Escalabilidad: Configuración por tipo de operación
Delays de Procesamiento
#define DELAY_BETWEEN_NODES 200 ///< Delay entre nodos (200ms)
#define DELAY_BEFORE_RETRY_ATMOSPHERIC 2000 ///< Retry atmosférico (2 segundos)
#define DELAY_BEFORE_RETRY_GROUND 4000 ///< Retry suelo/GPS (4 segundos)
Propósito:
Gestión de Red: Evitar congestión
Recuperación: Estrategias de retry
Optimización: Balance entre velocidad y estabilidad
🔧 Configuración de Hardware
Comunicación LoRa
#define RFM95_CS 2 ///< Pin Chip Select (D4 en ESP8266)
#define RFM95_INT 5 ///< Pin Interrupción (D1 en ESP8266)
Características:
Configuración SPI: Pines específicos para ESP8266
Optimización: Selección de pines para mejor rendimiento
Compatibilidad: Mapeo correcto de pines
RTC DS1302 (3-wire interface)
#define RTC_CLK 18 ///< Pin CLK del DS1302 (D3 en ESP8266)
#define RTC_DAT 19 ///< Pin DAT del DS1302 (D2 en ESP8266)
#define RTC_RST 4 ///< Pin RST del DS1302 (D0 en ESP8266)
Características:
Interfaz 3-wire: Configuración específica para DS1302
Mapeo de Pines: Compatibilidad con ESP8266
Optimización: Selección de pines para estabilidad
Configuración de Comunicación
#define RH_MESH_MAX_MESSAGE_LEN 50 ///< Longitud máxima de mensaje
#define MAC_STR_LEN_WITH_NULL 18 ///< Longitud de MAC con null
Propósito:
Optimización de Memoria: Buffers eficientes
Compatibilidad: Con librerías RadioHead
Escalabilidad: Configuración para redes grandes
🔍 Macros de Debugging
Sistema de Logging
#ifdef DEBUG_MODE
#define DEBUG_PRINT(x) Serial.print(x)
#define DEBUG_PRINTLN(x) Serial.println(x)
#else
#define DEBUG_PRINT(x)
#define DEBUG_PRINTLN(x)
#endif
Características:
Compilación Condicional: Optimización automática
Flexibilidad: Fácil activación/desactivación
Eficiencia: Sin overhead en producción
📈 Configuraciones Avanzadas
Parámetros de Comunicación
// Configuraciones comentadas para futuras implementaciones
//#define DELAY_BETWEEN_ATMOSPHERIC_REQUESTS 2000
//#define DELAY_BETWEEN_GROUND_REQUESTS 5000
Propósito:
Extensibilidad: Preparación para futuras funcionalidades
Documentación: Referencia para desarrolladores
Flexibilidad: Configuración granular
🔧 Personalización y Optimización
Modificación de Parámetros
1. Cambio de Pines
// Para cambiar pines LoRa
#define RFM95_CS 15 // Nuevo pin CS
#define RFM95_INT 13 // Nuevo pin INT
// Para cambiar pines RTC
#define RTC_CLK 14 // Nuevo pin CLK
#define RTC_DAT 12 // Nuevo pin DAT
#define RTC_RST 16 // Nuevo pin RST
2. Ajuste de Timeouts
// Para redes más lentas
#define TIMEOUTGRAL 3000
#define INTERVALOANNOUNCE 10000
// Para redes más rápidas
#define TIMEOUTGRAL 1000
#define INTERVALOANNOUNCE 3000
3. Configuración de Red
// Para redes pequeñas
#define MAX_NODES 50
#define NUMERO_MUESTRAS_ATMOSFERICAS 4
// Para redes grandes
#define MAX_NODES 500
#define NUMERO_MUESTRAS_ATMOSFERICAS 16
🚨 Consideraciones Importantes
1. Compatibilidad de Hardware
ESP8266: Configuración específica para este microcontrolador
Pines: Selección cuidadosa para evitar conflictos
Voltajes: Compatibilidad con niveles lógicos de 3.3V
2. Optimización de Energía
Modo Debug: Mayor consumo para desarrollo
Modo Producción: Optimización para baterías
Sleep Modes: Configuración para ahorro energético
3. Escalabilidad
Memoria: Consideración de límites de RAM
Red: Configuración para número de nodos
Comunicación: Balance entre velocidad y estabilidad
📊 Métricas de Configuración
Uso de Recursos
Parámetro |
Debug |
Producción |
Impacto |
|---|---|---|---|
RAM |
~50% |
~44% |
Memoria de buffers |
Flash |
~35% |
~32% |
Código de debug |
Energía |
Alto |
Bajo |
Intervalos y timeouts |
Velocidad |
Rápida |
Moderada |
Responsividad |
Optimizaciones
Debug Mode: +15% RAM, +10% Flash
Producción: Optimizado para eficiencia
Flexibilidad: Configuración por requerimientos
🔮 Mejoras Futuras
Fase 1: Configuración Dinámica
Configuración por UART: Cambio de parámetros en tiempo real
Configuración por Web: Interfaz web para configuración
Configuración por LoRa: Actualización remota de parámetros
Fase 2: Optimizaciones Avanzadas
Auto-tuning: Ajuste automático de parámetros
Machine Learning: Optimización basada en uso
Adaptive Timeouts: Timeouts dinámicos según condiciones
Fase 3: Integración
Cloud Configuration: Sincronización con la nube
Multi-environment: Configuraciones por ambiente
Versioning: Control de versiones de configuración
📋 Checklist de Configuración
Antes del Despliegue
[ ] Verificar Pines: Compatibilidad con hardware
[ ] Ajustar Timeouts: Según condiciones de red
[ ] Configurar Modo: Debug vs Producción
[ ] Validar Parámetros: Rango de valores correctos
[ ] Probar Comunicación: Verificar conectividad
Durante la Operación
[ ] Monitorear Recursos: Uso de RAM y Flash
[ ] Verificar Estabilidad: Timeouts y delays
[ ] Optimizar Parámetros: Según rendimiento observado
[ ] Actualizar Configuración: Según necesidades
Conclusión: El archivo config.h representa el centro de configuración del sistema Gateway, proporcionando flexibilidad, optimización y escalabilidad a través de parámetros bien definidos y documentados que permiten adaptar el sistema a diferentes entornos y requerimientos.