arduino-LoRa icon indicating copy to clipboard operation
arduino-LoRa copied to clipboard

How to use two lora modules for receiving and sending data, but in two different channels

Open MateoGiova opened this issue 2 years ago • 2 comments

Hello everyone! I already succeded interfacing two modules with the same spi bus, but I have another issue. Previously I thought on using different sync word, 0xA3 for receiving, and 0xD1 for sending, each one in different modules SX1278, but the receiving is really poor. I checked the Rssi with a default code for receiving, and with that I receive very well, so the problem is in the sync word. How can I "create" two channels without sync word? My code is:

#include <SPI.h>
#include <Wire.h>


#define LORATX_SS     5
#define LORATX_SCK    18
#define LORATX_MOSI   23
#define LORATX_MISO   19
#define LORATX_RST    32
#define LORATX_DIO0   25
#define TX_WORD       0xD1

#define LORARX_SS     15
#define LORARX_SCK    14
#define LORARX_MOSI   13
#define LORARX_MISO   12
#define LORARX_RST    4
#define LORARX_DIO0   26
#define RX_WORD       0xA3

LoRaClass Loratx;
LoRaClass Lorarx;

int packetSize = 0;
String loraData;

void enableTx(){
  digitalWrite(5, LOW);
  digitalWrite(15, HIGH);
  Loratx.setSyncWord(TX_WORD);
}
void enableRx(){
  digitalWrite(5, HIGH);
  digitalWrite(15,LOW);
  //Lorarx.setSyncWord(RX_WORD);
}

void setup() {
  Serial.begin(115200);
 
  SPI.begin(LORATX_SCK, LORATX_MISO, LORATX_MOSI);

  pinMode(5, OUTPUT);
  pinMode(15, OUTPUT);
  Lorarx.setPins(LORARX_SS, LORARX_RST, LORARX_DIO0);
  Loratx.setPins(LORATX_SS, LORATX_RST, LORATX_DIO0);
  
  while(!Lorarx.begin(433E6)){
    Serial.println("[Lorarx] Falló la inicialización!");
    delay(1000);
  }
  Serial.println("[Lorarx] Inicializado.");
  
  while(!Loratx.begin(433E6)){
    Serial.println("[Loratx] Falló la inicialización!");
    delay(1000);
  }
  Serial.println("[Loratx] Inicializado.");
  enableRx();
  delay(100);
  Serial.println("Listo para encontrar paquetes.");
}

void loop() {
  packetSize = Lorarx.parsePacket();
  if(packetSize){
    Serial.println("Se encontró un paquete.");
    while (Lorarx.available()) {
      loraData += Lorarx.readString();
      }
      Serial.print(loraData);
      Serial.println(Lorarx.packetRssi());
      /*enableTx();
      Serial.println("Mandando paquete");
      Loratx.beginPacket();
      Loratx.print(loraData);
      Loratx.endPacket();
      delay(1000);
      Serial.println("Paquete enviado.");
      enableRx();
      Serial.println("Recibiendo...");*/
      loraData = "";
    }
  }

MateoGiova avatar May 16 '23 16:05 MateoGiova

Using the Invert IQ functions is commonly used for exactly this.

morganrallen avatar May 16 '23 22:05 morganrallen

You could do what LoRaWAN does, ie use different frequencies for sending and receiving. You keep everything else the same.

Kongduino avatar May 17 '23 01:05 Kongduino