Cómo LoRa convierte chirps en datos

Resumen

La radio LoRa transmite datos mediante paquetes estructurados y una técnica llamada Chirp Spread Spectrum, que codifica información en señales de radio moduladas en frecuencia. Entender cómo se arma un paquete, qué es un chirp y cómo se mide la potencia en decibelios es lo que te permite programar comunicaciones confiables en C antes de tocar una sola línea de código.

¿Cómo se envían los mensajes en LoRa?

LoRa es una radio FM, es decir, modulada en frecuencia. Eso significa que para mandar un mensaje variamos la frecuencia de la onda a lo largo del tiempo. Y aquí tienes dos caminos posibles.

El primero es el formato raw: usas la radio LoRa solo como medio físico, pero tú defines tu propio algoritmo para interpretar las ondas. No es lo común, pero existe [02:00].

El segundo, y el que casi siempre vas a usar, es packetized: mensajes con una estructura estandarizada que LoRa ya define por ti.

¿Qué estructura tiene un paquete LoRa?

El estándar permite dos formatos de paquete:

  • Cabecera implícita: preámbulo + payload + CRC. El tamaño del mensaje es fijo por estándar.
  • Cabecera explícita: preámbulo + header con configuración (tamaño, si lleva CRC, etc.) + payload + CRC opcional.

El preámbulo funciona como un ruido de radio que avisa a los receptores: "algo importante viene en camino". El payload es la carga útil. Y el CRC es un código de verificación calculado sobre el payload; si no coinciden, asumes que el paquete se corrompió y lo pides de nuevo [03:30].

¿Cuántos bytes puedes mandar en un paquete LoRa? Con cabecera implícita, el tamaño es fijo y para fines prácticos lo limitamos a 240 bytes por mensaje. Puede variar entre 152 y poco más de 240 según la configuración.

Redes como LoRaWAN usan cabecera explícita y agregan reglas adicionales sobre qué información debe llevar el header.

¿Por qué importa el tamaño del paquete?

Como los mensajes viajan por el aire, mientras más grande es el paquete, más tiempo ocupa la frecuencia y más bloqueas a otros dispositivos que quieran usar el mismo canal.

Por eso existen reglas claras: no puedes transmitir todo el tiempo. Debes dejar pausas entre paquete y paquete, varias veces más largas que el propio paquete, para que otros sensores puedan emitir. Imagina una red con múltiples sensores: si uno solo acapara la señal, los demás quedan mudos [05:30].

Esta convivencia es la que vuelve a LoRa útil para despliegues con muchos nodos.

¿Qué es un chirp y cómo codifica datos?

LoRa usa una técnica llamada Chirp Spread Spectrum. Un chirp es una onda de radio cuya frecuencia cambia con el tiempo: si aumenta, lo llamamos up chirp (línea que sube); si disminuye, down chirp (línea que baja).

Graficados con tiempo en el eje horizontal y frecuencia en el vertical, los chirps se ven como líneas inclinadas que ocupan un ancho de banda específico.

¿Cómo se arma un paquete con chirps?

La secuencia es así:

  1. Preámbulo: varios up chirps seguidos de dos down chirps que marcan el inicio del mensaje.
  2. Payload codificado: cada chirp se divide en segmentos, y según en qué punto se hace la división intermedia, ese chirp representa un valor numérico distinto.
  3. CRC: si está configurado, cierra el mensaje.

Por ejemplo, si divides un chirp en 100 pedacitos y la división cae en el segmento 25, ese chirp representa el valor 25. Esos valores luego se convierten en binario y eso es lo que tu programa en C recibe e interpreta [09:00].

¿Qué es un símbolo en LoRa? Es la unidad mínima de información codificada en un chirp. Dos chips (sin R) forman un símbolo, y una serie de símbolos forman un paquete. Funciona como un alfabeto de radio.

¿De qué depende cuánta información cabe en un chirp?

La física manda. Si los segmentos son demasiado pequeños, el ruido los confunde. Si el chirp dura más tiempo, puedes dividirlo en más segmentos y mandar más datos por símbolo, pero la tasa de transmisión baja. Si el chirp es muy corto, la tasa sube pero codificas menos información en cada símbolo.

Por eso configurar bien la antena y los parámetros de tu radio cambia todo: frecuencia, tamaño de paquete, tiempo de espera entre envíos.

¿Cómo se ve esto en tiempo real?

Con un SDR (Software Defined Radio), una antena universal capaz de escuchar muchas frecuencias, puedes capturar paquetes LoRa reales. En el video del usuario Alexandre Fernández se observa una captura a 915 MHz con potencia de recepción de -134 dBm [12:30].

Ahí ves cómo:

  • La frecuencia varía dentro del ancho de banda marcado en verde (de 915.00 a 915.014 MHz).
  • Se dibujan los chirps en la sección inferior.
  • Primero llega el preámbulo, luego los dos down chirps y enseguida el payload.
  • Entre paquete y paquete hay una pausa obligatoria.

¿Cómo se mide la potencia de la señal?

Aquí entran dos unidades clave: dB (decibelios) y dBm (decibelios referidos a un milivatio).

Los dB miden un factor de cambio relativo: cuánto se multiplica la potencia entre entrada y salida. No es una escala lineal, es logarítmica, así que cada incremento pequeño en dB representa un salto grande en potencia real.

Los dBm ya son una unidad absoluta: miden cuántos milivatios de potencia tiene una señal puntual, por ejemplo, la que recibe tu antena LoRa en un momento dado.

¿Por qué los dBm en LoRa salen negativos? Porque mides pérdida de señal, no ganancia. Cero significaría que llega la señal completa. Valores como -120 o -125 dBm indican que estás al borde de perder la comunicación.

Entonces, mientras más cerca de cero esté tu lectura, mejor recepción tienes. Y si te acercas a -125 dBm, prepárate: la señal se está cayendo [18:00].

Con la teoría de paquetes, chirps y potencia clara, ya tienes el mapa completo para entender qué pasa por debajo cuando programes la comunicación LoRa en C. Cuéntame en los comentarios qué configuración piensas usar en tu proyecto.