Tras 4 artículos por fin ha llegado el momento donde podremos desplegar nuestro primer nodo LoRa y un Gateway LoRa que nos permitirá interactuar con nuestro nodo a través de internet y nos dará pie para otros artículos sobre como integrar esta tecnología y diferentes sensores para formar un proyecto global como los que se muestran de ejemplo al final del artículo.
Por lo que sin más vamos a proceder con el tutorial paso a paso para poder enviar nuestro primer “Hola Mundo”.
Antes de seguir, quiero avisar que los enlaces de compra son orientativos, he puesto Amazon por la rapidez de envío y porque en caso de problemas suele ser más sencillo el servicio post-venta como fue mi caso con uno de los módulos. Por eso pongo enlaces de productos probados y avisar también que esos enlaces están sujetos al programa de afiliados de Amazon para evitar comentarios posteriores y dejar clara la transparencia del blog.
Además me gustaría recalcar que es importante comprar todos los dispositivos que funcionen en el mismo rango de frecuencias en este caso 868MHz en Europa y 915 en América por lo que aseguraros bien en caso de comprar algún dispositivo.
Después de haber mostrado y comentado todas las características de las redes LORA vamos a mostrar un ejemplo práctico de despliegue de una red LORA con fines didácticos. Para lo cual se va a utilizar material con un coste contenido por debajo de 150€, a pesar de saber que esa cifra ya es un desembolso importante pero actualmente se trata de una tecnología que no está plenamente extendida por lo que su precio es más elevado pero si que es de fácil adquisición, de manera que nos permita estudiar de primera mano los detalles de este tipo de dispositivos además de contribuir a la expansión de este tipo de redes.
La red que vamos a desplegar se trata de una red de corto alcance para el estándar LORA en torno a los 500m o 1Km sobre todo al querer limitar el desembolso en material, pero los conceptos y despliegue sería igual en el caso de querer desplegar una red de largo alcance, únicamente deberíamos sustituir algunos elementos de la red por otros orientados a largas distancias.
En primer lugar, vamos a escoger nuestros clientes LORA, en este caso como hemos dicho la potencia de emisión no es un problema por lo que el factor que nos ayudará a decidirnos por un dispositivo u otro será la facilidad de uso y en este caso hemos optado por los módulos Heltec Wifi LORA con un ESP32 como SoC del que pasamos a detallar sus características:
Microcontrolador: ESP32 (240MHz LX6 dual-Core, 520KB SRA)
WiFi and Bluetooth
Chip LoRa: SX1276 (Versión de 868 y 915MHz)
Potencia: 18dBm (Versión americana)
Display: 0.96 pulgadas / 128×64 OLED
Conversor UART: CP2102
Batería opcional de 3.7V
Consumo en reposo: 800uA
Enlace de compra: https://amzn.to/2V0Gmrd
Para la conexión a Internet y acceso remoto a los datos, confiaremos en un Gateway ya montado de fábrica con un precio contenido, evitando soluciones más manuales que a pesar de reducir costes, pueden darnos más quebraderos de cabeza y problemas de compatibilidad entre componentes llegando al punto de hacernos perder tiempo y dinero en el despliegue.
Para ello usaremos el Gateway Dragona LG01, el cual a pesar de ser un Gateway Single Channel, es decir, solo nos permitirá la conexión simultanea de un único nodo LORA nos va a permitir un despliegue sencillo de nuestro primer Gateway LORA como veremos después, aunque antes haremos un repaso por sus características con el fin de conocer lo más a fondo posible nuestro hardware y saber hasta dónde podremos llegar con el:
SoC – MIPS 24k – 400MHz (Parte de gestión de red)
LoRa: Chipset SX1276
Lora SoC: ATMega328P (32Kb EPROM, 2Kb RAM)
Interfaces:
10/100Mb RJ45
WiFi 802.11 b/g/n
Enlace de compra: https://amzn.to/2YwmeOq
Además, podemos ver la arquitectura interna del dispositivo, ya que es una arquitectura muy típica que podemos utilizar a la hora de montar o desplegar nuestro propio Gateway construido a mano por nosotros.
En el podemos ver como disponemos de un SoC con conectividad a internet mediante Ethernet y Wifi y mediante un interfaz SPI conectamos al módulo SX1276 que nos aporta la conectividad LoRa. A mayores este dispositivo dispone de una conexión USB para poder disponer de conexión 3/4G mediante un modem USB.
Con este hardware ya tendremos lo necesario para poder transmitir paquetes mediante la tecnología LORA, en este caso vamos a realizar una prueba sencilla enviando el típico “Hola mundo” pero una vez tengamos la red funcionando podremos utilizarlo para cualquier otra aplicación como hemos comentado al inicio de este apartado.
El primer paso será disponer de nuestro Gateway LORA funcionando de manera que podamos conectar nuestros nodos con Internet y nuestro servidor IoT. Para ello nos vamos a ayudar de la plataforma The Things Network (https://www.thethingsnetwork.org/) ya que de esta manera tendremos nuestro alcance una red desplegada dentro de la que integrarnos, lo cual nos va a facilitar el despliegue de nuestros dispositivos IoT.
Crearemos una cuenta dentro de la plataforma usando el siguiente enlace https://account.thethingsnetwork.org/register y rellenamos los datos que se nos solicitan:
Y una vez creada la cuenta podremos acceder a la consola de administración donde podremos dar de alta nuestras aplicaciones y nuestros Gateway como veremos a continuación:
Pulsaremos sobre la imagen de Gateways, y encontraremos un enlace que dice “Register gateway” que nos llevará a los datos que debemos completar en nuestro Gateway:
Debemos completar todos los datos y es muy importante marcar la opción: “I’m using the legacy packet forwarder” para que los paquetes emitidos o recibidos a través de LORA pasen a la parte IP del Gateway y lleguen hasta nuestras aplicaciones alojadas en Internet.
El Gateway ID debe ser único por eso puede facilitarnos mucho la elección de ese ID el usar la dirección MAC de nuestro Gateway ya que este identificador debe ser único para cada dispositivo.
Una vez que tenemos nuestro Gateway dado de alta dentro de la plataforma de The Things Network (Desde ahora TTN para poder recordarlo más fácil) debemos pasar a configurar nuestro dispositivo y conectarlo a internet.
Para ello simplemente colocaremos un cable de red en la toma etiquetada como WAN y el otro extremo del cable irá a alguna boca libre de nuestro router, una vez tengamos red en el dispositivo podremos acceder al panel web de administración para comenzar con la configuración.
Las credenciales por defecto son:
usuario -> root
password -> dragino
Y una vez dentro del panel de administración podremos comenzar con el proceso de configuración de la parte LoRa de nuestro Gateway, para lo cual debemos saber que este Gateway dispone de un microcontrolador ATmega328P igual que el de Arduino al cual está conectado nuestro chip LoRa.
Para poder cargar el programa que se encargará de gestionar debemos dirigirnos al menú Sensor -> Flash MCU
Y aquí deberemos cargar la última versión Del software que esté disponible en la página web del fabricante (http://www.dragino.com/downloads/index.php?dir=motherboards/lg01/sketch/) en este caso la v004.
Una vez que obtengamos el mensaje de confirmación de que el firmware se ha cargado correctamente debemos reiniciar el dispositivo para que los cambios tengan efecto y se cargue durante el arranque del sistema.
Para comprobar que todo está cargado y funcionando correctamente es necesario acceder al menú: Sensor –> MicroController y revisar que la configuración coincide con la que se muestra a continuación:
Con el sketch cargado es el momento de pasar a configurar el chip LoRa para que trabaje dentro de los rangos de frecuencia permitidos para Europa, y además configuraremos los datos de conexión con la plataforma TTN tal y como podemos ver a continuación:
Es importante configurar correctamente el Spread Factor tal y como vemos en la imagen sobre todo en el apartado que afecta a la transmisión LoRa es decir la Frecuencia TX y el “Transmit Spreading Factor” ya que estos dos valores son usados posteriormente por la plataforma TTN para comunicarse con los módulos LoRa y pueden darnos problemas a la hora de hacer la autenticación de nuestros nodos en la red.
Por último, debemos configurar el tipo de servidor IoT que vamos a usar en nuestro Gateway ya que soporta diferentes protocolos, en nuestro caso seleccionaremos LoRaWAN como servidor IoT.
Una vez finalizado el proceso podremos volver a la plataforma TTN para comprobar que realmente nuestro Gateway está levantado y funcionando tal y como podemos ver en la siguiente imagen donde nos indica el estado junto a un indicador verde.
Una vez que hemos comprobado que nuestro gateway funciona vamos a pasar a configurar un nodo que se una a la red para poder transmitir mensajes. En este caso esta labor la hemos delegado en un módulo de desarrollo de la marca Heltec que nos facilita mucho la creación de un nodo al disponer ya de todo el hardware montado.
La finalidad de este primer nodo será simplemente el envío de una cadena de caracteres a través de LoRa y que se muestre dentro de una aplicación que crearemos en la plataforma TTN, es decir hacer nuestro primer “Hola mundo” dentro de un entorno LoRaWAN.
Puede parecer algo muy sencillo, pero veremos que es la mejor manera de ir repasando cada concepto visto anteriormente, vamos a comenzar en primer lugar creando una aplicación dentro de la plataforma TTN que nos permitirá recibir los datos enviados por nuestro nodo y visualizarlos, para posteriormente poder recogerlos o hacer con ello lo que consideremos necesario. Para ello dentro de la consola de TTN pulsaremos sobre el botón “Applications”.
Tendremos un enlace llamado “add application” que pulsaremos para poder acceder al formulario donde introduciremos los datos de nuestra aplicación.
Como vemos, se nos solicita únicamente un ID que sea único para nuestra aplicación ya que el resto de campos vienen configurados por defecto, aunque podremos cambiarlos después si lo necesitamos. Sobre todo, es importante tener configurado el Handler con la dirección “ttn-handler-eu” ya que tal y como vimos antes es el servidor que configuramos en nuestro Gateway.
El identificador de aplicación EUI se genera automáticamente, pero puede ser cambiado posteriormente, esto tiene como finalidad el poder añadir dispositivos a esta red que puedan venir con ciertos datos pregrabados de fábrica que necesitemos usar en nuestra red.
Veremos que nuestra aplicación se ha creado y está a la espera de que la alimentemos de datos añadiendo nuevos nodos a ella que será nuestro siguiente paso.
Para ello en el apartado de “Devices” pulsaremos sobre el enlace “register device” para acceder a un nuevo formulario que nos ayudará a añadir nuestro nodo.
Únicamente tenemos que asignar un “Device ID” que deberemos mantener siempre que queramos seguir usando este dispositivo en la aplicación ya que es algo que no podremos cambiar.
Vemos un campo marcado en rojo a propósito y es que salvo que tengamos un “Device EUI” concreto que nos haya venido con nuestro nodo, debemos pulsar sobre el icono de las flechas para que pase a ser un icono de un lápiz y sea la plataforma la que genere ese EUI.
Aunque esté creada nuestra aplicación antes de poder utilizada es necesario configurar otra serie de valores que hemos visto anteriormente como es el tipo de autenticación que determinaran la manera en la que deberemos configurar nuestros nodos.
En este caso al tratarse de un entorno de pruebas sin datos críticos y donde únicamente tendremos un nodo que gestionar, usaremos el sistema ABP de autenticación, pero en caso de disponer de una red más extensa de nodos o datos más sensibles configuraríamos un sistema de autenticación OTAA.
Una vez finalizado este proceso tendremos todo lo necesario en la plataforma TTN para poder pasar a configurar nuestro nodo.
Para cargar los diferentes programas o sketch dentro de nuestro ESP32 necesitaremos realizar algunas configuraciones en el IDE de Arduino que será el programa que usaremos para realizar la carga de los programas en la memoria de nuestro nodo.
Para ello debemos ir a Archivo -> preferencias y en la parte de Gestor de URLs Adicionales de Tarjetas añadir el siguiente enlace:
https://dl.espressif.com/dl/package_esp32_index.json
Posteriormente iremos al menú Herramientas -> Placa -> Gestor de placas
Y en el cuadro que nos aparece simplemente buscaremos por “esp32” e instalaremos la librería que nos aparece:
Una vez instalada podremos ir a Herramientas à Placa y seleccionar la placa de desarrollo que tenemos:
Y posteriormente configurarla para poder utilizarla y cargar los programas de manera correcta, para lo cual usaremos la siguiente configuración:
Con esto ya podremos comenzar a utilizar nuestra placa de la misma manera que se hace con las placas de Arduino, facilitando así el desarrollo y carga de programas. Para poder controlar y el chip LoRa de nuestra placa de desarrollo, vamos a hacer uso de una librería que nos facilitará el acceso a todas las funciones de nuestra placa.
Para ello debemos descargarnos la librería desde el enlace de su desarrollador
https://github.com/matthijskooijman/arduino-lmic una vez descargado el archivo *.zip que contiene la librería LMIC (LoRaMAC-in-C) procedemos a cargarla en el IDE de Arduino pulsando sobre Programa à Incluir librería à Añadir biblioteca .ZIP
Y seleccionamos el archivo *.ZIP que acabamos de descargarnos, si todo ha sido correcto entonces ahora tendremos disponibles diferentes ejemplos que nos van a ayudar en esta primera conexión con el entorno LoRa, para ello iremos a Archivo -> Ejemplos -> Arduino LMIC -> ttn-abp
Nos cargará el programa de ejemplo para el sistema de autenticación ABP, pero es necesario saber que este programa está orientado al uso de Arduino como placa de control del chip LoRa por lo que necesitamos hacer algunos cambios en el mismo para que funcione ya que el pinout del interfaz SPI es diferente en la MCU de ESP32 respecto a los Atmega de Arduino.
Lo primero será buscar el comentario “// Pin mapping” y sustituir el contenido de la constante lmic_pinmap por el siguiente:
// Pin mapping
const lmic_pinmap lmic_pins = {
.nss = 18,
.rxtx = LMIC_UNUSED_PIN,
.rst = 14,
.dio = {26, 33, 32},
};
Además de ese cambio debemos inicializar el interfaz SPI en los siguientes pines colocando la instrucción mostrada a continuación dentro de la función “void setup()”
SPI.begin(5, 19, 27);
Con estas modificaciones tendríamos nuestro programa adaptado a la placa de desarrollo Heltec, pero aún debemos cambiar algunas líneas más para incluir los datos de conexión a nuestra aplicación para que al comunicar con el Gateway, este sepa donde tiene que enviarlos.
Estas líneas son las siguientes:
static const PROGMEM u1_t NWKSKEY[16] = { 0xF4, 0x1F, 0xA5, 0x0D, 0x41, 0x88, 0x98, 0xEB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
static const u1_t PROGMEM APPSKEY[16] = { 0x33, 0x89, 0xCA, 0x2A, 0x5D, 0x21, 0xCF, 0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
static const u4_t DEVADDR = 0x26011BEC ;
Donde sustituiremos los valores entre llaves por los que nos indica la plataforma TTN del mismo modo que el identificador Device Address:
Con estos cambios realizados ya estamos listos para cargar el programa en nuestra placa de desarrollo, si no ha habido ningún error tendremos nuestro programa cargado que enviará el mensaje “Hello, Word!” al iniciar.
Una vez reiniciado nuestro nodo podremos ver en la plataforma TTN el tráfico generado por el nodo y los datos emitidos y recibidos en el apartado “payload”, toda esta información es transmitida en formato hexadecimal y mostrada directamente por nuestra aplicación ya que no le hemos indicado que haga nada con dicha información.
También podremos ver de manera general el tráfico generado en nuestro Gateway ya que podríamos disponer de varias aplicaciones o si nuestro nodo es público nos puede interesar conocer el tráfico que se está generando para saber el estado y saturación de nuestro Gateway.
Por último, como leer los mensajes que recibamos en hexadecimal puede ser más incómodo podemos utilizar la herramienta de decodificación que nos ofrece TTN, para ello deberemos programar un pequeño código usando JavaScript que nos convierta la cadena hexadecimal en una cadena de texto ASCII.
Ahora veremos que nos aparece un nuevo campo en los datos de la aplicación donde nos aparece la información decodificada, siendo esto especialmente útil por ejemplo en el caso de estar recibiendo información desde varios sensores conectados a un único nodo para organizar como mostrar los datos recibidos.
Conociendo ya un poco más sobre las características de LoRa y las redes LPWAN podremos tener más claro al tipo de proyectos y entornos al que se pueden aplicar de una manera más habitual, dejando una relación de escenarios donde ya se aplica con éxito:
El tutorial completo puedes descargarlo en PDF desde el siguiente enlace: