LoRaWAN en Raspberry Pi

13 de septiembre de 2024 por
Boot & Work Corp. S.L, Arnau Tena

LoRaWAN

LoRaWAN (Long Range Wide Area Network) es un protocolo de comunicación inalámbrica diseñado para la transmisión de datos a larga distancia y bajo consumo de energía. Se utiliza principalmente en aplicaciones IoT (Internet de las Cosas) donde los dispositivos necesitan enviar pequeñas cantidades de datos a grandes distancias.

LoRaWAN opera en frecuencias de radio no licenciadas y puede admitir un gran número de dispositivos con bajas velocidades de datos, lo que lo hace ideal para aplicaciones como ciudades inteligentes, agricultura, monitorización industrial y sensado ambiental. El protocolo se centra en la eficiencia energética, lo que permite que los dispositivos funcionen con baterías pequeñas durante años.

Hardware utilizado

La idea de este blog es leer datos de un sensor analógico y enviarlos a la red LoRaWAN. Para ello, hemos utilizado:

Configuración del Gateway

Para configurar el gateway hemos seguido esta sencilla guía:

Configuración del Gateway

Archivos de Python

Para poder leer datos de un sensor analógico primero necesitamos instalar la librería de Python de Industrial Shields. Las instrucciones para su instalación se pueden encontrar aquí:

python3-librpiplc

Después de eso, necesitarás descargar tres archivos de Python. Los archivos lora.pylorawan.py son bibliotecas utilizadas para comunicarse con el módulo LoRa y LoRaWAN,  analogtest.py lee de una entrada analógica y la envía a LoRaWAN. Haz clic en los iconos para descargar los archivos, asegúrate de colocarlos en la misma carpeta:

analogtest.py

lora.py

lorawan.py


Después de descargarlos, aún no estarán listos para ser ejecutados. Hay variables que deben configurarse para que coincidan con tu dispositivo final en The Things Network.

El archivo analogtest.py está configurado para usar el expansor 1, por lo que si tu PLC tiene el módulo LoRa instalado en el slot 2, tendrás que cambiar ttySC0 por ttySC1 en la línea 8. El expansor 1 es el más cercano al puerto Ethernet, en caso de que no estés seguro de qué slot de expansor utiliza tu módulo LoRa.

Ten en cuenta también que estos archivos están configurados para usar la frecuencia europea. Si necesitas usar una frecuencia diferente, puedes ir a la línea 300 de lora.py y cambiarla.

Creando el dispositivo final (End Device)

Para crear el dispositivo final, deberás ir a la pestaña de Aplicaciones en The Things Stack Sandbox y añadir una nueva aplicación. Una vez creada, puedes configurar un nuevo dispositivo final haciendo clic en "+ Register end device".

Es muy importante configurar correctamente los siguientes ajustes:

  • Input method: Seleccionar "Enter end device specifics manually".
  • Frequency plan: Si estás en Europa, selecciona "Europe 863-870 MHz (SF9 for RX2 - recommended)".
  • LoRaWAN version: 1.0.2.
  • Regional Parameters version: 1.0.2 revision B.
  • JoinEUI: Este identificador de 64 bits debe coincidir con el AppEUI de analogtest.py definido en la línea 11. 
  • DevEUI: Al igual que con JoinEUI, esto debe coincidir con el DevEUI de analogtest.py definido en la línea 12.
  • AppKey: También debe coincidir con el AppKey definido en la línea 10 de analogtest.py.

Puedes usar el JoinEUI, DevEUI y AppKey ya definidos en analogtest.py, pero mientras coincidan con la configuración del dispositivo final, puedes usar los valores que desees.

Después de crear el dispositivo final, ve a "Payload formatters", selecciona "Custom Javascript formatter", pega el siguiente código y guarda los cambios:

function decodeUplink(input) {
  return {
    data: {
      bytes: String.fromCharCode.apply(null, input.bytes)
    },
    warnings: [],
    errors: []
  };
}

OTAA & ABP

OTAA (Over-the-Air Activation) y ABP (Activation by Personalization) son dos métodos para conectar dispositivos LoRaWAN a una red:

  1. 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 refrescarse periódicamente.
    • Requiere más comunicación inicial (join requests).
  2. ABP:
    • Los dispositivos están preconfigurados con claves fijas y no necesitan unirse.
    • Menos seguro, ya que las claves son estáticas y se pueden reutilizar.
    • 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" on para OTAA por defecto. Si quieres usar ABP, después de configurar la "versión de Parámetros Regionales" debes hacer clic en "Show advanced activation" y cambiar a ABP.

Si has utilizado OTAA antes con el mismo módulo LoRa, es posible que tengas que ir a Settings -> Network Layer y hacer clic en "Reset session and Mac state" para que funcione correctamente.

analogtestABP.py

Pruebas​

Después de configurar el dispositivo final, puedes comenzar las pruebas con analogtest.py.

Primero establecemos el pin de reset a alto para habilitar el módulo LoRa:

  • Para el expansor 1, ejecuta: sudo ~/test/[RPIPLC_Version]/[RPIPLC_Model]/set-digital-output EXP1_RST 1
  • Para el expansor 2, ejecuta: sudo ~/test/[RPIPLC_Version]/[RPIPLC_Model]/set-digital-output EXP2_RST 1

Reemplaza [RPIPLC_Version] y [RPIPLC_Model] por los correspondientes a tu PLC.

Navega hasta la carpeta que contiene los tres archivos Python y ejecuta el archivo con python analogtest.py.

Tomará unos segundos aplicar la configuración al módulo LoRa, pero después de un breve tiempo debería comenzar a 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:

Buscar en nuestro blog

Boot & Work Corp. S.L, Arnau Tena 13 de septiembre de 2024
Compartir esta publicación
Etiquetas

¿Estás buscando tu Controlador Lógico Programable ideal?

Echa un vistazo a esta comparativa de producto de varios controladores industriales basados en Arduino.

Comparamos entradas, salidas, comunicaciones y otras especificaciones con las de los equipos de otras marcas destacadas.

Comparativa de PLCs