Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
LoRa modul i arduino
#21
GPT sumlja na problem sa Message i daje sledeći predlog da se proba!? : )
Ima smisla šta piše ...

BTW: Ako to ne radi, probao bi sa porukama samo sa jednim karakterom, dužina=1, jedan karakter, "o"=ON, "f"=OFF, tako bi se delimično izbegli problemi sa porukama, može da se čita karakter po karakter bez delay kod prijemnika, ako detektuje jedna od ta dva karaktera radi akciju i ne ostaje ništa u bufferima, izbaciti serial-usb debug-print kod prijemnika da ne usporava loop i tako mora da reaguje na svaki karakter odmah

BTW2: Kod poruka sa više karaktera koje se prenose asinhronim seriskim vezama ODUVEK postoji problem sa početkom i krajem poruke i tu je NEOPHODAN mehanizam sa označavanja početka i kraja poruke ali unikatni karakteri koji ne smeju da se pojavljuju u telu poruke koje se prenosi jer bi nastao konflikt.
Konretno recimo izabere se karakter "#" za početak poruka (SOF-Start Of Frame) pa se sa njim prate pointeri i brojanje dužine dok ne stigne recimo do ";" karaktera (EOF-End Of Frame) koji daje tačan kraj i on je triger za dalje akcije

BTW3: Za povećanje ROBUSTNOSTI tog kanala za komunikaciju takodje je neophodno da se uvede CRC mekanizam, "checksum poruke" koji se dodaje i prijemnik proverava da bi bio siguran da je uhvatio tačno celu jednu poruku jer kod bežičnog prenosa može svašta da se desi i da zbog slabog signala/smetnji primi pogrešne segmente početak od jedne poruke pa nastao prekid pa stigo kraj od druge poruke i to bi CRC trebao da detektuje kao neispravna poruka.

[Image: attachment.php?aid=45393]


Attached Files
.png   Screen Shot 2025-04-18 at 14.52.08.png (Size: 78,78 KB / Downloads: 104)
Reply
#22
A jel prijemni nano primi poruku kad sender zaglavi?
Reply
#23
Ovo bi trebalo da resi:

PHP Code:
#include <SPI.h>
#include <LoRa.h>

const int ledPin1 7// Prva LED

String MyMessage "";

String LEDON "LED1_ON";
String LEDOFF "LED1_OFF";

void setup() {
    
pinMode(ledPin1OUTPUT);

    
Serial.begin(9600);
    while (!
Serial);

    
Serial.println("LoRa Receiver");

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

void loop() {
    
int packetSize LoRa.parsePacket();
    
MyMessage "";

    if (
packetSize) {
        while (
LoRa.available()) {
            
MyMessage += (char)LoRa.read();;
        }

        
Serial.print("Primljena poruka: ");
        
Serial.println(MyMessage);

        if (
MyMessage.equals(LEDON)) {
                
digitalWrite(ledPin1HIGH);
        }

        
delay(500);

        if (
MyMessage.equals(LEDOFF)) {
                
digitalWrite(ledPin1LOW);
        }
    }

    
delay(100);


Bezveze mi je taj programski jezik, podseca me na Lua i onaj auto play media studio : )
Reply
#24
Sender ostane da radi i po pritisku tastera ispisuje on i off ali rec prestane.
Popodne cu da probam i to sa jednim jedinim karakterom i resetom pa da vidimo tad.
Reply
#25
To je taj sto nema dovoljno napona! Moras naci napajanje odgovarajuce, mozda i radi sve ali zbog nedovojlno napona na tom REC odradi undervoltage protekcija i resetuje ga kad ne treba! 3.7V je malo da bi napojio lm1117 koji je na nanu.
Reply
#26
To sto kacenje usb kabla pokrene sistem nije do serial nego sto u tom trenutku se resetuje mcu i krene od pocetka. Trebas za bilo kakav ozbiljan debug da drzis serial monitor non stop zakacen, na sto vise mesta da imas debug prema serial monitoru da bi ukapirao gde dodje do zaglavljivanja .
Linux is like a wigwam NO Windows NO Gates and an Apache inside
Reply
#27
Da li to znaci da bez kompjutera nemozemo da koristimo arduino sa lora modulom samostalno?
Postoje li neki skuplji lora moduli koji mogu samostalno da rade.
Reply
#28
Probao sam i sa tacno 3.3v na oba modula i nista se nije promenili.
Reply
#29
Vrlo moguce je da lib ne valja, probaj ovo da ubacis https://github.com/sandeepmistry/arduino...master/src
Reply
#30
Tu izgleda omane na senderu, ne posalje poruku! Probaj asinhrono:

PHP Code:
#include <LoRa.h>

const int buttonPin1 7;
const 
int buttonPin2 6;

int buttonState1 0;
int lastButtonState1 0;

int buttonState2 0;
int lastButtonState2 0;

int err;

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

    
pinMode(buttonPin1INPUT_PULLUP);
    
pinMode(buttonPin2INPUT_PULLUP);

    
Serial.println("LoRa Sender");

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

     
delay(500);
}

