LoRa

Test de alcance 1 a través de LoRa 433 Mhz

Este montaje es para comprobar el alcance o distancias en las que pueden comunicarse dos módulos LoRa de 433 Mhz modelo SX1278 (Ai-Thinker LoRa-02).

Los dos módulos LoRa SX1278 están manejados de un lado por una placa NodeMCUv3 (ESP8266) y del otro extremo por una placa ESP32 DEVKITV1.

En esta prueba la placa NodeMCUv3 (ESP8266) funciona emitiendo un paquete cada 5 segundos en el que envía la palabra "HOLA " más un contador de paquetes enviados.


Vídeo del funcionamiento de este montaje (Formato: .mp4 - Tamaño 6 MB)...

Ver un vídeo con el funciomaniento del montaje


Emisor LoRa con NodeMCUv3 (ESP8266) y SX1278 a 433 MHz

Conexiones entre la placa ESP8266, el módulo LoRa y la pantalla LCD

La pantalla LCD 16x2 caracteres va conectada con un conversor a I2C usando solo dos conectores además de los de alimentación.

La alimentación de todos los circuitos se realiza con 4 pilas de 1,5V conectadas en serie que dan 6V.

LoRa con NodeMCUv3 y SX1278 (Ai-Thinker LoRa-02)

Conexiones entre la NodeMCUv3, el módulo LoRa SX1278 y el LCD 16x2

NodeMCUv3 (ESP8266)LoRa SX1278LCD 16x2
S3 DIO0 -
GND - GND
Vin - VCC
3V3 3.3V -
GND GND -
D8 NSS -
D7 MOSI -
D6 MISO -
D5 SCK -
D2 - SDA
D1 - SCL
D0 - -

Programa utilizado en el EMISOR manejado por la ESP8266 (NodeMCUv3)

// Envía un paquete LoRa con una placa SX1278 de 433 Mhz manejada desde NODEMCUv3 (ESP8266)
// Se envía un paquete cada 5 segundos. Cada paquete es un texto "HOLA " + un contador
// Circuitos alimentados con 4 pilas AA en serie que dan 6V

#define SS 15
#define RST 16
#define DIO0 10  // GPIO10 = S3

// Manejo de la pantalla LCD 16x2 mediante I2C
#include <LiquidCrystal_I2C.h>
#include <LoRa.h>

// Configura el número de columnas y filas de la pantalla LCD
int lcdColumns = 16;
int lcdRows = 2;

// Configura la dirección del LCD en el I2C y el número de columnas y filas de la pantalla
// Para chequear la dirección del LCD en el I2C se puede ejecutar un programa "I2C scanner"
LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows);  
//LiquidCrystal_I2C lcd(0x3F, lcdColumns, lcdRows);  

int contador = 0;
int fuerza = 0;

void setup(){
  lcd.init();
  // Activa la retroiluminación del LCD
  lcd.backlight();
  // Sitúa el cursor en la primera columna, primera fila
  lcd.setCursor(0, 0);
  lcd.print("J I D S  05/2023");
  lcd.setCursor(0, 1);
  lcd.print("alinos.sytes.net");
  delay(2000);

  // Inicialización del módulo LoRa - Configuración de la frecuencia (433 Mhz) y pins usados
  LoRa.setPins(SS, RST, DIO0);
  if (!LoRa.begin(433E6)) {
    lcd.setCursor(0, 1);
    lcd.print("Error LoRa");
    delay(2000);
    while (1);
  }
}

void loop(){
  lcd.clear(); 
  lcd.setCursor(0, 0);
  lcd.print("Enviando mensaje");
  lcd.setCursor(0, 1);
  lcd.print(contador);

  LoRa.beginPacket();
  LoRa.print("HOLA ");
  LoRa.print(contador);
  LoRa.endPacket();

  contador++;
  delay(5000);
}

Pulsa aquí para descargar el código "test-alcance-lora433mhz-nodemcuv3.ino"


NodeMCUv3 funcionando como emisor LoRa

NodeMCUv3 funcionando como emisor LoRa


Receptor LoRa con ESP32 (ESP32DEVKITV1) y SX1278 a 433 MHz

Conexiones entre la placa ESP32, el módulo LoRa y la pantalla LCD

La pantalla LCD de 16x2 caracteres va conectada en paralelo, no se usa conversor I2C.

La alimentación de todos los circuitos se realiza con un PowerBank que da 5V por puerto micro-USB.

LoRa con ESP32 DEVKITV1 y SX1278 (Ai-Thinker LoRa-02)

Conexiones entre la ESP32 DEVKITV1, el módulo LoRa SX1278 y el LCD 16x2

-
ESP32 DEVKITV1LoRa SX1278LCD 16x2
D32 - D7 (pin 14)
D33 - D6 (pin 13)
D25 - D5 (pin 12)
D26 - D4 (pin 11)
D14 RST
GND - GND (pin 1 y 16)
VIN - Vcc (pin 2 y 15)
3V3 3.3V -
GND GND -
D2 DIO0 -
RX2 - RS (pin 4)
D5 NSS -
D18 SCK -
D19 MISO -
D21 - EN (pin 6)
D23 MOSI -
- - Pot 10K (pin 3)

Programa utilizado en el RECEPTOR manejado por la ESP32 (DEVKITV1)

/* Recibe paquetes LoRa usando una placa SX1278 de 433 Mhz manejada por un 
   ESP32 DEVKITV1 y los muestra el paquete recibido en una pantalla LCD de 
   16 caracteres x 2 líneas que está conectada en paralelo (sin I2C)
   Los circuitos están alimentados por un PowerBank de 5V: Goodis GD-PB1157 que
   se conecta por la entrada micro-usb de la ESP32.
   Utiliza un potenciómetro de 10K Ohms para regular la intensidad del LCD

            Potenciómetro
LCD         intensidad LCD     ESP32
----------  --------------  -----------
1, 5, 16          1            GND
2, 15             3            3.3V
3                 2
4  (RS)                        D16
6  (EN)                        D21
11                             D26
12                             D25
13                             D33 
14                             D32
15                             3.3V
16                             GND

*/

#include <LiquidCrystal.h>
#include <LoRa.h>
#define SS 5
#define RST 14
#define DIO0 2

//              [ RS,EN,D4,D5,D6,D7 ]  <--- Pins del LCD
LiquidCrystal lcd(16,21,26,25,33,32);

int contador = 0;
int fuerza = 0;
int columna = 0;

void setup(){
  // Inicializa el LCD
  lcd.begin(16, 2);
  // Activa la retroiluminación del LCD
  // lcd.backlight();

  lcd.clear(); 
  // Posiciona el cursor en la primera columna, primera fila de la pantalla
  lcd.setCursor(0, 0);
  lcd.print("J I D S  05/2023");
  lcd.setCursor(0, 1);
  lcd.print("alinos.sytes.net");
  delay(2000);
  lcd.clear(); 

  // Inicialización del módulo LoRa de 433 Mhz
  LoRa.setPins(SS, RST, DIO0);
  if (!LoRa.begin(433E6)) {
	lcd.clear();
    lcd.setCursor(0, 1);
    lcd.print("Error LoRa");
    delay(2000);
    while (1);
  }
}

void loop(){
  // lcd.clear(); 
  lcd.setCursor(0, 0);
  lcd.print("Escuchando...");

  int packetSize = LoRa.parsePacket();
  if (packetSize) {
    lcd.clear(); 
    lcd.setCursor(0, 0);
    lcd.print("Paquete Recibido");

    // Lectura y mostrado del paquete en el LCD
    columna = 0;
    while (LoRa.available()) {
      lcd.setCursor(columna, 1);
      lcd.print((char)LoRa.read());
      columna++;
    }

    // Muestra en el LCD el RSSI o fuerza de recepción
    lcd.setCursor(8, 1);
    lcd.print("RSSI");
    lcd.setCursor(13, 1);
    lcd.print(LoRa.packetRssi());
    delay(3000);
    lcd.clear(); 
  }
}

Pulsa aquí para descargar el código "test-alcance-lora433mhz-esp32devkitv1.ino"


Receptor LoRa con ESP32 DEVKITV1

Receptor LoRa con ESP32 DEVKITV1

La intensidad de la señal es baja. El RSSI puede oscilar entre un -64 y un -76 si están demasiado juntos el emisor y receptor y llega a -10 en algunos casos (Valores RSSI: cuanto más negativos significa mayor pérdida de señal. Por ejemplo: 0 RSSI = valor ideal, -80 RSSI = valor mínimo para establecer conexión)...

RSSI con el emisor y receptor LoRa juntos

La mejor intensidad de señal obtenida está en torno a un RSSI de -10 teniendo el emisor y el receptor separados unos 10 metros y con diversas parecedes por el medio.

RSSI con el emisor y receptor LoRa separados unos 6 metros y con diversas paredes por el medio

La conexión funciona bien dentro de la vivienda. En la misma casa, las señales Wi-Fi requieren repetidores o PLC para abarcar toda la vivienda y la señal de estos módulos LoRa llegan bien a todos los puntos de la casa sin necesidad repetidores. En las escaleras de los pisos inferiores y superiores también se reciben los paquetes aunque el alcance no parece llegar más allá de unos 100 metros. Se ha utilizado la potencia de salida que viene configurada en los módulos LoRa y en el emisor se han usado 4 pilas de 1,5V.

Cinco pisos más abajo la recepción ya no funciona bien y ya se empiezan a recibir mal los paquetes o se dejan de recibir por completo.

Información relativa a las señales de LoRa