[RISOLTO] Problema comunicazione GPS tramite Xbee

Ciao a tutti rieccomi qua...
Ho acquistato GPS e moduli Xbee Pro S1, non riesco a far trasmettere i dati del GPS via Xbee, ovvero, l'Xbee ricevente, riceve i dati ma non li legge bene!
Questo è il codice della trasmittente (quella con sopra il gps):

#include <SoftwareSerial.h>

SoftwareSerial mySerial(9, 8); // RX, TX

void setup()  
{
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

Serial.flush();    


  // set the data rate for the SoftwareSerial port
  mySerial.begin(4800);
  
  Serial.println("\r\n-------- Sending gps data with Xbee --------");
  
}

void loop()
{
  if (mySerial.available())
    Serial.write(mySerial.read());
  if (Serial.available())
    mySerial.write(Serial.read());
}

E questo è ciò che mi da il monitor seriale attacco USB alla trasmittente:

-------- Sending gps data with Xbee --------
$GPGGA,072143.895,4446.3063,N,00845.9444,E,1,04,5.3,131.2,M,48.1,M,,0000*55
$GPGSA,A,3,02,10,09,28,,,,,,,,,6.0,5.3,2.9*39
$GPRMC,072143.895,A,4446.3063,N,00845.9444,E,0.88,194.42,130613,,,A*65
$GPGGA,072144.891,4446.3059,N,00845.9442,E,1,04,5.3,131.5,M,48.1,M,,0000*5E
$GPGSA,A,3,02,10,09,28,,,,,,,,,6.0,5.3,2.9*39
$GPRMC,072144.891,A,4446.3059,N,00845.9442,E,0.90,198.46,130613,,,A*68
$GPGGA,072145.891,4446.3054,N,00845.9440,E,1,04,5.3,131.9,M,48.1,M,,0000*5C

Questo è il codice della ricevente (che ha sopra solo la shield per Xbee):

void setup() {
Serial.begin(9600);
delay(1000);
Serial.flush();                                                       

Serial.println(" \r\n ------ Receiving data from GPS -------- ");
}

void loop() {
if (Serial.available()>0) {
  char sentenze = Serial.read();
  Serial.print(sentenze);
}
Serial.flush();
}

E' questo è il suo monitor seriale (con trasmittente alimentata a batteria):