void loop() {
    
buttonState1 digitalRead(buttonPin1);
    
buttonState2 digitalRead(buttonPin2);

    if (
buttonState1 == LOW ) {
        
Serial.println("Taster 1 pritisnut, šaljem: LED1_ON");
        
LoRa.beginPacket();
        
LoRa.print("LED1_ON");
        
err LoRa.endPacket(true);
        if (
err 0) {
            
Serial.println("- Message sent correctly!");
        } else {
            
Serial.println("- Error sending message :(");
            
Serial.println("(- You may send a limited amount of messages per minute, depending on the signal strength");
            
Serial.println("- It may vary from one message every couple of seconds to one  message every minute)");
        }
        
delay(1000);
    }

    if (
buttonState2 == LOW ) {
        
Serial.println("Taster 2 pritisnut, šaljem: LED1_OFF");
        
LoRa.beginPacket();
        
LoRa.print("LED1_OFF");
        
err LoRa.endPacket(true);
        if (
err 0) {
            
Serial.println("- Message sent correctly!");
        } else {
            
Serial.println("- Error sending message :(");
            
Serial.println("(- You may send a limited amount of messages per minute, depending on the signal strength");
            
Serial.println("- It may vary from one message every couple of seconds to one  message every minute)");
        }
        
delay(1000);
    }

    
lastButtonState1 buttonState1;
    
lastButtonState2 buttonState2;

    
delay(1000);


Dodao sam deo koda da ti kaze dali je uspesno poslao poruku preko lore
Reply
#31
I jos nesto sam pronasao, ne znam jel ta Lora stvarno toliko limitirana firmwerom da moze da salje samo jenu poruku za dve minute? To je totalno bezveze ako je tako fabricki.

izvor -> https://docs.arduino.cc/learn/communicat...rawan-101/
Quote: // NOTE: independent of this setting, the modem will not allow sending more than one message every 2 minutes
// This is enforced by firmware and can not be changed.
Reply
#32
Evo i ovde ima nesto o tome kako je u samom firmweru lore limitirano i ne moze da se promeni. Sad dali ima neki custom fw i dali uopste moze da se ubaci u Loru i koliko je to legalno nebi ti znao reci. https://forum.arduino.cc/t/mkr-wan1310-m...te/1316463 Ako je stvarno tako to je onda razlog zasto ova druga komanda koju posaljes ondmah nakon prve komande ne odradi posao na receiveru, moras da sacekas dve minute da bi poslao tu drugu komandu LED1_OFF : )
Reply
#33
(04-19-2025, 07:46 PM)MILANNN Wrote: Da li to znaci da bez kompjutera nemozemo da koristimo arduino sa lora modulom samostalno?
Postoje li neki skuplji lora moduli koji mogu samostalno da rade.

Ne znaci. To sa serial monitorom ti predlazemo da pratis tok programa i tako ces tacno znati gde stane (debug). Kad uradis sve da radi kako treba ne treba ti uopste Serial.print() kao i PC za izvrsavanje programa u arduinu..
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)