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)...
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.
Conexiones entre la NodeMCUv3, el módulo LoRa SX1278 y el LCD 16x2
NodeMCUv3 (ESP8266) | LoRa SX1278 | LCD 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"
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.
Conexiones entre la ESP32 DEVKITV1, el módulo LoRa SX1278 y el LCD 16x2
ESP32 DEVKITV1 | LoRa SX1278 | LCD 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"
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)...
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.
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.