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 è:
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?
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).
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.
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 ...
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 ?
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.
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 presentartiIN 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.