Fórum Root.cz
Hlavní témata => Hardware => Téma založeno: vpn22 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
#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
#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);
}
}
-
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.
-
https://randomnerdtutorials.com/esp32-lora-rfm95-transceiver-arduino-ide/
-
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.
-
aha tak antenou to nebude, kdyz kupujes z asie s pripravenyma antenama a nastavujes asijskou frekvenci.
jsou ty moduly v pohode?
-
nemel by ten lora modul vracet aspon nejaky stav/chyby?
-
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.
-
Co tahle sekvence ?
Serial.begin(115200);
LoRa.begin(433E6);
LoRa.setPins(ss, reset, dio0);
while (!Serial);
Serial.println("LoRa Sender");
-
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.
-
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.
-
OT, muzete mi nekdo rict co je todle za humus? :D
https://i.imgur.com/0TdJpDx.png
-
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
-
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í.