------ Receiving data from GPS -------- 
$G;vZ4?Õ&6³Î?F3?3cæ3Ì?Õ3fEf?4ËÆ,3³f?±k3g?1kÆ3Ì?©Vf?0É£?Ð?3?&YcË?c3¹ÆÙ¨e3f334?sƹ³3eÑ?1.24,244.19,130613,,,A*69
$GPGGA,072525.895,4446.2847,N,00845.9335,E,1,04,4.9,160.2,M,48.1,M,,0000*50
$GPGSA,A,3,02,10,09,28,,,,,,,,,5.7,4.9,2.9*36
$GPRMC,072525.895,A,4446.2847,N,??Y3Î?ÕcVf?5?F3?1Á¶3e?,Ù?ÖL,3,2,11,10,46,163,34,26,39,290,23,28,32,148,32,02,13,224,23*7E
$GPGSV,3,3,11,13,13,090,,03,01,040,,15,01,284,*4D
$GPRMC,072526.895,A,4446.2851,N,00845.9346,c?³?4¹??Y³?6ÍÆ?h?55¦ü?;?³Î?,£?Î5sf¹?³f?ÅÆ33?cg3,cFY3˦±3Ì?55¦?²4jScÙ3Ë?±?³Î?áÆ?e±Ë4cY7)CÁ3?«Ù,.30Ù?áÍh5$GPGGA,072528.895,4446.2873,N,00845.9366,E,1,04,4.9,158.4,M,48.1,M,,0000*51
$GPGSA,A,3,02,10,09,28,,,,,,,,,5.6,4.9,2.9*37
$GPRMC,072528.895,A,4446.2873,N,00£VY³fÍ6+ÆY3fÍ,?æL3Ë13³e?Ak¦ø$GPGGA,072529.895,4446.2881,N,00845.9371,E,1,04,4.9,158.6,M,48.1,M,,0000*59
$GPGSA,A,3,02,10,09,28,,,,,,,,,5.6,4.9,2.9*37
$GPRMC,072529.895,A,4446.2881,N,00845.9»Y4e.ã6Y3?1?fe?AÙÖL$GPGGA,072531.895,4446.2898,N,00845.9381,E,1,04,4.9,157.3,M,48.1,M,,0000*5D
$GPGSA,A,3,02,10,09,28,,,,,,,,,5.6,4.9,2.9*37
$GPGSV,3,1,11,08,81,061,23,05,64?v?³Í?åÆÌÙfË3c6?4ce?
v
µ´«±&Ì?³F3c&Î?L3f?2±Y?Ë&3fË1c&3e?5»f­?0É£?ffË3Å?f3e±³2f;?hË73Î33?åÆÑY+ÃÁ3e³f?$GPGGA,072532.895,4446.2906,N,00845.9ÃvY4e,0cF3Ë?sV?8֍0©?0£??Á$GPGGA,072533.895,4446.2912,N,00845.9393,E,1,04,4.9,155.4,M,48.1,M,,0000*5A
$GPGSA,A,3,02,10,09,28,,,,,,,,,5.6,4.9,2.9*37
$GPRMC,072533.895,A,4446.2912,N,00845.9Ë6Y4e.ã&Y3?1Ù6Ë *³ÖLø$GPGGA,072534.895,4446.2916,N,00845.9398,E,1,04,4.9,154.5,M,48.1,M,,0000*52
$GPGSA,A,3,02,10,09,28,,,,,,,,,5.6,4.9,2.9*37
$GPRMC,072534.895,A,4446.2916,N,00£VY³f8cÙ3fË1sfY³fÌ6?Æ?Ð?5k¦ø$GPGGA,072536.895,4446.2930,N,00845.9409,E,1,04,4.9,152.1,M,48.1,M,,0000*59
$GPGSA,A,3,02,10,09,28,2Ã,Ë06?³fÍÆË?8?Ve?
?v
µ´jÕc&Y³Ì?1cf?ÍÆ3?&?$GPGGA,072539.895,4446.2945,N,00845.9420,E,1,04,4.8,148.5,M,48.1,M,,0000*51
$GPGSA,A,3,02,10,09,28,,???cVf?9??3Î?1?f3Ë?AÕÖL$GPGGA,072540.895,4446.2950,N,00845.9423,E,1,04,4.8,147.7,M,48.1,M,,0000*55
$GPGSA,A,3,02,10,09,28,,???͍f?0?v?³Ë13³e?AÕfÖL$GPGGA,072541.895,4446.2948,N,00845.9423,E,1,04,4.8,147.4,M,48.1,M,,0000*5E
$GPGSA,A,3,02,10,09,28,,,,,,,,,5.6,4.8,2.9*36
$GPGSV,3,1,11,08,81,061,22,05,64?vY³Í?åcf3e??Ë4e?#v
µ´«±Æ,³f?1c3e3??3?&3e$GPGGA,072544.895,4446.2956,N,00845.9419,E,1,04,4.8,143.6,M,48.1,M,,0000*5B
$GPGSA,A,3,02,10,09,28,,??YÎ?V 
 ------ Receiving data from GPS -------- 
0ÃF?1V3?£f?3Õc֍f.±f?0©&?
$PSRFTXT,POS:  4482677 691204 4469502*19
$PSRFTXT,CLK:  94692*2D
$PSRFTXT,CHNL: 12*73
$PSRFTXT,Baud rate: 4800*65

Poi vengono fuori cose strane... dove sbaglio? Se metto string al posto di char non va bene... se metto int o float legge solo numeri... pensavo che char andasse bene! =(

Sei sicuro che il GPS lavori a 9600 Baud ?
se lavora a questa velocità dovresti far comunicare i due xbee più velocemente in modo da non perderti dati.. almeno al doppio dalla velocità 19200.

ratto93:
Sei sicuro che il GPS lavori a 9600 Baud ?
se lavora a questa velocità dovresti far comunicare i due xbee più velocemente in modo da non perderti dati.. almeno al doppio dalla velocità 19200.

Si, il GPS lavora a 9600 BAUD, ne sono sicuro anche perchè cambiando velocità del GPS, non funziona.

Il problema del settaggio dei moduli Xbee è che mi serve X-CTU e io sto usando Linux, proverò con Wine!

valez92:

ratto93:
Sei sicuro che il GPS lavori a 9600 Baud ?
se lavora a questa velocità dovresti far comunicare i due xbee più velocemente in modo da non perderti dati.. almeno al doppio dalla velocità 19200.

Si, il GPS lavora a 9600 BAUD, ne sono sicuro anche perchè cambiando velocità del GPS, non funziona.

Il problema del settaggio dei moduli Xbee è che mi serve X-CTU e io sto usando Linux, proverò con Wine!

Io ho gli xbee pro 1 e sono settati di default a 19200 o per lo mano a me sono arrivati con quel settaggio, secondo me il tuo problema è proprio che non azzecchi la corretta velocità..

ratto93:

valez92:

ratto93:
Sei sicuro che il GPS lavori a 9600 Baud ?
se lavora a questa velocità dovresti far comunicare i due xbee più velocemente in modo da non perderti dati.. almeno al doppio dalla velocità 19200.

Si, il GPS lavora a 9600 BAUD, ne sono sicuro anche perchè cambiando velocità del GPS, non funziona.

Il problema del settaggio dei moduli Xbee è che mi serve X-CTU e io sto usando Linux, proverò con Wine!

Io ho gli xbee pro 1 e sono settati di default a 19200 o per lo mano a me sono arrivati con quel settaggio, secondo me il tuo problema è proprio che non azzecchi la corretta velocità..

No, ho usato poco fa X-CTU tramite Wine, ce li avevo settati a 9600, ho cambiato velocità in 19200, non cambia niente, anzi, peggio..
Siamo sicuri che non sia un errore del mio codice? Io ritengo che sia il mio codice sbagliato... Ma non so dove!

PS: tanto per capirci, il monitor seriale con gli Xbee a 19200 è questo:

------ Receiving data from GPS -------- 
þ¯ÉÎÉþÎù,,,,?É??ù,M,ÎNùî
îýÿÉ,,,,,,,,,,,,,,î
î­MÉþ.þÎ.þ,,,,,,ÎÎ.?ù,,¯ø
þ¯ÉÎÉÎù?É???©?É.?ùMÎNùÎ
¾íÉ,,,,,,,,,,,,
î­MÉþ.þÎ,???y?ù,þþ*Î
þÿï,þÎÉ.Îùþ,,,?É???©:ùÎù,,ÎÎ*þ®Høîýé,??????????yù,,î
îý­ê,.ÎÉ.Î?ùcbbþ,ÎÎ.??ùÎ
þÿï,þÎÎÎùÈ?É???©?É.?ùM,Î*þ¯Hȯ¯ùù,,,,,,,,,*î
î?É?É??yù.?É,.?É???É?ùÎ*þ®Hȯÿý?É?É??ùÎ,,,Î*î
þ¯ÎÎ	Î?©,,,,,Îþ.???ù
þ¯ÉÎÎÎù?É?9?©?9.,,ÎÎ*þ¯ø
þ¯é,???????ù,,,,,*î
îýýMÿÉÿÉþ/ù??ùÍøÍKþÿï,þÎÎÎùÈþ?É???©?É.?©ú,,NɯHȯÉ,,,,,,,,,,,,,,,­ê,ÎÎþÎùÈ©,,???Î,,,N*®ø
þ¯ÉÎÎÎù?É?9?©?É.,ÎÎ*þîíýé,???ù,,,,,,,,,*î
þÉþÎÎ.Èí?)ü.???ÉJyÉ
þ¯ÉÎþÎù?É??©?9.,ÎÎ*Î
¯ùÉ,,,,,,,,,,*î
î­MùþþÈþ?©,,,ÎÎ.???ù®ø
þÿï,þÎþ.Îùþ,?É??ù?©??ÉÎNÉ®øíí,É,,,,,,,,,,,,*î
îýÿ?É?É???ù?,üùÎNÍ,?ÉÈ,,,~*þ
þ?É,Î,þ?ù,,Î,,,Î*þ
þ¯ÎþÎÉ.ȍ??????ÉÎþ.???ùN®ø
þÿï,þÎÎÎ	þþ,,,?É???©ùÎù,,ÎÎ*þ¯Høþ¯é,?????????ù,,,,

Poi ho notato che con gli xbee a 9600 se allontano l'antenna trasmittente di soli 50cm, il monitor seriale della ricevente è già sballato..

