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
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 ... ... o hai un'ottima visione del cielo e dei satelliti o ...
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?
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 ...
Guglielmo
ironizzavo
compro volentieri materiale italiano
... Arrrggg ... sembra che NON conosca la struttura "timespec" che dovrebbe essere in time.h che:
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&" ...
Insomma, per farla andare su AVR ... tocca modificare un po' la libreria. Magari conviene fare un "fork" e lavorare su una propria versione
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 ...
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 ...
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
#ifdef AVR
#include <time.h>
struct timespec {
time_t tv_sec; /* seconds */
long tv_nsec; /* nanoseconds */
};
#define Serial1 Serial
#endif
...e incrociamo le dita
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" ...
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