LoRa es una tecnología de comunicación de datos inalámbrica que utiliza una técnica de modulación de radio que puede generarse mediante chips transceptores LoRa de Semtech.
Esta técnica de modulación permite la comunicación a larga distancia de pequeñas cantidades de datos (lo que implica un ancho de banda bajo), alta inmunidad a interferencias y un consumo de energía mínimo. Por lo tanto, permite la comunicación a larga distancia con bajos requisitos de energía.
Frecuencias LoRa
LoRa utiliza frecuencias sin licencia disponibles en todo el mundo. Estas son las frecuencias más utilizadas:
868 MHz para Europa
915 MHz para América del Norte
Banda de 433 MHz para Asia
Dado que estas bandas no requieren licencia, cualquiera puede usarlas libremente sin pagar ni obtener una licencia.
Aplicaciones de LoRa
Las características de largo alcance y bajo consumo de LoRa lo hacen perfecto para sensores que funcionan con batería y aplicaciones de bajo consumo en:
Internet de las cosas (IoT)
Domótica
Comunicación de máquina a máquina
Por lo tanto, LoRa es una buena opción para los nodos de sensores que funcionan con una pila botón o con energía solar y que transmiten pequeñas cantidades de datos.
Por tanto LoRa no es adecuado para proyectos que:
Requiere transmisión de datos a alta velocidad;
Necesita transmisiones muy frecuentes;
Están en redes altamente pobladas.
Topologías LoRa
Se puede utilizar LoRa en:
Comunicación punto a punto
Una red LoRa (usando LoRaWAN por ejemplo)
Comunicación punto a punto
En la comunicación punto a punto, dos dispositivos habilitados para LoRa se comunican entre sí mediante señales de RF.
Por ejemplo, esto es útil para intercambiar datos entre dos placas ESP32 equipadas con chips transceptores LoRa que están relativamente lejos una de otra o en entornos sin cobertura Wi-Fi.
A diferencia de Wi-Fi o Bluetooth, que solo admiten comunicaciones de corta distancia, dos dispositivos LoRa con una antena adecuada pueden intercambiar datos a larga distancia.
Se puede configurar fácilmente tu ESP32 con un chip LoRa para transmitir y recibir datos de forma fiable a más de 200 metros de distancia (se puede obtener mejores resultados según tu entorno y la configuración de LoRa). También existen otras soluciones LoRa con un alcance de más de 30 km.
LoRaWAN
También puedes construir una red LoRa utilizando LoRaWAN.
El protocolo LoRaWAN es una especificación de red de área amplia de baja potencia (LPWAN) derivada de la tecnología LoRa, estandarizada por LoRa Alliance. Para más información, se pueden consultar los sitios web de LoRa Alliance y The Things Network.
¿Cómo puede ser útil LoRa en proyectos de domótica?
Imaginemos que queremos medir la humedad de un campo. Aunque no está lejos de casa, probablemente no tenga cobertura wifi. Por lo tanto, se puede construir un nodo sensor con un ESP32 y un sensor de humedad que envíe las lecturas de humedad una o dos veces al día a otro ESP32 mediante LoRa.
El último ESP32 tiene acceso a Wi-Fi y puede ejecutar un servidor web que muestra las lecturas de humedad.
Este es solo un ejemplo que ilustra cómo puede utilizarse la tecnología LoRa en proyectos ESP32. Se puede ver un proyecto similar en Aprende ESP32 con Arduino IDE.
ESP32 con LoRa
En esta sección se muestra cómo empezar a usar LoRa con ESP32 usando el IDE de Arduino. Como ejemplo, construiremos un transmisor y un receptor LoRa sencillos.
El transmisor LoRa enviará un mensaje de "hola" seguido de un contador para realizar pruebas. Este mensaje puede reemplazarse fácilmente con datos útiles, como lecturas de sensores o notificaciones.
Para hacer el montaje se necesitan los siguientes componentes:
2 placas ESP32 DOIT DEVKIT V1
2 módulos transceptores LoRa (RFM95)
Placa de conexión LoRa RFM95 (opcional)
Cables
Placa de pruebas
Alternativa:
2x TTGO LoRa32 SX1276 OLED
En lugar de usar un ESP32 y un módulo transceptor LoRa independiente, existen placas de desarrollo ESP32 con un chip LoRa y una pantalla OLED integrada, lo que simplifica considerablemente el cableado. Placa OLED TTGO LoRa32 SX1276: Introducción a Arduino IDE.
Preparación del IDE de Arduino
Hay un complemento para el IDE de Arduino que permite programar el ESP32 con él y su lenguaje de programación.
Instalación de la biblioteca LoRa
Existen varias bibliotecas disponibles para enviar y recibir fácilmente paquetes LoRa con el ESP32. En este ejemplo, usaremos la biblioteca Arduino-LoRa de Sandeep Mistry.
Abre tu IDE de Arduino y ve a Sketch > Incluir biblioteca > Administrar bibliotecas. Busca " LoRa ". Selecciona la biblioteca LoRa resaltada en la figura a continuación e instálala.
Obtención de módulos transceptores LoRa
Para enviar y recibir mensajes LoRa con el ESP32, usaremos el módulo transceptor RFM95. Todos los módulos LoRa son transceptores, lo que significa que pueden enviar y recibir información. Necesitarás dos.
También puede utilizar otros módulos compatibles como las placas Semtech basadas en SX1276/77/78/79, incluidas: RFM96W, RFM98W, etc.
Alternativamente, existen placas ESP32 con LoRa y pantalla OLED incorporadas, como el módulo WiFi ESP32 Heltec o la placa TTGO LoRa32.
Antes de adquirir su módulo transceptor LoRa, asegúrese de comprobar la frecuencia correcta para su ubicación. Por ejemplo, en Portugal se puede usar una frecuencia entre 863 y 870 MHz o 433 MHz. Para este proyecto, utilizaremos un RFM95 que opera a 868 MHz.
Preparación del módulo transceptor RFM95
Si tiene una placa de desarrollo ESP32 con LoRa incorporado, puede omitir este paso.
El transceptor RFM95 no es compatible con la placa de pruebas. Una fila común de pines de 2,54 mm no encaja en los pines del transceptor. Los espacios entre las conexiones son más cortos de lo habitual.
Hay algunas opciones que puede utilizar para acceder a los pines del transceptor.
Puedes soldar algunos cables directamente al transceptor;
Rompa los pines del cabezal y suelde cada uno por separado;
O puedes comprar una placa de expansión que haga que los pines sean compatibles con la placa de pruebas.
Hemos soldado un cabezal al módulo como se muestra en la siguiente figura.
De esta manera puedes acceder a los pines del módulo con cables puente normales, o incluso poner algunos pines de cabecera para conectarlos directamente a una placa de pruebas.
Antena
El chip transceptor RFM95 requiere una antena externa conectada al pin ANA.
Se puede conectar una antena real o construir una con un cable conductor, como se muestra a continuación. Algunas placas de expansión incluyen un conector especial para añadir una antena adecuada.
La longitud del cable depende de la frecuencia:
868 MHz: 86,3 mm (3,4 pulgadas)
915 MHz: 81,9 mm (3,22 pulgadas)
433 MHz: 173,1 mm (6,8 pulgadas)
Para nuestro módulo, necesitamos un cable de 86,3 mm soldado directamente al pin ANA del transceptor. Tenga en cuenta que usar una antena adecuada ampliará el alcance de la comunicación.
Cableado del módulo transceptor LoRa RFM95
El módulo transceptor LoRa RFM95 se comunica con el ESP32 mediante el protocolo de comunicación SPI. Por lo tanto, utilizaremos los pines SPI predeterminados del ESP32. Conecte ambas placas ESP32 a los módulos transceptores correspondientes, como se muestra en el siguiente diagrama esquemático:
Aquí están las conexiones entre el módulo transceptor LoRa RFM95 y el ESP32:
- ANA: Antena
- GND: GND
- DIO3: no conectar
- DIO4: no conectar
- 3,3 V: 3,3 V
- DIO0: GPIO 2
- DIO1: no conectar
- DIO2: no conectar
- GND: no conectar
- DIO5: no conectar
- RESET:GPIO 14
- NSS:GPIO 5
- SCK:GPIO 18
- MOSI:GPIO 23
- MISO:GPIO 19
- GND: no conectar
Nota: El módulo transceptor RFM95 tiene 3 pines GND. No importa cuál use, pero debe conectar al menos uno.
Por razones prácticas, hemos creado este circuito en una placa de pruebas. Es más fácil de manejar y los cables no se desconectan. Puedes usar una placa de pruebas si lo prefieres.
Primer programa para el emisor LoRa
Abre tu IDE de Arduino y copia el siguiente código. Este programa se basa en un ejemplo de la biblioteca LoRa. Transmite mensajes cada 10 segundos mediante LoRa. Envía un "hola" seguido de un número que se incrementa en cada mensaje.
/********* Rui Santos & Sara Santos - Random Nerd Tutorials Modified from the examples of the Arduino LoRa library More resources: https://RandomNerdTutorials.com/esp32-lora-rfm95-transceiver-arduino-ide/ *********/ #include <SPI.h> #include <LoRa.h> //define the pins used by the transceiver module #define ss 5 #define rst 14 #define dio0 2 int counter = 0; void setup() { //initialize Serial Monitor Serial.begin(115200); while (!Serial); Serial.println("LoRa Sender"); //setup LoRa transceiver module LoRa.setPins(ss, rst, dio0); //replace the LoRa.begin(---E-) argument with your location's frequency //433E6 for Asia //868E6 for Europe //915E6 for North America while (!LoRa.begin(868E6)) { Serial.println("."); delay(500); } // Change sync word (0xF3) to match the receiver // The sync word assures you don't get LoRa messages from other LoRa transceivers // ranges from 0-0xFF LoRa.setSyncWord(0xF3); Serial.println("LoRa Initializing OK!"); } void loop() { Serial.print("Sending packet: "); Serial.println(counter); //Send LoRa packet to receiver LoRa.beginPacket(); LoRa.print("hello "); LoRa.print(counter); LoRa.endPacket(); counter++; delay(10000); }
Echemos un vistazo rápido al código.
Comienza incluyendo las bibliotecas necesarias.
#include <SPI.h> #include <LoRa.h>
Luego, define los pines que usa tu módulo LoRa. Si seguiste el esquema anterior, puedes usar la definición de pin del código. Si usas una placa ESP32 con LoRa integrado, revisa los pines que usa el módulo LoRa en tu placa y asigna los pines correctamente.
#define ss 5 #define rst 14 #define dio0 2
Inicializa el contador que comienza en 0;
int counter = 0;
En la configuración, inicializa el puerto serie.
Serial.begin(115200); while (!Serial);
Configure los pines para el módulo LoRa.
LoRa.setPins(ss, rst, dio0);
E inicializa el módulo transceptor con una frecuencia especificada.
while (!LoRa.begin(868E6)) { Serial.println("."); delay(500); }
Es posible que necesites cambiar la frecuencia para que coincida con la de tu zona. Elige una de las siguientes opciones:
433E6
868E6
915E6
Los módulos transceptores LoRa escuchan los paquetes dentro de su alcance. No importa de dónde provengan. Para garantizar que solo reciba paquetes del emisor, puede configurar una palabra de sincronización (de 0 a 0xFF).
LoRa.setSyncWord(0xF3);
Tanto el receptor como el emisor deben usar la misma palabra de sincronización. De esta forma, el receptor ignora cualquier paquete LoRa que no la contenga.
A continuación, en el bucle se envían los paquetes LoRa. Inicializas un paquete con el método begin Packet.
LoRa.beginPacket();
Escribe datos en el paquete utilizando el método imprimir. Como puede ver en las siguientes dos líneas, enviamos un mensaje de saludo seguido del contador.
LoRa.print("hello "); LoRa.print(counter);
Luego, cierra el paquete con el método fin del Paquete.
LoRa.endPacket();
Después de esto, el mensaje del contador se incrementa en uno en cada bucle, lo que sucede cada 10 segundos.
counter++; delay(10000);
Probando el programa del emisor
Sube el código a tu placa ESP32. Asegúrate de tener la placa y el puerto COM correctos.
Después, abre el Monitor Serie y presione el botón de activación del ESP32. Debería ver un mensaje de éxito como el que se muestra en la figura a continuación. El contador debería incrementarse cada 10 segundos.
Programa del receptor LoRa
Ahora en otro ESP32 carga el siguiente programa. Este programa escucha los paquetes LoRa con la palabra de sincronización que definiste e imprime el contenido de los paquetes en el Monitor Serie, así como el RSSI. El RSSI mide la intensidad relativa de la señal recibida.
/********* Rui Santos & Sara Santos - Random Nerd Tutorials Modified from the examples of the Arduino LoRa library More resources: https://RandomNerdTutorials.com/esp32-lora-rfm95-transceiver-arduino-ide/ *********/ #include <SPI.h> #include <LoRa.h> //define the pins used by the transceiver module #define ss 5 #define rst 14 #define dio0 2 void setup() { //initialize Serial Monitor Serial.begin(115200); while (!Serial); Serial.println("LoRa Receiver"); //setup LoRa transceiver module LoRa.setPins(ss, rst, dio0); //replace the LoRa.begin(---E-) argument with your location's frequency //433E6 for Asia //868E6 for Europe //915E6 for North America while (!LoRa.begin(868E6)) { Serial.println("."); delay(500); } // Change sync word (0xF3) to match the receiver // The sync word assures you don't get LoRa messages from other LoRa transceivers // ranges from 0-0xFF LoRa.setSyncWord(0xF3); Serial.println("LoRa Initializing OK!"); } void loop() { // try to parse packet int packetSize = LoRa.parsePacket(); if (packetSize) { // received a packet Serial.print("Received packet '"); // read packet while (LoRa.available()) { String LoRaData = LoRa.readString(); Serial.print(LoRaData); } // print RSSI of packet Serial.print("' with RSSI "); Serial.println(LoRa.packetRssi()); } }
Este programa es muy similar al anterior. Tan solo el bucle es diferente.
Es posible que tengas que cambiar la frecuencia y la palabra de sincronización para que coincidan con las utilizadas en el programa del emisor.
En el bucle el código comprueba si se ha recibido un nuevo paquete utilizando el método analizar Paquete.
int packetSize = LoRa.parsePacket();
Si hay un paquete nuevo, leeremos su contenido mientras esté disponible.
Para leer los datos entrantes se utiliza el método leer Cadena.
while (LoRa.available()) { String LoRaData = LoRa.readString(); Serial.print(LoRaData); }
Los datos entrantes se guardan en la variable LoRaData y se imprimen en el Monitor Serie.
Finalmente, las siguientes dos líneas de código imprimen el RSSI del paquete recibido en dB.
Serial.print("' with RSSI "); Serial.println(LoRa.packetRssi());
Prueba del programa del receptor LoRa
Sube este código a tu ESP32. En este punto, deberías tener dos placas ESP32 con diferentes programas: el emisor y el receptor.
Abra el Monitor Serie del Receptor LoRa y presione el botón de activación del Transmisor LoRa. Debería empezar a recibir los paquetes LoRa en el receptor.
Llevándolo más allá
Ahora, debe probar el alcance de comunicación entre el transmisor y el receptor. El alcance de comunicación varía considerablemente según el entorno (si vive en una zona rural o urbana con muchos edificios altos). Para probar el alcance de comunicación, puede agregar una pantalla OLED al receptor LoRa y dar un paseo para ver hasta donde puede comunicarse.






















No hay comentarios:
Publicar un comentario