Problemi comunicazione GPS su LoRa

ciao,
ho un modulo GPS che usa un chip U-BLOX. Utilizzo la libreria NMEAGPS.h. Il modulo comunica perfettamente dandomi i dati anche ogni secondo.
Sto facendo qualche esperimento di comunicazione via LoRa (sx1276). Utilizzo la libreria LoRa.h. Il modulo viene letto tramite SPI.
Riesco a mandare i dati (temperatura e pressione) di un BMP280

Quindi il GPS funziona e il modulo LoRa (ovviamente ho un ricevitore e un trasmettitore) funzionano "singolarmente." Se però provo a collegare il GPS succede una cosa "strana".

Ricevo i dati del GPS ma poi non vengono aggiornati (se non dopo molto tempo). Il sistema comunica latitudine, longitudine e altitudine. Quando avvio, i campi sono tutti nulli (0.0000... 0.0000...), per parecchi minuti. Poi (in modo casuale), dopo un certo tempo, viene inviato un valore (corretto), ma non viene aggiornato, se non dopo 40 minuti o più.
Il codice del loop è:

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

  while (gps.available( gpsPort )) {
    fix = gps.read();
    DEBUG_PORT.print( F("Location: ") );
    if (fix.valid.location) {
      DEBUG_PORT.print( fix.latitude(), 6 );
      DEBUG_PORT.print( '\t' );
      DEBUG_PORT.print( fix.longitude(), 6 );
    }

    DEBUG_PORT.print( F("\t Altitude: ") );
    if (fix.valid.altitude)
      DEBUG_PORT.print( fix.altitude() );

    DEBUG_PORT.println();
  }

   // send packet
      LoRa.beginPacket();
      LoRa.print("\t");
      LoRa.print(counter);
      LoRa.print("\t");
      LoRa.print(fix.latitude(), 6);
      LoRa.print("\t");
      LoRa.print(fix.longitude(), 6);
      LoRa.print("\t");
      LoRa.print( fix.altitude() );
      LoRa.endPacket();

  counter++;

  delay(5000);
}

il "while" e gli "if" funzionano perfettamente. Ma la comunicazione LoRa manifesta il problema suddetto.

Di che Arduino parliamo? Ed i due moduli, GPS e LoRa, come sono collegati? Usano per caso delle seriali virtuali create, al loro interno, con la SoftwareSerial?

Guglielmo

Sono due Arduino Pro Mini 328p. Il GPS è collegato attraverso due pin digitali (RX-TX), il modulo LoRa tramite SPI e il BMP tramite I2C.
Conosco male i metodi di comunicazione tramite seriali virtuali ma spulciando qua e là sono riuscito a far comunicare il GPS con una libreria (la NeoSWSerial).
Il resto del codice che utilizzo è:

#include <SPI.h>
#include <LoRa.h>
#include <NMEAGPS.h>
#include <NeoSWSerial.h>
NeoSWSerial gpsPort(4, 3); 
#define GPS_PORT_NAME "NeoSWSerial(4,3)"
#define DEBUG_PORT Serial

NMEAGPS  gps; 
gps_fix  fix; 

int counter = 0;


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

  Serial.println("LoRa Sender");
  
  DEBUG_PORT.begin(9600);
  while (!Serial);
  gpsPort.begin(9600);

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

[ho eliminato la parte per gestire il modulo BMP]

Ripeto, inizialmente sembra che non venga letto il GPS (i valori sono nulli). Dopo un certo tempo compaiono i valori ma restano costanti per molto tempo (in due ore ho avuto una sola variazione... cosa non realistica).

Due? Uno con delle cose ed uno con altre ... o ???

Guglielmo

Sì, uno è il trasmettitore e ha il GPS e il BMP. L'altro non ha niente, fa solo da ricevitore ed è collegato tramite usb al pc. Ovviamente entrambi hanno il modulo LoRa.
La comunicazione di T e P va a buon fine.
Quello che non va è la trasmissione dei dati del GPS che però riesco a leggere con il codice da cui ho poi "derivato" quello sopra riportato.

tanto per dare un'idea dei dati che ricevo:

