LoRaWAN
LoRaWAN (Red de Área Amplia de Largo Alcance) es un protocolo de comunicación inalámbrica diseñado para transmisiones de datos de bajo consumo y largo alcance. Se utiliza principalmente en aplicaciones de IoT (Internet de las Cosas) donde los dispositivos necesitan enviar pequeñas cantidades de datos a largas distancias.
LoRaWAN opera en frecuencias de radio sin licencia y puede soportar una gran cantidad de dispositivos con bajas tasas de datos, lo que lo hace ideal para aplicaciones como ciudades inteligentes, agricultura, monitoreo industrial y detección ambiental. El protocolo se centra en la eficiencia energética, lo que permite que los dispositivos funcionen con pequeñas baterías durante años.
Hardware utilizado
El objetivo de este blog es demostrar la comunicación entre dos PLC Raspberry Pi, cada uno equipado con un módulo LoRa, y un gateway LoRaWAN. La configuración implica enviar datos desde un módulo LoRa a otro y agregar esos datos para enviarlos a la red LoRaWAN. Hemos utilizado:
- DosTwo Raspberry Pi PLC 21 V6 con módulo de expansión LoRa.
- Un sensor analógico conectado a I0.12 en ambos PLC.
- El Gateway Indoor de The Things Network.
Configuración del Gateway
Para configurar el gateway, hemos seguido esta sencilla guía:
Archivos Python
Para poder leer datos de un sensor analógico, primero necesitamos instalar la librería de Python de Industrial Shields. Las instrucciones sobre cómo instalarla se pueden encontrar aquí:
A continuación, necesitarás descargar cuatro archivos Python. Los archivos lora.py i lorawan.py son librerías utilizadas para comunicarse con el módulo LoRa y la red LoRaWAN. Los archivos sendertest.py i receivertest.py manejan la transmisión y recepción de datos entre los dos PLC Raspberry Pi y el gateway LoRaWAN.
Haz clic en los íconos para descargar los archivos; asegúrate de colocarlos en la misma carpeta:
Una vez descargados, los archivos aún no estarán listos para ejecutarse. Algunas variables deben configurarse para que coincidan con tu configuración de hardware.
El archivo sendertest.py está diseñado para enviar datos desde un PLC Raspberry Pi a otro. Utiliza la ranura de expansor 1 (EXP1_RST) y se comunica a través del puerto serie ttySC0. Si tu módulo LoRa está instalado en la ranura de expansor 2, necesitarás modificar:
- Cambiar ttySC0 a ttySC1 en la línea 16 de sendertest.py.
- Cambiar EXP1_RST a EXP2_RST en las líneas 8 y 11 de sendertest.py.
De manera similar, en el archivo receivertest.py, que recibe datos y los envía al gateway LoRaWAN, deberás:
- Cambiar ttySC0 a ttySC1 en la línea 20 de receivertest.py.
- Cambiar EXP1_RST a EXP2_RST en las líneas 17 y 30 de receivertest.py.
La ranura de expansor 1 es la más cercana al puerto Ethernet, en caso de que no estés seguro de qué ranura de expansor está utilizando tu módulo LoRa.
Estos archivos también están configurados para usar la frecuencia europea por defecto. Si necesitas usar una frecuencia diferente, puedes modificarla en sendertest.py en la línea 21 y en receivertest.py en la línea 60.
Creando el dispositivo final
Para crear el dispositivo final, deberás ir a la pestaña de Aplicaciones en The Things Stack Sandbox y agregar una nueva aplicación. Luego, configura un nuevo dispositivo final haciendo clic en "+ Registrar dispositivo final".
Es muy importante configurar correctamente los siguientes ajustes:
- Método de entrada: Selecciona "Ingresar las especificaciones del dispositivo final manualmente".
- Plan de frecuencias: Si estás en Europa, selecciona "Europa 863-870 MHz (SF9 para RX2 - recomendado)".
- Versión de LoRaWAN: 1.0.2.
- Versión de Parámetros Regionales: 1.0.2 revisión B.
- JoinEUI: Este identificador de 64 bits debe coincidir con el AppEUI en receivertest.py (línea 23).
- DevEUI: Debe coincidir con el DevEUI en receivertest.py (línea 24).
- AppKey: Debe coincidir con el AppKey en receivertest.py (línea 22).
Puedes usar los valores predeterminados proporcionados en el script o personalizarlos, pero deben coincidir con la configuración de tu dispositivo final.
Después de configurar el dispositivo final, navega a la pestaña "Payload formatters", selecciona "Custom Javascript formatter", pega el siguiente código y guarda los cambios.
OTAA y ABP
OTAA (Activación por Aire) y ABP (Activación por Personalización) son dos métodos para conectar dispositivos LoRaWAN a una red:
- OTAA:
- Los dispositivos se unen dinámicamente a la red intercambiando claves con el servidor.
- Más seguro, ya que las claves son únicas y pueden actualizarse periódicamente.
- Requiere más comunicación inicial (solicitudes de unión).
- ABP:
- Los dispositivos están preconfigurados con claves fijas y no necesitan unirse.
- Menos seguro, ya que las claves son estáticas y pueden reutilizarse.
- Inicio más rápido ya que no se requiere proceso de unión.
Los pasos explicados en la sección Creando el dispositivo final son para OTAA por defecto. Si deseas usar ABP, después de configurar la Versión de Parámetros Regionales, deberás hacer clic en Mostrar activación avanzada y cambiar a ABP.
Si has usado OTAA con el mismo módulo LoRa antes, es posible que debas ir a Settings -> Network Layer y hacer clic en Reset session and Mac state para que funcione correctamente.
receivertestABP.py
Pruebas
Una vez que todo esté configurado, puedes comenzar las pruebas ejecutando los archivos sendertest.py y receivertest.py cada uno en un PLC diferente.
Navega a la carpeta que contiene los archivos Python y ejecútalos usando:
El script sendertest.py transmitirá datos desde un módulo LoRa, mientras que receivertest.py recibirá estos datos, los combinará con lecturas locales del sensor y enviará los datos agregados al gateway LoRaWAN.
Tomará unos segundos aplicar la configuración al módulo LoRa, pero después de un breve tiempo debería comenzar a recibir y enviar mensajes como este:

En la página del dispositivo final, deberías comenzar a ver los datos que se están enviando a LoRaWAN:

Para obtener más información sobre las funcionalidades individuales de envío y recepción de datos utilizando LoRa y LoRaWAN, puedes referirte a las siguientes publicaciones:

Configuración de comunicación avanzada: dos Raspberry Pi PLCs con módulos LoRa y un gateway LoRaWAN