Dove comprare modulo GPS

Ciao
Sto lavorando con un modulo gps neo 6m, pochi euro su ebay, che ha smesso di funzionare, ovviamente.
Voi dove fate acquisti?

grazie
Stefano

Gli ublox sono i più copiati e falsificati che si siano ... o vai da rivenditori seri (e paghi i prodotti per quello che costano veramente) o rischi sempre la fregatura.

Personalmente compro da Mouser (che, tra l'altro, oltre ai moduli ublox veri e propri, vende anche le varie breakout board che fanno Adafruit, Sparkfun, ecc.).

Guglielmo

Grazie
Compro su ebay solo per risparmiare in fase iniziale e per prudenza, poi se tutto funziona solitamente cerco di meglio, io non sono un mago.
Vedo cosa offrono

ciao
seguendo un altro topic volevo comprare lo shield MKR GPS, da usare con un arduino nano
negli esempi forniti con la libreria leggo questo:

  // If you are using the MKR GPS as shield, change the next line to pass
  // the GPS_MODE_SHIELD parameter to the GPS.begin(...)
  if (!GPS.begin()) {
    Serial.println("Failed to initialize GPS!");
    while (1);
  }

in concreto cosa devo fare?

Intanto ti avviso che quel modulo, pur essendo molto compatto ed adatto alla famiglia MKR, è sordo come una campana ... :grin: ... o hai un'ottima visione del cielo e dei satelliti o ... :roll_eyes:

Poi, per usarlo via seriale, mi raccomando a 3.3V, basta mettere nel begin() la costante indicata:

GPS.begin( GPS_MODE_SHIELD );

Guglielmo

grazie
sordo... con quel costo? :slightly_frowning_face:
comunque verra usato costantemente in aperta campagna
io volevo usare la comunicazione i2c

ciao
installato libreria
sto provando a compilare un esempio con questo errore

/*
  GPS Location

  This sketch uses the GPS to determine the location of the board
  and prints it to the Serial monitor.

  Circuit:
   - MKR board
   - MKR GPS attached via I2C cable

  This example code is in the public domain.
*/
#include <Arduino_MKRGPS.h>

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

  // If you are using the MKR GPS as shield, change the next line to pass
  // the GPS_MODE_SHIELD parameter to the GPS.begin(...)
  if (!GPS.begin(GPS_MODE_SHIELD)) {
    Serial.println("Failed to initialize GPS!");
    while (1);
  }
}

void loop() {
  // check if there is new GPS data available
  if (GPS.available()) {
    // read GPS values
    float latitude   = GPS.latitude();
    float longitude  = GPS.longitude();
    float altitude   = GPS.altitude();
    float speed      = GPS.speed();
    int   satellites = GPS.satellites();

    // print GPS values
    Serial.print("Location: ");
    Serial.print(latitude, 7);
    Serial.print(", ");
    Serial.println(longitude, 7);

    Serial.print("Altitude: ");
    Serial.print(altitude);
    Serial.println("m");

    Serial.print("Ground speed: ");
    Serial.print(speed);
    Serial.println(" km/h");

    Serial.print("Number of satellites: ");
    Serial.println(satellites);

    Serial.println();
  }
}
Arduino: 1.8.15 (Windows 10), Board: "Arduino Uno"
WARNING: library Arduino_MKRGPS claims to run on samd architecture(s) and may be incompatible with your current board which runs on avr architecture(s).

In file included from C:\Users\stefano\Documents\Arduino\libraries\Arduino_MKRGPS\src/Arduino_MKRGPS.h:23:0,

                 from C:\Users\stefano\AppData\Local\Temp\arduino_modified_sketch_25723\GPSLocation.ino:13:

C:\Users\stefano\Documents\Arduino\libraries\Arduino_MKRGPS\src/GPS.h:88:19: error: field '_ts' has incomplete type 'timespec'

   struct timespec _ts;

                   ^~~

