Contenido del curso
Fundamentos de LoRa
Configuración del proyecto
LoRa con ESP32
Aplicaciones con LoRa
Redes LoRa
Configurar ESP32 con LoRa en ESP-IDF
Resumen
Conectar un módulo LoRa a un ESP32 desde Visual Studio Code requiere preparar la librería, configurar los pines físicos y dejar listas las tareas de transmisión y recepción. Aquí encontrarás cómo dejar funcional la comunicación inalámbrica antes de enviar el primer mensaje, ideal para makers que trabajan con ESP-IDF y radios de 915 MHz.
¿Cómo se prepara la librería LoRa.h en ESP-IDF?
Lo primero es incluir la librería en el código principal con #include "lora.h". El detalle es que el repositorio de esta librería no trae un archivo necesario para que ESP-IDF la compile, así que toca crearlo manualmente [01:00].
En la misma carpeta donde vive el component.mk, agrega un archivo CMakeLists.txt con la siguiente estructura:
idf_component_registerpara registrar el módulo ante el proyecto.SRCSapuntando al archivo fuente, en este casolora.c.INCLUDE_DIRSapuntando a la carpetaincludedonde está el.h.
Un typo en este archivo es la causa más común de que falle la compilación, así que revísalo dos veces antes de ejecutar idf.py build.
¿Qué hace idf_component_register en ESP-IDF? Registra un módulo dentro del proyecto, declarando qué archivos fuente exporta y qué carpetas de headers expone para que otros módulos puedan importarlos.
¿Qué funciones ofrece la librería LoRa para ESP32?
Una vez disponible, la librería abre un menú amplio de funciones para controlar la radio [02:30]. Las más relevantes son:
lora_initpara inicializar la comunicación entre el ESP32 y el módulo.lora_set_frequencypara definir la frecuencia de operación en hertz.lora_enable_crcpara activar la verificación de integridad de los mensajes.lora_resetpara reiniciar la radio y limpiar configuración.- Funciones para leer RSSI (intensidad de señal) y SNR (relación señal a ruido).
- Modo sleep para bajo consumo y control de potencia, ancho de banda y coding rate.
El RSSI te dice qué tan fuerte llega la señal, mientras que el SNR mide cómo se comporta esa señal frente al ruido del ambiente. Útiles cuando el aire está saturado de interferencia.
¿Cómo configurar los pines de LoRa con menuconfig?
Antes de programar la lógica, hay que decirle al firmware por dónde está cableado físicamente el módulo. Esa configuración vive en Kconfig y se edita desde la terminal con idf.py menuconfig [04:30].
Dentro del menú, navega hasta Component config > LoRa Configuration y asigna los pines según tu hardware. En el ejemplo del curso se usan estos valores:
- CS: pin 18.
- RESET: pin 23.
- MISO: pin 19.
- MOSI: pin 27.
- SCK: pin 5.
Guarda con S + Enter, confirma y sal con Q. Después corre idf.py build para compilar con la nueva configuración. MISO y MOSI son las líneas que llevan los datos de ida y vuelta entre el ESP32 y la radio, así que un error ahí rompe toda la comunicación.
¿Qué pines necesita un módulo LoRa para SPI? Necesita CS, RESET, MISO, MOSI y SCK. Los tres últimos forman el bus SPI estándar; CS selecciona el chip y RESET reinicia la radio.
¿Cómo inicializar la radio LoRa a 915 MHz?
Para mantener el código ordenado, conviene crear una función dedicada como lora_config_init, evitando colisión de nombres con lora_init que ya existe en la librería [06:50].
Dentro de esa función, el flujo es:
- Un
printf("lora_config_init\n")para confirmar en los logs que se ejecutó. - Llamar a
lora_init()para abrir la comunicación SPI con el módulo. - Definir la frecuencia con
lora_set_frequency(915E6). - Activar verificación con
lora_enable_crc().
La notación 915E6 es la forma corta de escribir 915 millones en C, equivalente a 915 MHz expresados en hertz. La función espera un valor tipo long, y como los megahertz cargan muchos ceros, la notación científica te ahorra errores de tipeo.
¿Por qué habilitar CRC en comunicaciones LoRa?
El CRC (Cyclic Redundancy Check) agrega un código de verificación a cada paquete. Si el mensaje llega corrupto, el receptor lo detecta y lo descarta en lugar de procesar datos basura. Es básicamente tu seguro contra interferencia.
¿Cómo crear tareas FreeRTOS para enviar y recibir con LoRa?
Para que el envío y la recepción no bloqueen al resto de la aplicación, conviene separarlos en tareas paralelas usando FreeRTOS [09:40]. Esto permite que el ESP32 escuche y transmita sin pelearse por el mismo núcleo.
Primero agrega los includes necesarios al inicio del archivo:
#include "freertos/FreeRTOS.h".#include "freertos/task.h".
Luego, dentro de lora_config_init y después de inicializar la radio, crea las dos tareas con xTaskCreate. La función recibe el puntero a la función de la tarea, un nombre, el tamaño del stack (2048 bytes funciona bien), un puntero opcional a parámetros, el nivel de prioridad y una referencia opcional a la tarea.
En el ejemplo se crean task_tx para transmisión y task_rx para recepción, ambas con prioridad 5 y NULL en los argumentos opcionales. Cada función contiene un for(;;) vacío por ahora, listo para llenarse con la lógica de envío y recepción en la siguiente clase.
¿Ya tienes tu ESP32 y tu módulo LoRa cableados? Cuéntame en los comentarios qué pines elegiste para tu setup y si te encontraste con algún detalle raro al compilar la librería.