Select Your Favourite
Category And Start Learning.

Cómo Usar Módulos LoRa con ESP32.

En esta entrada aprenderemos como enviar y recibir mensajes a varios kilómetros de distancia utilizando el modulo con antena LoRa RYLR998. En este ejercicio nos centraremos en comunicar dos antenas.

Componentes

  • 2 Módulos LoRa RYLR998
  • 2 Microcontroladores ESP32

Que es LoRa?

LoRa es una tecnología que utiliza una técnica de modulación que nos permite alcanzar una distancia de comunicación alta (varios kilómetros), pero con poca información (51 – 241 Bytes) muy tolerante a las interferencias y de bajo consumo de energía. Con esta tecnología se pueden tener dispositivos con 10 años de duración sin ninguna recarga, es perfecto para aplicaciones donde dejaremos un sensor por mucho tiempo solo con su batería y en una zona donde no se tenga acceso a internet.

Modulo Transceptor LoRa RYLR998.

El modulo tranceptor RYLR998 cuanta con un modulo de largo alcance LoRa que proporciona una distancia de comunicación alta de espectro extendido y alta inmunidad a las interferencias y bajo consumo de energía. Es altamente recomendado para aplicaciones IoT, seguridad en casa, equipos de monitoreo y control industrial.

RYLR998
PINNombreFunción
1VDDFuente de Alimentación
2NRSTReset
3RXDRecibir
4TXDTransmitir
5GNDTierra
Pinout RYLR998

Estructura de Red.

Se pueden comunicar múltiples módulos LoRa entre si, siempre y cuando estos lleven el mismo Network ID y cada dispositivo debe de tener su dirección. De esta manera se pueden comunicar de punto a punto, de punto a multipunto y multipunto a multipunto, en el caso de que se encuentre otro grupo de antenas cerca pero con diferente Network ID no existirá comunicación entre grupos de antenas. Es importante recalcar que para que exista comunicación entre antenas del mismo grupo ademas de compartir el mismo Network ID deben de estar configuradas con la misma frecuencia y parámetros.

Estructura de red.

Diagrama de Conexiones.

En la siguiente imagen se muestra el diagrama de conexiones para este ejercicio, esto para ambos circuitos (Transmisor y Receptor).

Diagrama de conexiones.

Funcionamiento.

Vamos a configurar dos antenas una sera el transmisor (con adr:1) y la otra sera el receptor (con adr:2), ambas estarán configuradas con el Network ID: 5, el transmisor estará enviando tres valores aleatorios con distintos rangos al receptor. Los valores enviados estarán separados por comas para que cuando recibamos el mensaje en el receptor podamos identificar las comas y así obtener el valor que nos interese, todos estos valores los vamos a imprimir en el monitor serial del IDE Arduino.

Transmisión y Recepción de Datos.

Código Transmisor.

Iniciamos definiendo los pines para utilizar el serial2 ademas declaramos 3 variables que representaran valores de sensores.

// Se definen los pines para utilizar el Serial2
#define RXD2 16
#define TXD2 17

// Valores que se transmitirán
int value1, value2, value3;

Enseguida creamos la función que servirá para enviar los comandos a la antena.

void sendCmd(String cmd)
{
  Serial2.println(cmd);  // Enviar string cmd a módulo LoRa
  delay(500);  // Esperar 500ms a que el módulo reciba el comando
  while (Serial2.available()) {
    Serial.print(char(Serial2.read()));  // Si hay respuesta imprimirla en el monitor serial 
  }
}

En el setup iniciamos la comunicación con el monitor serial y configuramos los parámetros de la antena LoRa.

void setup() {
  Serial.begin(115200);  // Iniciar el monitor serial a 115200 baudios
  Serial2.begin(115200, SERIAL_8N1, RXD2, TXD2);  // Iniciar el Serial2 a 115200
  delay(3000);
  Serial.println("Configurando parámetros antena LoRa");
  delay(1000);
  sendCmd("AT+ADDRESS=1");  // Configurar el address a 1
  delay(1000);
  sendCmd("AT+NETWORKID=5");  // Configurar el Network ID a 5
  delay(1000);
  sendCmd("AT+BAND?");  // Leer la frecuencia configurada
  delay(1000);
  sendCmd("AT+PARAMETER?");  // Leer los parámetros configurados
  delay(1000);
  sendCmd("AT+MODE?");  // Leer el modo configurado
  delay(1000);
}

Por ultimo en el void loop generamos datos aleatorios que se enviaran al circuito receptor.

void loop() {
  // Generar los valores que transmitiremos
  value1 = random(-100,100);
  value2 = random(0,4000);
  value3 = random(1,9);

  String data = String(value1) + "," + String(value2) + "," + String(value3);  // Contruir el mensaje que enviaremos en un solo string
  String datalen = String(data.length());  // Obtener el tamaño del mensaje

  Serial.println("Enviando: " + data);
  sendCmd("AT+SEND=2," + datalen + "," + data);  // Construir el comando AT y enviar al módulo LoRa

  delay(5000);
}

