Lora y Lorawan Con Arduinoblocks y Esp32 Steamakers
Lora y Lorawan Con Arduinoblocks y Esp32 Steamakers
LoRa y LoRaWAN
Arduinoblocks + ESP32 STEAMakers con
Página 2 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
Índice
LoRa y LoRaWAN........................................................................................................................ 4
Módulo LoRa para ESP32 STEAMakers....................................................................................8
LoRa con arduinoblocks.......................................................................................................... 10
Bloques LoRa.........................................................................................................................11
JSON formato para intercambio de datos.............................................................................. 15
Ejemplos LoRa.......................................................................................................................... 19
LoRa 1: Emisor contador + Receptor OLED.........................................................................19
LoRa 2: Emisor T/H + Receptor OLED.................................................................................20
LoRa 3: Timbre remoto......................................................................................................... 22
LoRa 4: Apertura de puerta remota...................................................................................... 24
LoRa 5: Sensores distribuidos de T/H (maestro-esclavos)...................................................26
LoRa 6: Datalogger remoto...................................................................................................29
LoRa 7: Central de alarma y sensores de presencia............................................................31
LoRa 8: Gateway LoRa <-> Telegram.................................................................................. 33
LoRa 9: Control RGB remoto................................................................................................36
LoRaWAN con arduinoblocks.................................................................................................. 38
Bloques LoRaWAN:............................................................................................................... 40
Ejemplos LoRaWAN.................................................................................................................. 42
LoRaWAN 1: Estación meteorológica...................................................................................42
LoRaWAN 2: Medidor de luz ambiental................................................................................ 44
LoRaWAN 3: Pulsador de emergencia................................................................................. 45
LoRaWAN 4: Detector de ocupación para plazas de aparcamiento.....................................46
LoRaWAN 4: Geolocalizción GPS en tiempo real................................................................ 47
Información y enlaces:............................................................................................................. 49
Página 3 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
LoRa y LoRaWAN
LoRa (Long Range) es una tecnología de comunicación inalámbrica diseñada para transmitir datos a
largas distancias con un consumo de energía muy bajo. Permite enviar pequeños paquetes de
información, como temperatura o ubicación, de un dispositivo a otro, incluso cuando están bastante
separados, como a kilómetros de distancia. Es ideal para aplicaciones como monitoreo de sensores
remotos o seguimiento de activos.
La tecnología se desarrolló en Francia en el 2012 por Cycleo y adquirida posteriormente por Semtech
que se encargaría de impulsarla. Usa un tipo de modulación de amplio espectro, ideal para tolerar el
ruido y para que una señal realice caminos múltiples..
Para utilizar LoRa solo necesitamos al menos dos dispositivos con un módulo LoRa para enviar y recibir
información entre ellos.
Las frecuencias de funcionamiento varían dependiendo del país y suelen ser las bandas 433 MHz, 868
MHz y 915 MHz.
LoRaWAN (Long Range Wide Area Network), por otro lado, es un protocolo de red que utiliza la
tecnología LoRa para conectar múltiples dispositivos a una red central. Imagina que LoRa es como el
camino por el que viajan los datos y LoRaWAN es la autopista que organiza y gestiona ese tráfico de
datos. LoRaWAN permite que muchos dispositivos LoRa se comuniquen de manera eficiente con una
estación base o una red central, lo que es útil para casos de uso como ciudades inteligentes o
agricultura de precisión.
Página 4 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
Para utilizar LoRaWAN, necesitas algunos componentes y seguir algunos pasos clave:
Página 5 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
Conexión de dispositivos
Un solo gateway permite conectar miles de dispositivos, una cifra que aumenta con cada nueva puerta
que se añade. Así, se facilita la creación de una red barata, amplia y con un consumo energético bajo.
Los aparatos ligados mandarán sus datos en tiempo real y durante largos periodos. Para ello, existen
diferentes formas de cobertura LoRawan: redes privadas, redes de terceros y operadoras de
dispositivos. Además, estas características ayudan a escalar la arquitectura.
El proceso de escalado se efectúa añadiendo módulos a todo el sistema. Esto hace posible la conexión
de millones de sensores que se siguen mediante geolocalización. Cada puerta de enlace se encarga de
gestionar miles de dispositivos, toda una ayuda para aumentar la capacidad de la red.
Largo Alcance
Esta es una de las características más destacadas por las implicaciones que conlleva. La tecnología
está diseñada para funcionar en ciudades y atravesar todo tipo de obstáculos. En presencia de
numerosos edificios y construcciones, dispone de un alcance de tres kilómetros. Sin embargo, la
capacidad aumenta a los 20 km en zonas abiertas.
El parámetro SF (Spreading Factor) permite variar el factor de “esparcimiento” que varía la velocidad y
el alcance de la emisión.
https://www.thethingsnetwork.org/docs/lorawan/spreading-factors/
https://docs.arduino.cc/learn/communication/lorawan-101
Página 6 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
Permite mantener dispositivos con baterías pequeñas sin necesidad de recargarlos durante largos
periodos. Esta característica reduce la intervención humana, así como las necesidades energéticas.
No importa que la red se extienda a través de decenas de kilómetros, ya que estará optimizada desde
un punto de vista energético. De este modo, es más sencillo escalarla sin incurrir en grandes costes.
Los dispositivos que se pueden emplear son muy variados y dependen del objetivo de la red. Ayudan
a adelantarse a problemas en ciernes y prevenirlos de manera adecuada. Algunos ejemplos son los
sensores de humedad, temperatura o de conductividad eléctrica.
● Smart cities.
● Smart industry.
● Agricultura.
● Logística.
● Cadena de suministro.
Seguridad
La seguridad de la red es primordial en despliegues IoT y LoRaWAN define dos capas de criptografía.
Una única clave de sesión de red de 128bit compartida por el end-point y servidor de red. Una única
clave (AppSKey) de aplicación de 128bit compartida end-to-end y la capa de aplicación
La regla del 1%
En Europa la banda 868 MHz tiene un par de limitaciones. La primera es la potencia de emisión: 25
mW, que no nos preocupa mucho ya que los módulos que utilizaremos no llegan a tanta. Pero la
segunda si que es importante y debemos evitar violar la regulación.
Esta regla simplificadamente lo que dice es que no podemos transmitir más que el 1% del tiempo. Es
decir si por ejemplo enviar un paquete nos lleva 100 ms, tendremos que mantenernos sin emitir por 900
ms. Como norma general, no envíes más de una vez cada 3 minutos y cumplirás la reglamentación. Si
quieres enviar más a menudo, existen calculadoras para obtener los tiempos entre envío mínimos.
https://loratools.nl/#/airtime
Página 7 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
El módulo utiliza conexión SPI y algunas señales de control extra dependiendo de si utilizamos LoRa o
LoRaWAN en nuestro dispositivo. Para facilidad del conexionado se ha diseñado un módulo específico
listo para conectar a la placa ESP32 STEAMakers directamente:
Página 8 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
Antena externa:
El módulo permite conectar una antena externa mediante el conector IPX. En caso de utilizar antena
externa se debe quitar la antena integrada. La antena externa debe estar diseñada para trabajar en la
frecuencia correcta (868 Mhz, 915 Mhz, etc.)
En caso de utilizar LoRa (sin WAN) podemos deshabilitar los dos pines y así utilizar esos pines con
otros usos, aunque si los dejamos a ON funcionará el modo LoRa y esos pines debemos no conectarlo
a nada.
Por otro lado, si usamos LoRaWAN obligatoriamente el módulo debe tener los dos microinterruptores en
posición ON y no podremos conectar ningún sensor a esos pines.
Modo LoRaWAN D1 = ON D2 = ON
Modo LoRa
(dejando libre los pines io27, io14 para otras conexiones) D1 = OFF D2 = OFF
Recomendación: Deja siempre los microinterruptores a ON y en caso de necesitar pines extras y utilizar
solo conexión tipo LoRa puedes ponerlos a OFF para habilitarlos.
https://shop.innovadidactic.com/es/standard-perifericos/1663-modulo-lora-lorawan-8436574314656.html
https://shop.innovadidactic.com/es/standard-placas-shields-y-kits/1567-placa-esp32-steamakers-no-incl
uye-cable-usb.html
Página 9 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
En este modo tampoco hay un control de acceso al medio ni validación de los datos (ACK) , todo ese
proceso lo debemos supervisar nosotros mismos. Lo habitual son sistemas simples de emisor-receptor,
o un modelo maestros-esclavos donde un dispositivo inicia siempre la comunicación pidiendo la
información a uno de los esclavos que contestará cuando el maestro le requiera.
(En caso de sistemas complejos con multitud de dispositivos se recomienda implementar o utilizar una
red LoRaWAN donde los gateways y servidores de aplicación gestionan la comunicación, la seguridad,
el encriptado de datos y otros aspectos automáticamente)
Página 10 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
Bloques LoRa
Init: Configura el módulo LoRa (ajustado por defecto para el módulo ESP32 STEAMakres LoRa). Si
seleccionamos la opción de encriptación se debe especificar la misma clave de 16 caracteres en el
emisor y receptor (clave de encriptación con caracteres alfabéticos).
8
Send: Envia una trama de datos (máxima longitud 51 ~ 242 bytes/ caracteres)
La longitud máxima de la trama de datos dependerá de la frecuencia (zona del mundo) y de parámetros
internos de la modulación (SF, Bandwith, etc.)
https://www.thethingsnetwork.org/docs/lorawan/regional-parameters/
On Data Received: Evento que se produce cuando se reciben datos. Dentro de ese bloque de evento el
valor del bloque “Received - Data” tendrá el texto con la trama de datos recibida y el valor RSSI
indicando la intensidad de la señal recibida.
Página 11 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
Frequency (MHZ): valor en Mhz en la que trabaja el módulo LoRa. Podemos especificar una banda de
frecuencia específica dentro de los márgenes de nuestro módulo LoRa.
Página 12 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
Por ejemplo si estamos en zona Europea con 868MHz, podemos variar entre: 867.0 y 869.0 MHz
7800 10400 15600 20800 312500 41700 62500 125000 250000 500000
Coding Rate: Los valores admitidos están entre 5 y 8, estos corresponden a tasas de codificación de
4/5 y 4/8. El numerador de la tasa de codificación se fija en 4.
Página 13 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
Gain: Configura la ganancia de LNA para obtener una mejor sensibilidad de RX; de forma
predeterminada, se usa AGC (control automático de ganancia) y no se usa la ganancia de LNA.
Valores de 0 (ganancia automática) hasta el 6.
Página 14 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
El formato de empaquetado de datos “JSON” es una forma sencilla de encapsular varios datos de
información en una misma trama de datos con un formato fácilmente entendible y que ocupa poco
espacio extra en el envío (existen otros tipos como XML con mucha más carga de datos).
JSON es el acrónimo de “JavaScript Object Notation” y es un formato de texto sencillo que permite
encapsular en forma de texto cualquier objeto (un objeto es un concepto dentro de la programación que
encapsula las variables, tipos de datos y valores de un estado del programa o de la información
necesaria, incluyendo jerarquía, listas, valores, tipos de datos, etc.)
Ejemplo JSON: tenemos en un sistema informático el concepto de objeto “vehículo”, una posible
representación en formato JSON sería:
{
“Matricula”: “KLC1245”,
“Año”: 2021,
“Conductor”: {
“Principal”: “Juan”,
“Secundario”: “María”,
},
“Seguro”: “El piñazo SL”,
“Gasolina”: True,
“Gasoil”: False,
“Eléctrico”: False,
“Revisiones”: [2021, 2023,2024],
}
https://www.freeformatter.com/json-formatter.html
https://es.wikipedia.org/wiki/JSON
https://www.youtube.com/watch?v=YYfediyCwAU
El formato JSON de forma práctica en aplicaciones LoRa/LoRaWAN con ESP32 lo vamos a utilizar para
encapsular dentro del bloque de datos ( { } ) varios pares “clave” : “valor” y poder recuperarlos
fácilmente en el receptor a partir del nombre “clave”.
Página 15 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
JSON con datos para controlar un led RGB { “R”: 100, “G”:50, “B”: 0 }
JSON con datos para mover dos servos (S1 , S2) { “S1”: 120, “S2”: 45 }
JSON con datos para enviar con un texto para mostrar en varias pantallas { “P1”: “Hola”, “P2”: “Juanjo” }
remotas (P1, P2)
JSON con datos de eléctrico { “V”: 232.5 , “I”: 0.6 , “Wh”: 326.4, }
Ejemplo sencillo:
Página 16 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
LoRa y LoRaWAN permiten tramas de poca longitud, y además la longitud perjudica notablemente el
tiempo de envío. Cuanto más ahorremos en espacio mejor, en este ejemplo recomendaría usar
nombres “clave” lo más cortos posibles, simplificando lo anterior a “T”, “H”, “L”:
El resultado de la trama a enviar sería por ejemplo algo así (los retornos de carro y espacios no afecta,
lo importante es mantener la estructura y ahorrar en número de caracteres/bytes a transmitir):
La decodifiación de una cadena de texto en formato JSON es sencilla. Se debe analizar y a partir de ahí
podremos extraer los datos de ese nivel. Si hay un subnivel (ramificación) se deberá obtener el valor del
subnivel y volverlo a analizar para acceder a sus datos de forma directa. No hay límite de niveles y
subniveles.
Página 17 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
Durante la comunicación puede haber errores, o el formato del JSON puede ser incorrecto (o no ser
datos JSON) por lo que deberíamso comprobar que se ha podido analizar correctamente los datos.
A la hora de extraer los valores de cada clave (“T”, “H”,...) podemos elegir el bloque que procesará y
obtendrá el valor en el formato correspondiente. Esta elección es importante para recuperar el valor de
la forma correcta. Por ejemplo si recuperamos un valor de forma numérica y no es un valor numérico
válido dará internamente un error.
https://drive.google.com/file/d/1r290vEJVVZtt8yp4PELnxgTEFWqUUBZk/view
Página 18 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
Ejemplos LoRa
Programa Emisor
Programa receptor:
Página 19 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
En el receptor se recibe la trama JSON, se analiza y se extraen los datos para visualizar en la pantalla
OLED.
Página 20 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
Página 21 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
Programa emisor:
Página 22 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
Programa receptor:
Página 23 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
Receptor:
Página 24 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
Página 25 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
El formato JSON que envía la placa “maestra” va a ser simplemente indicando el ID de la placa que
debe responder. Cada placa debe tener un ID (número de identificación) asignado en el programa:
{ “ID”: 1 }
Las placas contestarán con un formato JSON con el mismo ID y el valor del sensor de temperatura:
Página 26 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
Cada 15s pide los datos a un nodo (primero al nodo 1, después al 2, después al 3, y vuelve al 1)
Al recibir la respuesta la visualiza en la consola serie.
Página 27 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
En una variable inicializamos el número de nodo para cambiarlo fácilmente al subir el programa a cada
nodo. En este ejemplo todos los nodos van a tener el mismo sensor y van a devolver el mismo tipo de
dato (temperatura). Lo único que varía es el número de nodo (ID).
Página 28 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
Programa receptor:
Página 29 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
Programa receptor mejorado con grabación de datos en la tarjeta microSD insertada en el zócalo de la
ESP32 STEAMakers:
Página 30 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
El módulo con el sensor de movimiento emitirá una trama LoRa con el texto “SENSORMOV” en caso de
detectar movimiento.
El receptor al recibir una trama LoRa con el texto “SENSORMOV” activará un led rojo y un zumbador
que empezará a pitar. La alarma se podrá desactivar (resetear) pulsando el pulsador.
Página 31 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
Página 32 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
El nodo remoto tendrá un sensor de luz cuyo valor enviará cada 60s
El nodo remoto tendrá un relé conectado, en caso de recibir el comando “RELE-ON” se activará
El nodo remoto tendrá un relé conectado, en caso de recibir el comando “RELE-OFF” se apagará
Página 33 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
Página 34 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
Ejemplo en funcionamiento:
https://drive.google.com/file/d/15cfrsSBGjL8pgq67x7Syr32BBO714F7M/view
Página 35 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
Esquema emisor-receptor:
Programa emisor:
Página 36 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
Programa receptor:
Página 37 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
Para conectar a una red LoRaWAN debemos asegurarnos de tener los dos microinterruptores del
módulo LoRa en posición ON conforme se muestra en la siguiente figura:
.
Cada módulo LoRa que se conecte a una infraestructura LoRaWAN necesitará unos datos de conexión
que serán configurados dentro del servidor (The Things Stack o similar)
Para la conexión y validación de los nodos a LoRaWAN tenemos dos tipos de conexión:
Página 38 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
Los datos identificativos para cada nodo o dispositivo final serán (OTAA):
Página 39 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
Bloques LoRaWAN:
Init: Inicia el módulo para trabajar en modo LoRaWAN (interruptores a ON obligatoriamente). Si usamos
el módulo personalizado no debemos cambiar la configuración de pines. La frecuencia LoRaWAN en
Europa es 868Mhz, también marcado por defecto.
Connect (OTAA): Conectar (registrarse / JOIN) en la red LoRaWAN mediante autenticación OTAA
Connect (ABP): Conectar (registrarse / JOIN) en la red LoRaWAN mediante autenticación ABP
Send: Envía datos a través de la conexión LoRaWAN, los datos llegarán al servidor LoRaWAN quien
gestionará el envío o almacenamiento a otras aplicaciones (Web, MQTT, bases de datos, etc.)
Data sent successfully?: Bloque que permite obtener la confirmación del servidor de que los datos se
han podido enviar (en el último “Send”)
Página 40 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
On Data received: Evento que se produce al recibir datos hacia el dispositivo. En caso de producirse
los datos los podemos obtener con el bloque “Received data”
Página 41 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
Ejemplos LoRaWAN
Nodo LoRaWAN para recoger datos medioambientales de temperatura, humedad y nivel de CO2.
En una ciudad con infraestructura LoRaWAN podrían repartirse múltiples nodos en diferentes
ubicaciones para recolectar y procesar los datos, así como para emitir avisos.
Página 42 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
Progama:
Página 43 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
Programa:
Página 44 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
Pulsador para aviso de emergencias, permite lanzar un mensaje de alerta dentro de la cobertura de la
red LoRaWAN (por ejemplo para personas mayores dentro de la cobertura de una smartcity)
Programa:
Página 45 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
Programa:
Página 46 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
El sistema envía mediante la red LoRaWAN la posición actual obtenida mediante GPS. Permite hacer
un seguimiento en tiempo real de un vehículo, personas, etc. y visualizarlo en un mapa.
Esquema:
Programa:
Página 47 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
https://www.gps-coordinates.net/
Página 48 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
Información y enlaces:
Arduinoblocks:
http://www.arduinoblocks.com
Página 49 de 50
LoRa y LoRaWAN con arduinoblocks y ESP32 STEAMakers - v1
Página 50 de 50