C:\Users\stefano\Documents\Arduino\libraries\Arduino_MKRGPS\src/GPS.h:88:10: note: forward declaration of 'struct timespec'

   struct timespec _ts;

          ^~~~~~~~

exit status 1

Error compiling for board Arduino Uno.



This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

... è il normale costo di un modulo GPS ... NON fasullo !

E' sordo non per colpa del modulo, che è un ottimo modulo, ma della piccolissima antennina incorporata ... sarebbe bastato mettere un connettore per antenna esterno e sarebbe stato perfetto ... :frowning:

Guglielmo

ironizzavo
compro volentieri materiale italiano

... Arrrggg ... sembra che NON conosca la struttura "timespec" che dovrebbe essere in time.h che:

  1. NON è incluso
  2. time.h per AVR NON comprende "timespec"

E' una semplice struttura definita in <time.h> nelle altre piattaforme:

struct timespec {
    time_t   tv_sec;        /* seconds */
    long     tv_nsec;       /* nanoseconds */
};

La cosa si potrebbe risolvere con una aggiunta nel GPS.h della libreria MKRGPS:

#ifdef AVR
#include <time.h>
struct timespec {
    time_t   tv_sec;        /* seconds */
    long     tv_nsec;       /* nanoseconds */
};
#endif

... ma poi sorge un'atro problema ... la libreria, al suo interno, per la MKR usa la Serial1 che, ovviamente NON esiste su Arduino UNO.

Anche questo forse sarebbe risolvibile con un'altra modifica ... includendo la SoftwareSerial e usando quella ... modificando anche il costruttore della classe che fa esplicito riferimento alla "HardwareSerial&" ... :roll_eyes:

Insomma, per farla andare su AVR ... tocca modificare un po' la libreria. Magari conviene fare un "fork" e lavorare su una propria versione :wink:

Guglielmo

fatta l aggiunta suggerita
questo è l errore adesso come dicevi

Arduino: 1.8.15 (Windows 10), Board: "Arduino Uno"
WARNING: library Arduino_MKRGPS claims to run on samd architecture(s) and may be incompatible with your current board which runs on avr architecture(s).

C:\Users\stefano\Documents\Arduino\libraries\Arduino_MKRGPS\src\GPS.cpp:299:14: error: 'Serial1' was not declared in this scope

 GPSClass GPS(Serial1, 9600, serialDDC, 400000, 7);

              ^~~~~~~

C:\Users\stefano\Documents\Arduino\libraries\Arduino_MKRGPS\src\GPS.cpp:299:14: note: suggested alternative: 'Serial'

 GPSClass GPS(Serial1, 9600, serialDDC, 400000, 7);

              ^~~~~~~

              Serial

exit status 1

Error compiling for board Arduino Uno.



This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

e qua mi perdo, con le librerie

Anche questo forse sarebbe risolvibile con un'altra modifica ... includendo la SoftwareSerial e usando quella ... modificando anche il costruttore della classe che fa esplicito riferimento alla "HardwareSerial&" ... :roll_eyes:

Insomma, per farla andare su AVR ... tocca modificare un po' la libreria. Magari conviene fare un "fork" e lavorare su una propria versione :wink:

Eh li tocca modificare prorpio il costruttore, eliminare il riferimento ad "HardwareSerial&" e vedere come modificare tutto perché funzioni con un riferiemento a "Stream&".

Se si riesce a fare questo, aggiungere una condizione che verifica di essere su AVR nel GPS.cpp e che incluse la SoftwareSerial, la istanzia e poi chiama il costruttore NON con Serial1 ma con l'istanza della SoftwareSerial ...

Insomma, c'è parecchio lavoro da fare ... purtroppo hanno legato il codice alla Serial1 ... :roll_eyes:

Guglielmo

Però ... dato che tu usi solo I2C e non la seriale ... chissà che succede aggiungendo un:

#define Serial1 Serial

... ovvedo dicendogli di usare Serial al posto di Serial1 ... tanto tu lo usi SOLO su I2C ... :roll_eyes:

Guglielmo