Código Receptor.

Iniciamos definiendo los pines para utilizar el serial2, así como las variables que estarán en el mensaje recibido ademas definimos los strings donde guardaremos las variables del mensaje recibido.

// Se definen los pines para utilizar el Serial2
#define RXD2 16
#define TXD2 17

int varInMsg = 7;  // Variables que estarán en el mensaje recibido
int commasInMsg = varInMsg - 1;  // Calcular las comas que habrá en el mensaje
int keyPos[10];  // Array para almacenar la posición de las comas en el mensaje

// Strings donde guardaremos las variables del mensaje recibido
String msg;
String txId;
String dataLen;
String value1;
String value2;
String value3;
String rssi;
String snr;

Configuramos los parámetros de la antena de igual forma que en el transmisor lo único que cambia es la dirección a la cual le damos el valor de 2.

void sendCmd(String cmd)
{
  Serial2.println(cmd);  // Enviar string cmd a módulo LoRa
  delay(100);  // Esperar 500ms a que el módulo reciba el comando
  while (Serial2.available()) {
    Serial.print(char(Serial2.read()));  // Si hay respuesta imprimirla en el monitor serial 
  }
}

void setup() {
  Serial.begin(115200);  // Iniciar el monitor serial a 115200 baudios
  Serial2.begin(115200, SERIAL_8N1, RXD2, TXD2);  // Iniciar el Serial2 a 115200
  delay(3000);
  Serial.println("Configurando parámetros antena LoRa");
  delay(1000);
  sendCmd("AT+ADDRESS=2");  // Configurar el address a 2
  delay(1000);
  sendCmd("AT+NETWORKID=5");  // Configurar el Network ID a 5
  delay(1000);
  sendCmd("AT+BAND?");  // Leer la frecuencia configurada
  delay(1000);
  sendCmd("AT+PARAMETER?");  // Leer los parámetros configurados
  delay(1000);
  sendCmd("AT+MODE?");  // Leer el modo configurado
  delay(1000);
}

En el void loop obtenemos el mensaje del transmisor, con un ciclo “for” creamos la función para detectar las comas del mensaje recibido después obtenemos los valores de las variables del mensaje recibido y por ultimo imprimimos el mensaje recibido, la posición de las comas y los valores de las variables.

void loop() { //Choose Serial1 or Serial2 as required
  // Esperar por mensaje del transmisor
  while (Serial2.available()) {
    msg = Serial2.readString();
  }
  msg.trim();  // Eliminar espacios antes y después del mensaje

  // Función para detectar las comas del mensaje recibido
  for(int i = 1; i <= commasInMsg; i++)
  {
    keyPos[i] = msg.indexOf(',', keyPos[i-1] + 1);
  }

  // Obtener el valor de las variables del mensaje
  txId = msg.substring(5, keyPos[1]);
  dataLen = msg.substring(keyPos[1] + 1, keyPos[2]);
  value1 = msg.substring(keyPos[2] + 1, keyPos[3]);
  value2 = msg.substring(keyPos[3] + 1, keyPos[4]);
  value3 = msg.substring(keyPos[4] + 1, keyPos[5]);
  rssi = msg.substring(keyPos[5] + 1, keyPos[6]);
  snr = msg.substring(keyPos[6] + 1);

  // Imprimir el mensaje recibido del transmisor
  Serial.println(msg);

  // Imprimir la posición de las comas del mensaje
  Serial.print("Posición de las comas:");
  for(int i = 1; i <= commasInMsg; i++)
  {
    Serial.print(keyPos[i]);
    Serial.print(" ");
  }

  // Imprimir las variables del mensaje
  Serial.println(" ");
  Serial.print("TxId: " + txId);
  Serial.print(" Length: " + dataLen);
  Serial.print(" Value 1: " + value1);
  Serial.print(" Value 2: " + value2);
  Serial.print(" Value 3: " + value3);
  Serial.print(" RSSI: " + rssi);
  Serial.println(" SNR: " + snr);
  delay(1000);
}

En esta parte ya tenemos los códigos del transmisor y receptor listos ya solo queda cargar los códigos al ESP32 para observar el funcionamiento de las antenas LoRa.

Transmisor y Receptor en Funcionamiento.

Video Explicativo.

En seguida les comparto el video donde se explica mas detalladamente el funcionamiento del código de programación de este ejercicio para que despejen todas sus dudas, no olviden dejar su like y suscribirse.

Descarga.

Enlace de descarga con códigos completos:

Enlace de Descarga

Comentarios

Los campos obligatorios están marcados con *