Resumen
Firmware para un Gateway maestro Modbus RTU en ESP32 TTGO LORA 32 V2.1 basado en RS485, planifica lecturas periódicas, normaliza los datos y los transmite por LoRaWAN (LMIC)dentro de un entorno FreeRTOS.
Dependencias
- FreeRTOS: tareas, colas, semáforos y sincronización.
- Arduino core ESP32 + SPI/UART + ModbusClientRTU.
- LMIC (LoRaWAN) y pila HAL asociada.
- PlatformIO como toolchain recomendado.
Grupos
Flujo general
- Arranque: setup() inicializa Serial/SPI, ModbusClientRTU, colas y tareas.
- Descubrimiento: initialDiscoveryTask emite órdenes FC03→EventManager, que delega en MB; parseAndStoreDiscoveryResponse llena slaveList.
- Planificación: initScheduler deriva scheduleList; DataRequestScheduler publica eventos de muestreo en queueEventos_Scheduler.
- Gestión de eventos: EventManager prioriza scheduler vs periférico, crea tokens, invoca MB.addRequest y registra contexto en requestBuffer.
- Callbacks Modbus: handleData/handleError encapsulan respuestas y las envían a queueRespuestas, actualizando fallos y limpiando scheduler según sea necesario.
- Formateo: DataFormatter decide si la respuesta es descubrimiento o muestreo; usa BitPacker y formatAndEnqueueSensorData para generar SensorDataPayload y los envía a queueSensorDataPayload.
- Agregación: DataAggregatorTask consume payloads, arma un Activate Byte y construye el mensaje final con construirPayloadUnificado, que deposita en queueFragmentos.
- Transmisión LoRaWAN: tareaLoRa toma fragmentos, espera semaforoEnvioCompleto y llama a LMIC_setTxData2; tareaRunLoop mantiene os_runloop_once.
Colas y sincronización