dove lo aggiungo
#define Serial1 Serial
nella libreria gps.h o nello sketch?

... sempre dentro quel #ifdef AVR ... così lo mette SOLO se si compila per AVR :wink:

#ifdef AVR

#include <time.h>
struct timespec {
    time_t   tv_sec;        /* seconds */
    long     tv_nsec;       /* nanoseconds */
};

#define Serial1 Serial

#endif

...e incrociamo le dita :crossed_fingers:

Guglielmo

Se dovesse dare errore e NON dovesse compilare, allora l'unica, oltre la modifica già detta, è cercare in GPS.h ed in GPS.cpp la parola "Serial1" e sostituirla con "Serial" ... :roll_eyes:

Guglielmo

ciao
fatta modifica suggerita ma dà errore

Arduino: 1.8.15 (Windows 10), Board: "Arduino Uno"
WARNING: library Arduino_MKRGPS claims to run on samd architecture(s) and may be incompatible with your current board which runs on avr architecture(s).

C:\Users\stefano\Documents\Arduino\libraries\Arduino_MKRGPS\src\minmea\minmea.c:619:5: error: conflicting types for 'minmea_gettime'

 int minmea_gettime(struct timespec *ts, const struct minmea_date *date, const struct minmea_time *time_)

     ^~~~~~~~~~~~~~

In file included from C:\Users\stefano\Documents\Arduino\libraries\Arduino_MKRGPS\src\minmea\minmea.c:9:0:

C:\Users\stefano\Documents\Arduino\libraries\Arduino_MKRGPS\src\minmea\minmea.h:214:5: note: previous declaration of 'minmea_gettime' was here

 int minmea_gettime(struct timespec *ts, const struct minmea_date *date, const struct minmea_time *time_);

     ^~~~~~~~~~~~~~

C:\Users\stefano\Documents\Arduino\libraries\Arduino_MKRGPS\src\minmea\minmea.c: In function 'minmea_gettime':

C:\Users\stefano\Documents\Arduino\libraries\Arduino_MKRGPS\src\minmea\minmea.c:641:11: error: dereferencing pointer to incomplete type 'struct timespec'

         ts->tv_sec = timestamp;

           ^~

exit status 1

Error compiling for board Arduino Uno.



This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

ciao
sostituito Serial1 con Serial in CPP e H
con questo errore

Arduino: 1.8.15 (Windows 10), Board: "Arduino Uno"
WARNING: library Arduino_MKRGPS claims to run on samd architecture(s) and may be incompatible with your current board which runs on avr architecture(s).

C:\Users\stefano\Documents\Arduino\libraries\Arduino_MKRGPS\src\minmea\minmea.c:619:5: error: conflicting types for 'minmea_gettime'

 int minmea_gettime(struct timespec *ts, const struct minmea_date *date, const struct minmea_time *time_)

     ^~~~~~~~~~~~~~

In file included from C:\Users\stefano\Documents\Arduino\libraries\Arduino_MKRGPS\src\minmea\minmea.c:9:0:

C:\Users\stefano\Documents\Arduino\libraries\Arduino_MKRGPS\src\minmea\minmea.h:214:5: note: previous declaration of 'minmea_gettime' was here

 int minmea_gettime(struct timespec *ts, const struct minmea_date *date, const struct minmea_time *time_);

     ^~~~~~~~~~~~~~

C:\Users\stefano\Documents\Arduino\libraries\Arduino_MKRGPS\src\minmea\minmea.c: In function 'minmea_gettime':

C:\Users\stefano\Documents\Arduino\libraries\Arduino_MKRGPS\src\minmea\minmea.c:641:11: error: dereferencing pointer to incomplete type 'struct timespec'

         ts->tv_sec = timestamp;

           ^~

exit status 1

Error compiling for board Arduino Uno.



This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

ma con I2C leggo riesco a leggere i dati grezzi?

Ciao
spero di trovare qua sotto il modo di leggerlo con I2C
https://www.sparkfun.com/products/15210