Ma, aspetta, hai reimpostato l'xbee a 19200 e arduino l'hai settato per lavorare a questa velocità ?

ratto93:
Ma, aspetta, hai reimpostato l'xbee a 19200 e arduino l'hai settato per lavorare a questa velocità ?

mmm... no ho impostato xbee a 19200 e arduino era a 9600... aspetta ora mi sta venendo un dubbio tu intendi impostare anche il Serial.begin(19200) ? Non so se il GPS lavora a quella velocità!

Mi son confuso... il gps lavora a 4800 BAUD, ho settato arduino a 19200 baud ma ancora i caratteri sono incomprensibili... provo ad aumentare velocità o cosa?

valez92:
Mi son confuso... il gps lavora a 4800 BAUD, ho settato arduino a 19200 baud ma ancora i caratteri sono incomprensibili... provo ad aumentare velocità o cosa?

metti il codice così :
arduino 1 collegato a GPS e xbee (trasmittente):

#include <SoftwareSerial.h>

SoftwareSerial mySerial(9, 8); // RX, TX

void setup()  
{
  // Open serial communications and wait for port to open:
  Serial.begin(19200);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

Serial.flush();    


  // set the data rate for the SoftwareSerial port
  mySerial.begin(4800);
  
  Serial.println("\r\n-------- Sending gps data with Xbee --------");
  
}

void loop()
{
  if (mySerial.available())
    Serial.write(mySerial.read());
  if (Serial.available())
    mySerial.write(Serial.read());
}

Il codice ora è corretto.
Il secondo problema è questo, con questo codice :

void setup() {
Serial.begin(9600);
delay(1000);
Serial.flush();                                                       

Serial.println(" \r\n ------ Receiving data from GPS -------- ");
}

void loop() {
if (Serial.available()>0) {
  char sentenze = Serial.read();
  Serial.print(sentenze);
}
Serial.flush();
}

Te vai a leggere i dati che ti arrivano dall'xbee, ma quando fai il print di (sentenze) te le rimandi all'altro xbee e non al computer, perchè ? La xbee shield in teoria a meno che non sia una non ufficiale usa i pin tx ed rx ovvero 0 ed 1, quando te apri la porta sul serial monitor si accavallano i segnali e ti arriva quella brodaglia li. Se vuoi fare una prova per vedere se il codice del trasmettitore è corretto fai così, prendi l'arduino recevitore, togli lo shield, poi facendo attenzione ed aiutandoti con un cacciavitino togli il micro (atmega 328) se ce l'hai in formato pdip, rimonta lo shield collega tutto come prima ed apri la porta impostata su 19200 baud, se il codice del tx è corretto vedrai le sentenze nmea apparire sul tuo schermo.

Ho appena provato a fare come hai detto tu, niente, sul monitor seriale non mi appare assolutamente niente!
Ho messo gps, shield e xbee alla trasmittente, collegata a batteria, nella ricevente ho messo shield e xbee senza micro, monitor seriale non mi appare niente.. neanche se cambio jumper e li metto su USB... niente :0 :0 :0

Rimonta il micro e prova con il codice e vediamo che succede...
poi in oltre mettere un link allo shield che stai usando ?

Prova a dare un occhio pure qui, forse ti può essere d'aiuto :
http://www.cooking-hacks.com/index.php/blog/tutorial-arduino-deluxe-pack

Ecco qua: http://www.cooking-hacks.com/index.php/communication-shield-xb-bt-rfid.html

Ho rimontato il micro e caricato il codice, ora non succede proprio niente:

 ------ Receiving data from GPS --------

Se non altro sappiamo che si pianta nel loop.
ora do un occhio allo shield perchè non lo conosco e vediamo se ne cavo qualcosa...

Va bene grazie, io ti dico domani se son riuscito a ricavar qualcosa :slight_smile:

Sono riuscito a farlo andare come hai detto tu, sai qual era il problema? La batteria con la quale alimentavo la trasmittente era scarica! E' per questo che non andava, essendo scarica dava poca potenza al modulo! ora ci ho attaccato un trasformatore 220 VAC -----> 9 VDC e senza micro funziona tutto, adesso ho rimesso il micro lasciando lo sketch cosi:

void setup {
}

void loop {
}

E funziona perfettamente, grazie!!

Ottimo :slight_smile: