Pomoc s diagnostikou ESP32 + LoRa

vpn22

Pomoc s diagnostikou ESP32 + LoRa
« kdy: 16. 09. 2024, 19:17:15 »
Ahoj,

prosím o radu jak diagnostikovat problémy s LoRa komunikací.

Cíl
Cílem je bezdrátová komunikace dvou ESP32 pomocí LoRa point-to-point spoje. První ESP32 v roli vysílače odesílá packety s nějakým obsahem, druhé ESP32 je v roli přijímače a všechny packety, které přijme, pošle přes sériovou linku do PC, kde si je zobrazím přes serial monitor v Arduino IDE.

Hardware
2x ESP32-WROOM-32D (https://www.aliexpress.com/item/1005006336964908.html?spm=a2g0o.order_list.order_list_main.91.6eef1802BZHNPW)
2x LoRa Ra-02 SX1278 (https://www.aliexpress.com/item/32965792976.html?spm=a2g0o.order_list.order_list_main.4.6eef1802BZHNPW)
ESP32 a LoRa modul propojené drátky napájenými na piny (na breadboard bylo ESP moc široké a nevešlo se).

Postup
Postupoval jsem podle tohoto tutorialu.
https://how2electronics.com/esp32-lora-sx1278-76-transmitter-receiver/
Pro programování používám Arduino IDE2 provozované na Ubuntu. ESP přes to naprogramovat jde.
Používám tuto knihovnu: https://github.com/sandeepmistry/arduino-LoRa/blob/master/API.md

Aktuální stav a problémy
Vysílač projde inicializací a tváří se, že vysílá. Na sériovou linku jsem si nechal vypsat návratové hodnoty funkcí:
  • LoRa.beginPacket() -> 1
  • LoRa.print("hello ") -> 6
  • LoRa.endPacket() -> 1
Vysílač však nic nepřijímá. Funkce LoRa.parsePacket() v hlavní smyčce stále vrací hodnotu 0. Pokud si na začátku hlavní smyčky nechám vypsat hodnotu funkce LoRa.available(), která má vracet počet bytů ke čtení, tak se střídají hodnoty 0; 85 a 91. V kódu z tutorialu je tato funkce vnořena až za podmínku, která zkoumá návratovou hodnotu funkce LoRa.parsePacket().
Zkoušel jsem otočit i vyměnit role vysílač/přijímač u obou ESP32, ale chování bylo stejné.

Ohledně mikrokontrolerů jsem začátečník. Prosím o radu, na co se zaměřit při diagnostice.

Kód vysílače

Kód: [Vybrat]
#include <LoRa.h>
#include <SPI.h>
 
#define ss 5
#define rst 14
#define dio0 2
 
int counter = 0;
 
int msg = 0;

void setup()
{
  Serial.begin(115200);
  while (!Serial);
  delay(2000);
  Serial.println("LoRa Sender");
 
  LoRa.setPins(ss, rst, dio0);    //setup LoRa transceiver module
 
  while (!LoRa.begin(433E6))     //433E6 - Asia, 866E6 - Europe, 915E6 - North America
  {
    Serial.println(".");
    delay(500);
  }
  LoRa.setSyncWord(0xA5);
  Serial.println("LoRa Initializing OK!");
}
 
void loop() {

  Serial.print("Sending packet: ");
  Serial.println(counter);

  msg = LoRa.beginPacket();   //Send LoRa packet to receiver
  Serial.print("LoRa.beginPacket(): ");
  Serial.println(msg);

  msg = LoRa.print("hello ");
  Serial.print("LoRa.print(\"hello \"): ");
  Serial.println(msg);

  msg = LoRa.print(counter);
  Serial.print("LoRa.print(counter): ");
  Serial.println(msg);

  msg = LoRa.endPacket();
  Serial.print("LoRa.endPacket(): ");
  Serial.println(msg);
 
  Serial.println("--------\n");

  counter++;
 
  delay(2000);
}


Kód přijímače
Kód: [Vybrat]
#include <LoRa.h>
#include <SPI.h>
 
#define ss 5
#define rst 14
#define dio0 2
 
int msg = 0;

void setup() {

  Serial.begin(115200);
  while (!Serial);
  delay(2000);
  Serial.println("LoRa Receiver");
 
  LoRa.setPins(ss, rst, dio0);    //setup LoRa transceiver module

  while (!LoRa.begin(433E6)) {

    Serial.println(".");
    delay(500);
  }
  LoRa.setSyncWord(0xA5);
  Serial.println("LoRa Initializing OK!");
}
 
void loop() {

  int packetSize = LoRa.parsePacket();    // try to parse packet

  Serial.print("LoRa.available(): ");
  Serial.println(LoRa.available());

  if (packetSize) {

    Serial.print("Received packet '");
 
    while (LoRa.available()) {

      String LoRaData = LoRa.readString();
      Serial.print(LoRaData);
    }
 
    Serial.print("' with RSSI ");         // print RSSI of packet
    //Serial.println(LoRa.packetRssi());
  } else {

    //Serial.print("LoRa.parsePacket(): ");
    //Serial.println(packetSize);
  }
}

« Poslední změna: 16. 09. 2024, 19:19:54 od vpn22 »


Re:Pomoc s diagnostikou ESP32 + LoRa
« Odpověď #1 kdy: 16. 09. 2024, 19:27:41 »
loru jsem videl davno a tak jsem zacal neco cist a co tahle blbost, mas spravne dlouhou antenku?!

The wire length depends on the frequency:

    868 MHz: 86,3 mm (3.4 inch)
    915 MHz: 81,9 mm (3.22 inch)
    433 MHz: 173,1 mm (6.8 inch)

For our module we need to use a 86,3 mm wire soldered directly to the transceiver’s ANA pin. Note that using a proper antenna will extend the communication range.


Re:Pomoc s diagnostikou ESP32 + LoRa
« Odpověď #3 kdy: 16. 09. 2024, 19:34:24 »
Ahoj,
Omlouvám se, že Ti neporadím přímo s problémem, ale měl bych tip na projekt meshtastics. Věřím, že to ulehčí hodně práce. Je to sice pro veřejnou komunikaci, ale v základu se počítá nativně i se soukromou a plně šifrovanou mezi n zarizenimi.

Re:Pomoc s diagnostikou ESP32 + LoRa
« Odpověď #4 kdy: 16. 09. 2024, 19:37:17 »
aha tak antenou to nebude, kdyz kupujes z asie s pripravenyma antenama a nastavujes asijskou frekvenci.
jsou ty moduly v pohode?


Re:Pomoc s diagnostikou ESP32 + LoRa
« Odpověď #5 kdy: 16. 09. 2024, 19:38:57 »
nemel by ten lora modul vracet aspon nejaky stav/chyby?

mmcc

Re:Pomoc s diagnostikou ESP32 + LoRa
« Odpověď #6 kdy: 16. 09. 2024, 20:02:04 »
Pricin moze byt vela... odporucam zaobstarat si osciloskop, ktory vie dekodovat SPI, I2C, UART, alebo logicky analyzator, npr klon Saelae alebo udelatko z RpiPico. A potom dvbt prijimac RTL SDR a idealne aj Power Profiler od Nordicu.

Najskor zitstit, ci to nieco vysiela.
- s rtl sdr pozriet co to vyesiela aj na akej frekvencii.
- alebo aspon s Power profiller (alebo osciloskopom) zmerat odber, vysielanie budu kratke prudove spicky.
- idealne aj odchytit SPI komunikaciu medzi esp32 a SX12.. , dekodovat, studovat datasheet co sa do modulu posiela a co z neho vychadza.

Ak modul nieco vysiela, zamerat sa  a prijimac a tam tez len dekodovat SPI a skumat komunikaciu.

Kludne moze byt, ze nefunguje SPI komunikacia na niektorej strane, zla inicializacia v kode...
Bez sledovania a merania na HW je to tazko ladit.

Re:Pomoc s diagnostikou ESP32 + LoRa
« Odpověď #7 kdy: 16. 09. 2024, 20:51:55 »
Co tahle sekvence ?

  Serial.begin(115200);
  LoRa.begin(433E6);
  LoRa.setPins(ss, reset, dio0);
  while (!Serial);

  Serial.println("LoRa Sender");

Re:Pomoc s diagnostikou ESP32 + LoRa
« Odpověď #8 kdy: 16. 09. 2024, 21:27:14 »
Co tahle sekvence ?

  Serial.begin(115200);
  LoRa.begin(433E6);
  LoRa.setPins(ss, reset, dio0);
  while (!Serial);

  Serial.println("LoRa Sender");

na obou stranach musi mit stejne baudy, a to podle kodu vypada, ze ma stejne.
pak nastavuje asijskou frekvenci, coz asi pasuje, protoze ma koupene asijske anteny, snad jen, aby ta frekvence nebyla u nas problematicka, coz nevim.
nastavni pinu, to si musi sam ohlidat.

nevidim problem pokud neni neco dalsiho pod povrchem.

vpn22

Re:Pomoc s diagnostikou ESP32 + LoRa
« Odpověď #9 kdy: 17. 09. 2024, 08:05:53 »
Všem díky za pomoc, už vyřešeno - špatně jsem pájel. Bylo mi divné, že jedna sestava, když byla v roli přijímače, tak dávala jako výstup funkce LoRa.available() náhodná čísla, i když se nevysílalo. Po opravě zapojení už vše funguje lépe.

Díky hlavně za rady ohledně diagnostiky, bude se hodit do budoucna. Osciloskop i logický analyzátor na diagnostiku SPI mám a na diagnostiku vysílání zase můžu použít RTL-SDR.

@ogdru6jahad
433 MHz není jen asijská frekvence. U nás ji lze také použít.

MrWhite69

Re:Pomoc s diagnostikou ESP32 + LoRa
« Odpověď #10 kdy: 17. 09. 2024, 10:49:08 »
OT, muzete mi nekdo rict co je todle za humus? :D

https://i.imgur.com/0TdJpDx.png

Re:Pomoc s diagnostikou ESP32 + LoRa
« Odpověď #11 kdy: 17. 09. 2024, 11:12:06 »
ma na modulu priletovane piny a zamatlane epoxidem, at se mu to nepokrouti.
paradicka.


OT, muzete mi nekdo rict co je todle za humus? :D

https://i.imgur.com/0TdJpDx.png

Re:Pomoc s diagnostikou ESP32 + LoRa
« Odpověď #12 kdy: 17. 09. 2024, 12:01:17 »
ma na modulu priletovane piny a zamatlane epoxidem, at se mu to nepokrouti.
paradicka.

To vypadá spíš na tavné lepidlo. To není úplně neobvyklý trik. Vídal jsem ho už před dvaceti lety u značkových PC, kde tak jistili konektory.

Problém je jen s tím, aby to nerozpustilo izolaci drátů. Takže to chce to nízkoteplotní.