Configuración del Sistema Gateway
Esta guía detalla la configuración completa del Sistema Gateway Agrícola, incluyendo parámetros de red, hardware y software.
Configuración de Hardware
Pines de Conexión
ESP8266 - SX1278 LoRa
// Configuración de pines LoRa
#define RFM95_CS 2 // Pin Chip Select (D4 en ESP8266)
#define RFM95_INT 5 // Pin Interrupción (D1 en ESP8266)
ESP8266 - DS1302 RTC
// Configuración de pines RTC (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)
Configuración de Red
Parámetros LoRa
// Configuración de frecuencia y potencia
#define LORA_FREQUENCY 433.0 // Frecuencia en MHz
#define LORA_TX_POWER 20 // Potencia en dBm (0-20)
#define LORA_SPREADING_FACTOR 7 // SF7-SF12
#define LORA_BANDWIDTH 125000 // Ancho de banda en Hz
#define LORA_CODING_RATE 5 // Coding rate (4/5, 4/6, 4/7, 4/8)
Parámetros de Red Mesh
// Configuración de red
#define MAX_NODES 250 // Número máximo de nodos
#define RH_MESH_MAX_MESSAGE_LEN 50 // Longitud máxima de mensaje
#define MAC_STR_LEN_WITH_NULL 18 // Longitud de MAC con null
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)
Configuración de Datos
Muestras por Nodo
// Configuración de muestras
#define NUMERO_MUESTRAS_ATMOSFERICAS 8 // Muestras atmosféricas por nodo
#define CANTIDAD_MUESTRAS_SUELO 2 // Muestras de suelo por nodo
Delays de Procesamiento
// Delays entre operaciones
#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)
Configuración de Debugging
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
#else
#define DEBUG_PRINT(x)
#define DEBUG_PRINTLN(x)
// Configuraciones optimizadas para producción
#endif
Configuración de NodeIdentity
Archivos de Persistencia
// Nombres de archivos para LittleFS
#define NODE_ID_FILE "/node_id.json" // Archivo para ID del nodo
#define GATEWAY_ADDR_FILE "/gateway.json" // Archivo para dirección del gateway
Valores por Defecto
#define HASH_NOT_SET 255 // Valor no inicializado
#define GETWAY_NOT_SET 255 // Gateway no configurado
// Lista negra por defecto
extern const uint8_t defaultBlacklist[2]; // [0x00, 0xFF]
Configuración de RadioManager
Parámetros de Inicialización
// Configuración del driver RFM95
driver.setFrequency(433.0); // Frecuencia en MHz
driver.setTxPower(20, false); // Potencia en dBm
driver.setSignalBandwidth(125E3); // Ancho de banda
driver.setCodingRate4(5); // Coding rate
driver.setSpreadingFactor(7); // Spreading factor
Configuración de RtcManager
Parámetros de Inicialización
// Configuración del RTC DS1302
rtc.Begin(); // Inicializar RTC
rtc.SetIsWriteProtected(false); // Habilitar escritura
rtc.SetIsRunning(true); // Iniciar oscilador
Configuración de AppLogic
Horarios de Muestreo
// Horarios para muestreo de suelo
const int intervaloHorasSuelo[CANTIDAD_MUESTRAS_SUELO] = {12, 24};
Parámetros de Reintentos
const uint8_t connectionRetries = 2; // Reintentos para pedir datos
Configuración Avanzada
Optimización de Memoria
// Configuración para optimizar uso de RAM
#define BUFFER_SIZE 50 // Tamaño de buffer
#define MAX_MESSAGE_LENGTH 50 // Longitud máxima de mensaje
#define MAX_RETRIES 3 // Máximo número de reintentos
Optimización de Energía
// Configuración para ahorro de energía
#define SLEEP_DURATION 1000 // Duración de sleep en ms
#define WAKEUP_INTERVAL 5000 // Intervalo de wakeup en ms
#define LOW_POWER_MODE true // Habilitar modo de baja potencia
Configuración de Seguridad
// Configuración de seguridad
#define ENABLE_ENCRYPTION false // Habilitar cifrado
#define ENABLE_AUTHENTICATION true // Habilitar autenticación
#define MAX_FAILED_ATTEMPTS 3 // Máximo intentos fallidos
Configuración por Entorno
Desarrollo
// Configuración para desarrollo
#define DEBUG_MODE true
#define LOG_LEVEL DEBUG
#define ENABLE_SERIAL_OUTPUT true
#define SHORT_TIMEOUTS true
Producción
// Configuración para producción
#define DEBUG_MODE false
#define LOG_LEVEL INFO
#define ENABLE_SERIAL_OUTPUT false
#define SHORT_TIMEOUTS false
Testing
// Configuración para testing
#define DEBUG_MODE true
#define LOG_LEVEL DEBUG
#define ENABLE_SERIAL_OUTPUT true
#define SHORT_TIMEOUTS true
#define MOCK_HARDWARE true
Configuración de Monitoreo
Logging
// Configuración de logging
#define LOG_LEVEL DEBUG // Nivel de logging
#define LOG_TO_SERIAL true // Logging a Serial
#define LOG_TO_FILE false // Logging a archivo
#define LOG_BUFFER_SIZE 100 // Tamaño de buffer de log
Métricas
// Configuración de métricas
#define ENABLE_METRICS true // Habilitar métricas
#define METRICS_INTERVAL 60000 // Intervalo de métricas (1 min)
#define METRICS_RETENTION 24 // Retención de métricas (horas)
Alertas
// Configuración de alertas
#define ENABLE_ALERTS true // Habilitar alertas
#define ALERT_TEMPERATURE_HIGH 35 // Temperatura alta (°C)
#define ALERT_TEMPERATURE_LOW 5 // Temperatura baja (°C)
#define ALERT_HUMIDITY_HIGH 90 // Humedad alta (%)
#define ALERT_HUMIDITY_LOW 20 // Humedad baja (%)
Configuración de Red Mesh
Topología
// Configuración de topología
#define MESH_MAX_HOPS 5 // Máximo número de saltos
#define MESH_ROUTE_TIMEOUT 30000 // Timeout de ruta (30s)
#define MESH_BROADCAST_INTERVAL 60000 // Intervalo de broadcast (1min)
Enrutamiento
// Configuración de enrutamiento
#define ROUTING_ALGORITHM AODV // Algoritmo de enrutamiento
#define ROUTE_DISCOVERY_TIMEOUT 10000 // Timeout de descubrimiento
#define ROUTE_MAINTENANCE_INTERVAL 30000 // Intervalo de mantenimiento
Configuración de Protocolo
Tipos de Mensaje
// Tipos de mensaje del protocolo
#define MSG_TYPE_HELLO 0x01 // Mensaje HELLO
#define MSG_TYPE_ANNOUNCE 0x02 // Mensaje ANNOUNCE
#define MSG_TYPE_DATA_REQUEST 0x03 // Solicitud de datos
#define MSG_TYPE_DATA_RESPONSE 0x04 // Respuesta de datos
#define MSG_TYPE_CHANGE_ID 0x05 // Cambio de ID
Estructura de Mensaje
// Estructura de mensaje
struct MessageHeader {
uint8_t type; // Tipo de mensaje
uint8_t source; // Dirección origen
uint8_t destination; // Dirección destino
uint8_t length; // Longitud de datos
uint32_t timestamp; // Timestamp
};
Validación
// Configuración de validación
#define ENABLE_CRC_CHECK true // Habilitar verificación CRC
#define ENABLE_TIMESTAMP_CHECK true // Habilitar verificación timestamp
#define MAX_MESSAGE_AGE 300000 // Edad máxima de mensaje (5min)
Configuración de Persistencia
LittleFS
// Configuración de LittleFS
#define LITTLEFS_MAX_FILES 10 // Máximo número de archivos
#define LITTLEFS_MAX_FILE_SIZE 1024 // Tamaño máximo de archivo
#define LITTLEFS_ENABLE_FORMAT false // Habilitar formateo automático
Backup
// Configuración de backup
#define ENABLE_AUTO_BACKUP true // Habilitar backup automático
#define BACKUP_INTERVAL 3600000 // Intervalo de backup (1h)
#define BACKUP_RETENTION 7 // Retención de backups (días)
Configuración de Actualizaciones
OTA (Over-The-Air)
// Configuración de actualizaciones OTA
#define ENABLE_OTA true // Habilitar actualizaciones OTA
#define OTA_PORT 8266 // Puerto para OTA
#define OTA_PASSWORD "gateway123" // Contraseña OTA
#define OTA_HOSTNAME "gateway-agricola" // Hostname OTA
Verificación
// Configuración de verificación
#define ENABLE_FIRMWARE_VERIFICATION true // Verificación de firmware
#define FIRMWARE_VERSION "1.0.0" // Versión de firmware
#define FIRMWARE_CHECKSUM_SIZE 32 // Tamaño de checksum
Configuración de Integración
APIs Externas
// Configuración de APIs
#define ENABLE_CLOUD_SYNC false // Habilitar sincronización con nube
#define CLOUD_API_URL "https://api.agro-iot.com" // URL de API
#define CLOUD_API_KEY "your-api-key" // Clave de API
#define CLOUD_SYNC_INTERVAL 300000 // Intervalo de sincronización (5min)
Webhooks
// Configuración de webhooks
#define ENABLE_WEBHOOKS false // Habilitar webhooks
#define WEBHOOK_URL "https://webhook.site/your-url" // URL de webhook
#define WEBHOOK_TIMEOUT 5000 // Timeout de webhook (5s)
Configuración de Diagnóstico
Diagnóstico de Hardware
// Configuración de diagnóstico
#define ENABLE_HARDWARE_DIAGNOSTIC true // Habilitar diagnóstico
#define DIAGNOSTIC_INTERVAL 60000 // Intervalo de diagnóstico (1min)
#define DIAGNOSTIC_TIMEOUT 5000 // Timeout de diagnóstico (5s)
Métricas de Rendimiento
// Configuración de métricas
#define ENABLE_PERFORMANCE_METRICS true // Habilitar métricas
#define METRICS_SAMPLE_INTERVAL 1000 // Intervalo de muestreo (1s)
#define METRICS_RETENTION_PERIOD 3600 // Período de retención (1h)
Para aplicar cambios en la configuración, edita los archivos correspondientes y recompila el proyecto:
# Recompilar después de cambios
pio run --target clean
pio run --target build
pio run --target upload --upload-port COM7