|
|
void | os_getArtEui (u1_t *buf) |
| | Funciones de configuración LMIC (placeholders).
|
| void | onEvent (ev_t ev) |
| | Callback de eventos LMIC/LoRaWAN.
|
| void | initLoRa () |
| | Inicializa la pila LMIC y configura LoRaWAN (ABP, US915).
|
| void | tareaLoRa (void *pvParameters) |
| | Tarea dedicada al envío de datos por LoRaWAN.
|
| void | tareaRunLoop (void *pvParameters) |
| | Tarea del runloop LMIC.
|
|
| static u1_t | NWKSKEY [16] |
| | Claves ABP y dirección de dispositivo (DEMO).
|
| const lmic_pinmap | lmic_pins |
| | Mapa de pines para el radio SX127x de la TTGO LoRa32.
|
Resumen
Este módulo gestiona la transmisión LoRaWAN usando LMIC:
- Inicializa la pila LMIC y la HAL del dispositivo (TTGO LORA 32 V2.1).
- Administra la construcción y envío de frames desde queueFragmentos.
- Supervisa eventos LMIC (EV_TXCOMPLETE, join, duty cycle) y sincroniza mediante semaforoEnvioCompleto.
Estructura y componentes
- Configuración
- Parámetros de red (OTAA/ABP), canales y región.
- HAL y pinmap SPI/Radio.
- Transporte hacia LMIC
- Fragmento: bloque binario listo para transmisión (producido por agregación en Data Format).
- Tareas/Callbacks
API principal
- Entrada
- Salida
- Funciones/Callbacks
- LMIC_setTxData2(port, data, len, confirmed).
- onEvent(ev) manejo de estados y errores.
- tareaLoRa, tareaRunLoop.
- Configuración
- LMIC_reset(), LMIC_setTxData2(), LMIC_setClockError(), seteo de canales/región.
Uso
Resumen del flujo:
1) Arranque LoRaWAN
- Inicializa HAL/SPI/Radio y resetea LMIC (LMIC_reset()).
- Configura OTAA/ABP, región y canales.
- Crea tareaRunLoop y tareaLoRa.
2) Envío de datos
- tareaLoRa bloquea en queueFragmentos, arma el frame y llama LMIC_setTxData2.
- Evita colisiones verificando LMIC.opmode & OP_TXRXPEND.
3) Eventos LMIC
- onEvent(EV_TXCOMPLETE): libera semaforoEnvioCompleto y opcionalmente reprograma próximo envío.
- onEvent(EV_JOINED/EV_JOINING): controla el estado de join.
- Maneja duty cycle y reintentos según la región.
Buenas prácticas (LoRaWAN)
- Verificar OP_TXRXPEND antes de enviar para no romper duty cycle.
- Usar puertos de aplicación coherentes y tamaños de payload dentro del límite regional.
- Minimizar trabajo dentro de onEvent; delegar a tareas cuando sea posible.
- Ajustar LMIC_setClockError() si el cristal tiene desviación notable.
- Asegurar reintento de join con backoff y registrar estados para diagnóstico.
◆ initLoRa()
Inicializa la pila LMIC y configura LoRaWAN (ABP, US915).
- Llama os_init() y LMIC_reset().
- Ajusta LMIC_setClockError() (1%) para tolerancia del cristal.
- Configura sesión ABP con LMIC_setSession() y región US915 (LMIC_selectSubBand(7)).
- Desactiva ADR y LinkCheck para simplificar el flujo.
- Note
- Ajustar sub-banda, DR y potencia según gateway/región.
◆ onEvent()
Callback de eventos LMIC/LoRaWAN.
Maneja eventos de la pila LMIC y sincroniza el flujo de transmisión mediante semaforoEnvioCompleto.
- EV_TXCOMPLETE: indica fin de TX y libera el semáforo.
- TXRX_ACK: se informa si se recibió ACK de la red.
- Parameters
-
| ev | Evento reportado por LMIC. |
◆ tareaLoRa()
| void tareaLoRa |
( |
void * | pvParameters | ) |
|
Tarea dedicada al envío de datos por LoRaWAN.
◆ tareaRunLoop()
| void tareaRunLoop |
( |
void * | pvParameters | ) |
|
Tarea del runloop LMIC.
Ejecuta os_runloop_once() en un bucle para procesar timers y eventos internos de LMIC.
◆ lmic_pins
| const lmic_pinmap lmic_pins |
Initial value:= {.nss = 18,
.rxtx = LMIC_UNUSED_PIN,
.rst = LMIC_UNUSED_PIN,
.dio = {26, 33, 32}}
Mapa de pines para el radio SX127x de la TTGO LoRa32.
Define NSS, DIO0-DIO2 y pines no usados por LMIC.
◆ NWKSKEY
Initial value:= {
0xC2, 0x5B, 0x0A, 0x78, 0xA8, 0x0A, 0x63, 0x1D,
0x86, 0xC8, 0x1B, 0xA3, 0x3A, 0x9E, 0x36, 0xEF
}
Claves ABP y dirección de dispositivo (DEMO).
- Warning
- Claves en texto plano, reemplazar en producción.