17:15:26.587 -> Received packet '	1409	43.111111	10.998259	28.79	1019.15	with RSSI	-32	with SNR	9.50	with Freq.Err	25
17:15:32.729 -> Received packet '	1410	43.111111	10.998259	28.79	1019.16	with RSSI	-32	with SNR	9.25	with Freq.Err	25
17:15:39.893 -> Received packet '	1411	43.555555	10.998422	28.78	1019.15	with RSSI	-32	with SNR	9.25	with Freq.Err	25
....
....
17:27:36.704 -> Received packet '	1528	43.555555	10.998422	28.80	1019.08	with RSSI	-32	with SNR	9.50	with Freq.Err	25
17:27:43.873 -> Received packet '	1529	43.666666	10.998324	28.80	1019.08	with RSSI	-32	with SNR	9.50	with Freq.Err	8
....
....
17:33:14.712 -> Received packet '	1583	43.666666	10.998324	28.92	1019.08	with RSSI	-32	with SNR	9.50	with Freq.Err	25
17:33:21.879 -> Received packet '	1584	43.999999	10.998259	28.92	1019.10	with RSSI	-32	with SNR	9.25	with Freq.Err	25
....
....
17:36:44.039 -> Received packet '	1617	43.999999	10.998259	28.82	1019.04	with RSSI	-32	with SNR	9.25	with Freq.Err	25

(al posto dei "...." ci sono altre righe con valori di latitudine e longitudine uguali.

Non conosco la NeoSWSerial, ho sempre usato la SoftwareSerial e poi la AltSoftSerial, decisamente superiore come performances, per cui ... non ho idea di cosa usi e con che cosa possa andare in conflitto, mi sembra comunque strano che abbia problemi con SPI e I2C ... :roll_eyes:

Ma, se a partità di condizioni/posizionamento dell'antenna GPS, compari i dati che ricevi normalmente SOLO con la parte GPS con quelli che ricevi con gli altri moduli collegati, c'è molta discrepanza ?

Guglielmo

Il fatto è che non sono poi così ferrato con il codice. Non ho mai usato la SoftwareSerial. Ho fatto qualche prova con la AltSofSerial ma per usarla devo collegarmi sui pin D8 e D9) (che già uso per comunicare con il modulo LoRa).
Guardando in giro, ho trovato diverse discussioni su come collegare un GPS su altri pin digitali e ho trovato questa NeoSWSerial.

la cosa che mi lascia perplesso è come mai ci sia una comunicazione così "difficoltosa". Per esempio, poco, preso dal dubbio di problemi di contatto elettrico, ho saldato i 4 pin del GPS con i pin dell'arduino. I dati che leggo sul ricevitore sono:

17:58:24.565 -> Received packet '	65	0.000000	0.000000	29.09	1018.92	with RSSI	-52	with SNR	10.00	with Freq.Err	41

(0.000000 e 0.000000 sono latitudine e longitudine)

Fra un certo tempo cambieranno... e resteranno uguali per altro tempo, 20, 30, 40 min (a volte anche più di un'ora) per poi cambiare di nuovo.

I valori che ho riportato sono inventati (per la privacy), sono molto vicini fra loro e anche molto precisi (il modulo rileva correttamente la mia posizione).
Volevo solo indicare il fatto che ad un tempo x0 il valore è 111, restando tale fino al tempo x1, per poi diventare al tempo x1+dx 222, restando tale fino al tempo x3.
Per esempio, alle 17:15:39.893 la lat era 43.555555 (valore inventato) ed è restata tale fino 17:27:36.704 per poi cambiare 7 secondi dopo, diventando 43.666666 e rimanendo tale fino alle 17:33:14.712.

Ma stai facendo le prove con l'antenna all'esterno o all'interno ???

Guglielmo

Faccio le prove all'interno (posizione fissa).
Il fatto è che, mantenendo la posizione attuale, se carico un codice per leggere il GPS riesco a rilevare la posizione campionando anche ad 1Hz (valori tutti diversi e molto vicini).
Il GPS funziona e viene letto. Il problema è che non riesco a passare i dati al LoRa se non in quella modalità "casuale"...

Tanto per dire... i valori sono cambiati alle:

18:15:32.687 -> 0.000000 0.000000
18:15:39.786 -> 43.666661 10.999977
rimasti tali fino alle
18:27:17.652 -> 43.666661 10.999977
cambiati poi alle
18:27:24.803 -> 43.666668 10.999903
(valore attuale).

Puoi mandare lo schema che usi per collegare il modulo LoRa ad arduino (indicando anche quale modulo usi; esempio "adafruit RFM96W")?
Se cambi la posizione del GPS nel periodo in cui LoRa non trasmette, che cosa succede?
Prova magari a mettere qualche print per debug.

@zutroyhue : buongiorno, essendo il tuo primo post nella sezione Italiana del forum, nel rispetto del regolamento di detta sezione (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO, grazie.

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nel rispetto del suddetto regolamento nessuno ti risponderà (eventuali risposte verrebbero cancellate), quindi ti consiglio di farla al più presto. :wink:

Io intanto eliminerei queste due righe, anche se nin mi pare possano essere le colpevoli.

L'altra cosa che veniva chiesta è se il GPS si trova all'interno.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.