viernes, 28 de noviembre de 2025

LoRa SX1278

El módulo LoRa utilizado aquí es el SX1278 Ra-02 que opera en 433MHz.


Transmisor Arduino LoRa SX1278

El diagrama del circuito del transmisor Arduino LoRa SX1278 se muestra a continuación. El LoRa SX1278 no es compatible con 5 V, por lo que no debe suministrarse a 5 V, ya que la placa podría dañarse. Use 3,3 V de Arduino para conectarlo al pin VCC.

Receptor Arduino LoRa SX1278

A continuación se muestra el diagrama del circuito del receptor Arduino LoRa SX1278. Además, se conecta una pantalla OLED para leer los valores recibidos.

Preparación del IDE de Arduino

Tras completar la configuración del hardware, el siguiente paso consiste en trabajar con el IDE de Arduino. Al usar Arduino para interactuar con el módulo LoRa, existe una completa biblioteca LoRa desarrollada por Sandeep Mistry, disponible para su uso inmediato.

Para agregar la biblioteca, abra su IDE de Arduino y siga Sketch -> Incluir biblioteca -> Administrar bibliotecas

Código del transmisor

#include <SPI.h>
#include <LoRa.h>

int counter = 0;

void setup() {
Serial.begin(9600);
while (!Serial);

Serial.println("LoRa Sender");

if (!LoRa.begin(433E6)) {
Serial.println("Starting LoRa failed!");
while (1);
}
LoRa.setTxPower(20);
}


void loop() {

Serial.print("Sending packet: ");
Serial.println(counter);
// send packet
LoRa.beginPacket();
LoRa.print("hello ");
LoRa.print(counter);
LoRa.endPacket();
counter++;
delay(5000);

}

Código del receptor

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <SPI.h>
#include <LoRa.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

String inString = ""; //hold incoming characters
String myMessage = ""; // hold compleye message
int led = 3;

void setup() {
Serial.begin(9600);

if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
delay(2000);
display.clearDisplay();
display.display();

while (!Serial);
Serial.println("LoRa Receiver");

display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(20, 30);
// Display static text
display.println("LoRa Receiver");
display.display();

if (!LoRa.begin(433E6)) {
Serial.println("Starting LoRa failed!");
while (1);
}
pinMode(led, OUTPUT);
}

void loop() {
String message = "";
// try to parse packet
int packetSize = LoRa.parsePacket();
if (packetSize) {

Serial.print("Received packet '");

digitalWrite(led, HIGH);
delay(1000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 10);
// Display static text
display.println("Received packet - ");
display.display();

Serial.println(packetSize);

// read packet
while (LoRa.available()) {

// Serial.print((char)LoRa.read());

message += (char)LoRa.read();

}

// display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(20, 30);
// Display static text
display.println(message);
display.display();
Serial.print(message);

// print RSSI of packet
Serial.print("' with RSSI ");
Serial.println(LoRa.packetRssi());
digitalWrite(led, LOW);
}
}







No hay comentarios: