Ciao oggi volevo provare la differenza di prestazioni tra NeoGPS e TinyGPS++
Quando stavo però aggiungendo dallo Zip, perchè non presente nella lista di librerie presenti in "Gestione librerie", la libreria di Tiny GPS mi è comparso il seguente messaggio di errore.
Tempo fa l'avevo utilizzata e non avevo avuto di questi problemi.
Il problema è il nome della cartella, non deve contenere nessun carattere speciale, solo numeri e lettere, modifica il nome della cartella da "TinyGPS-13" in "TinyGPS", i file all'interno hanno già questo nome, e vedrai che il problema sparisce.
Attenzione che per la TinyGPS++ è necessario modificare sia il nome della cartella, p.e. in TinyGPSplus, che quello dei file .cpp e .h, altrimenti l'IDE fornisce l'errore oggetto di questo topic.
Tocca anche modificare la include nel file .cpp con il nuovo nome assegnato.
astrobeed:
La "colpa" è di come è fatto lo zip che si scarica da git, quando estrai ti trovi la cartella col 13 che non deve esserci.
NON sono d'accordo Astro ...
... ho appena effettuato la prova lascaindo il -13 nel nome della cartella e tutto funziona correttamente .... inoltre se guardi l'immagine dell'errore specifica proprio TinyGPS++
astrobeed:
Attenzione che per la TinyGPS++ è necessario modificare sia il nome della cartella, p.e. in TinyGPSplus, che quello dei file .cpp e .h, altrimenti l'IDE fornisce l'errore oggetto di questo topic.
E debbo dirti che anche questo NON è vero ...
... scaricata anche quella indicata da SukkoPera e compila correttamente con il file di nome TinyGPS++.cpp
gpb01:
... ho appena effettuato la prova lascaindo il -13 nel nome della cartella e tutto funziona correttamente .... inoltre se guardi l'immagine dell'errore specifica proprio TinyGPS++
Però all'interno della cartella i file sono senza -13, se poi stiamo parlando della ++, io l'immagine non la vedo, il solito problema dei link, allora vale quanto ho scritto sopra.
gpb01:
E debbo dirti che anche questo NON è vero ...
Con l'IDE 1.8x, appena provato, si arrabbia appena lo lanci segnalando il problema dei nomi, cosa con la quale ho già litigato altre volte, se non ci sono solo numeri e lettere l'IDE non riconosce la libreria, però potrebbe essere un problema solo per la versione Windows, da verificare, tu stai sul MAC.
Ho trovato questa issue dove si parla di questo specifico problema proprio per MacOS, guarda caso proprio per la TinyGPS++, la issue risulta chiusa, però a quanto pare hanno risolto solo per il MAC e non per Windows, ho anche trovato diversi utenti, tutti Windows, che lamentano lo stesso problema a partire dal 2013.
Del resto quello è uno specifico messaggio di errore del IDE e dice chiaramente che i nomi delle librerie non devono contenere caratteri speciale e non possono cominciare con un numero, mi sa tanto che tocca aprire una nuova issue.
Il motivo è semplice: TinyGPS estrae dallo stream NMEA "il minimo indispensabile". NeoGPS invece può essere configurato per estrarre molti più dati (e a me interessava proprio per questo), con conseguente tempo di processamento del GPS aumentato, e meno tempo a disposizione dello sketch.
In sostanza, con TinyGPS lo sketch può fare quel che gli pare, ogni tanto guarda se ci sono caratteri sulla seriale e in tal caso glieli passa. Con NeoGPS, invece, lo sketch è schiavo del GPS: il suo lavoro principale è passare a NeoGPS tutto quanto arriva sulla seriale. Quando poi NeoGPS dice che c'è un fix completo e che è arrivata l'ultima sentenza NMEA del momento, allora lo sketch deve fare in fretta tutto quel che esula dal GPS, perché di lì a poco arriverà il nuovo blocco NMEA e dovrà essere lì ad aspettarlo.
Il problema principale è che la mia piattaforma gira a 8 MHz, e di fatto non riesce a fare praticamente niente con NeoGPS, manco a passargli tutto quel che arriva sulla seriale :(. Mi riservo di fare ulteriori test, ma la prima impressione che ho avuto è questa.
Il GPS tipicamente comunica a 9600 bps con un invio ogni secondo, a meno che non modifichi questi parametri se il GPS lo permette.
Tutti i GPS moderni, perlomeno quelli che hanno meno di 10 anni, permettono di usare la seriale a 115kbps e inviare i dati almeno due volte al secondo, nei GPS migliori si arriva a cinque volte al secondo, quelli di classe superiore 10 volte al secondo.
Non ho mai usato la Neogps, però immagino che faccia una sorta di polling, nella loop, sulla disponibilità di caratteri sulla seriale e li legge per comporre la stringa della sentenza NMEA, quando ne trova una valida estrapola i dati, pertanto non può bloccare lo sketch per più di pochi ms ad ogni iterazione della loop().
Vero, ma se la seriale va più veloce, se non sei pronto a leggerla ti perdi più caratteri a parità di tempo :(.
Comunque sono d'accordo sul resto, per questo prima o poi farò altri test. Il mio sospetto è che ogni volta che le si passa un carattere faccia parecchio processamento per evitare di dover usare un buffer "grande". Dico questo perché si vanta di usare pochissima RAM.
Fatto sta che con TinyGPS riesco tranquillamente ad avere un fix al secondo, con NeoGPS al momento ho più errori di parsing che altro :(.
SukkoPera:
Vero, ma se la seriale va più veloce, se non sei pronto a leggerla ti perdi più caratteri a parità di tempo :(.
La seriale è gestita tramite interrupt e un buffer di 64 caratteri, il GPS invia le sentenze a intervalli precisi, p.e. una volta al secondo, quanto ci mette ad inviare una sentenza dipende dalla velocità della seriale e da quanti caratteri la compongono, il numero è variabile.
Se il polling della Neogps non viene eseguito più velocemente di come arrivano i dati è possibile che alcuni caratteri vanno persi in quanto le sentenze possono essere più lunghe di 64 caratteri, però visto che dichiarano solo 10 byte di ram usata mi chiedo dove processano le stringhe ricevute sulla seriale perché se non usano un buffer secondario, dove caricare i dati in arrivo dalla seriale, vuol dire che lo fanno direttamente sul buffer della seriale senza cancellarlo fino a che non c'è la sentenza completa, questo può essere un vero problema se la libreria non modifica le dimensioni del buffer almeno a 128 byte.
Se trovo un attimo di tempo provo a guardare come lavora la Neogps, giusto per curiosità.