Utilisation du module GPS Grove SEN10752P

***

Mise à jour le 27/03/2017 : Le module Grove SEN10752P est un module pour Arduino permettant de recevoir des trames GPS aux normes NMEA. Seeedstudio propose quelques exemples d’utilisation sur  leur site.

Dans cet article, nous allons voir comment fonctionne ce module de la façon la plus simple et comment on peut exploiter ses données.

REDOHM MODULE GPS SEN10752P

 

Rappel sur la norme utilisée par les récepteurs GPS -> Norme NMEA

La norme utilisée par les récepteurs GPS est la NMEA 0183 :
Transmission des données série asynchrone 8bits de données, 1 bit de stop et aucune parité , vitesse 4800 bits par secondes .
Composition de la trame :
– Une trame commence toujours par le caractères $ suivi de 2 lettres qui identifie le type d’émetteur ( GP pour GPS ) ou ( EP  pour une balise de position , HC pour un compas )

Exemple de trame :

$GPGGA,064036.289,4836.5375,N,00740.9373,E,1,04,3.2,200.2,M,,,,0000*0E

 $GPGGA       Type de trame
[indicateur de début de trame,  d’émetteur et de type de trame]
 064036.289  Trame envoyée à 06h40m36,289s (heure UTC)
[heures en temps universel jusqu’au millième de secondes]
 4836.5375,N   Latitude 48,608958° Nord = 48°36’32.25″ Nord
[Latitude en degrés, minutes et fraction de minutes]
[N pour Nord  / S pour Sud]
 00740.9373,E  Longitude 7,682288° Est = 7°40’56.238″ Est
[Latitude en degrés, minutes et fraction de minutes]
[O pour Ouest / E pour Est ]
 1  Type de positionnement (le 1 est un positionnement GPS)
 04     Nombre de satellites utilisés pour calculer les coordonnées
3.2 Précision horizontale ou HDOP (Horizontal dilution of precision)
  200.2,M   Altitude 200,2, en mètres
 ,,,,,0000  D’autres informations peuvent être inscrites dans ces champs
 *0E  Somme de contrôle de parité, un simple XOR sur les caractères précédents

Passons au choses sérieuses

Nous allons utiliser un arduino Uno connecté directement sur le module GPS (pas de carte intermédiaire).

Les branchements

Les connexions sont très simples : le module GPS possède 4 pins qui sont respectivement +5V, GND, RX et TX.

Il faut raccorder l’alimentation sur l’arduino (+5v et GND) puis raccorder la broche TX du module GPS sur le pin D2 et la broche RX du module GPS sur le pin D3.

Le programme

Créez un nouveau projet Arduino et copiez le code suivant dedans :

Le programme se décompose comme suit :

On commence par déclarer quelques variables :

  • SoftSerial est la variable nous permettant de communiquer entre l’arduino et le module GPS. On indique que le pin 2 est le pin RX et le pin 3 est le pin TX (vous comprendrez donc qu’on branche le RX de l’arduino sur le TX du GPS et inversement).
  • buffer est un tableau de 64 caractères dans lequel nous copierons les données reçues du GPS.
  • count nous permet de savoir combien de caractères nous avons recopié.

Dans la partie Setup() on initialise la vitesse de communication série à 9600 bauds que ce soit pour le Arduino <-> GPS (SoftSerial) ou pour la communication Arduino <-> PC (Serial).

Dans la partie loop, on teste si la communication série Arduino/GPS est prête à envoyer des données. Si oui, tant qu’on reçoit des données, on les lit et on les copie dans le tableau.

Si jamais on dépasse 64 caractères, on arrête.

Enfin, on inscrit le contenu du tableau sur le port série de l’arduino/PC pour affichage puis on vide le tableau de caractères et on remet le compteur à 0.

Extraire la latitude et la longitude

En adaptant un peu le programme, on va pouvoir récupérer chaque trame indépendamment l’une de l’autre, car dans le programme précédent, à chaque affichage (Serial.write) on affiche un morceau de trame, quelque soit la trame ce qui fait qu’on ne sait pas si on est au début, au milieu ou en fin de trame.

Il faut savoir que chaque trame commence avec le caractère $ et se termine avec le caractère *. On va donc attendre de trouver un caractère $, puis quand celui ci se présente, on récupère tout ce que nous renvoie le GPS jusqu’à ce qu’on tombe sur un caractère * ou $ et nous aurons ainsi une trame complète.

Pour extraire la latitude et la longitude, on doit s’appuyer sur la trame GPGGA qui est la trame GPS aux normes NMEA indiquant la position terrestre.

Nous allons donc contrôler pour chaque trame récupérée si celle ci commence par $GPGGA. Si c’est le cas, on l’affiche.

On récupère donc en sortie une liste de trames GPGGA comme suit :

$GPGGA,144444.00,4849.67013,N,00459.18936,E,1,07,1.27,140.6,M,46.7,M,,*

Les coordonnées sont inscrites en gras ci dessus. cela donne une Latitude de 48.4967013 et une longitude de 4.5918936

Voici le code permettant de récupérer ces trames

 

Retour à la foire aux questions

Article réalisé par Steeve / Hervé

Retour au menu

Pour extraire la latitude et la longitude, on doit s’appuyer sur la trame GPGGA qui est la trame GPS aux normes NMEA indiquant la position terrestre.

Nous allons donc contrôler pour chaque trame récupérée si celle ci commence par $GPGGA. Si c’est le cas, on l’affiche.

On récupère donc en sortie une liste de trames GPGGA comme suit :

$GPGGA,144444.00,4849.67013,N,00459.18936,E,1,07,1.27,140.6,M,46.7,M,,*

Les coordonnées sont inscrites en gras ci dessus. cela donne une Latitude de 48.4967013 et une longitude de 4.5918936

Voici le code permettant de récupérer ces trames

 

Retour à la foire aux questions

Article réalisé par Steeve / Hervé

Retour au menu

Pour extraire la latitude et la longitude, on doit s’appuyer sur la trame GPGGA qui est la trame GPS aux normes NMEA indiquant la position terrestre.

Nous allons donc contrôler pour chaque trame récupérée si celle ci commence par $GPGGA. Si c’est le cas, on l’affiche.

On récupère donc en sortie une liste de trames GPGGA comme suit :

$GPGGA,144444.00,4849.67013,N,00459.18936,E,1,07,1.27,140.6,M,46.7,M,,*

Les coordonnées sont inscrites en gras ci dessus. cela donne une Latitude de 48.4967013 et une longitude de 4.5918936

Voici le code permettant de récupérer ces trames

 

Retour à la foire aux questions

Article réalisé par Steeve / Hervé

Retour au menu

Pour extraire la latitude et la longitude, on doit s’appuyer sur la trame GPGGA qui est la trame GPS aux normes NMEA indiquant la position terrestre.

Nous allons donc contrôler pour chaque trame récupérée si celle ci commence par $GPGGA. Si c’est le cas, on l’affiche.

On récupère donc en sortie une liste de trames GPGGA comme suit :

$GPGGA,144444.00,4849.67013,N,00459.18936,E,1,07,1.27,140.6,M,46.7,M,,*

Les coordonnées sont inscrites en gras ci dessus. cela donne une Latitude de 48.4967013 et une longitude de 4.5918936

Voici le code permettant de récupérer ces trames

 

Retour à la foire aux questions

Article réalisé par Steeve / Hervé

Retour au menu

Pour extraire la latitude et la longitude, on doit s’appuyer sur la trame GPGGA qui est la trame GPS aux normes NMEA indiquant la position terrestre.

Nous allons donc contrôler pour chaque trame récupérée si celle ci commence par $GPGGA. Si c’est le cas, on l’affiche.

On récupère donc en sortie une liste de trames GPGGA comme suit :

$GPGGA,144444.00,4849.67013,N,00459.18936,E,1,07,1.27,140.6,M,46.7,M,,*

Les coordonnées sont inscrites en gras ci dessus. cela donne une Latitude de 48.4967013 et une longitude de 4.5918936

Voici le code permettant de récupérer ces trames

 

Retour à la foire aux questions

Article réalisé par Steeve / Hervé

Retour au menu

 

Retour à la foire aux questions

Article réalisé par Steeve / Hervé

Retour au menu

Pour extraire la latitude et la longitude, on doit s’appuyer sur la trame GPGGA qui est la trame GPS aux normes NMEA indiquant la position terrestre.

Nous allons donc contrôler pour chaque trame récupérée si celle ci commence par $GPGGA. Si c’est le cas, on l’affiche.

On récupère donc en sortie une liste de trames GPGGA comme suit :

$GPGGA,144444.00,4849.67013,N,00459.18936,E,1,07,1.27,140.6,M,46.7,M,,*

Les coordonnées sont inscrites en gras ci dessus. cela donne une Latitude de 48.4967013 et une longitude de 4.5918936

Voici le code permettant de récupérer ces trames

 

Retour à la foire aux questions

Article réalisé par Steeve / Hervé

Retour au menu

Pour extraire la latitude et la longitude, on doit s’appuyer sur la trame GPGGA qui est la trame GPS aux normes NMEA indiquant la position terrestre.

Nous allons donc contrôler pour chaque trame récupérée si celle ci commence par $GPGGA. Si c’est le cas, on l’affiche.

On récupère donc en sortie une liste de trames GPGGA comme suit :

$GPGGA,144444.00,4849.67013,N,00459.18936,E,1,07,1.27,140.6,M,46.7,M,,*

Les coordonnées sont inscrites en gras ci dessus. cela donne une Latitude de 48.4967013 et une longitude de 4.5918936

Voici le code permettant de récupérer ces trames

 

Retour à la foire aux questions

Article réalisé par Steeve / Hervé

Retour au menu

Pour extraire la latitude et la longitude, on doit s’appuyer sur la trame GPGGA qui est la trame GPS aux normes NMEA indiquant la position terrestre.

Nous allons donc contrôler pour chaque trame récupérée si celle ci commence par $GPGGA. Si c’est le cas, on l’affiche.

On récupère donc en sortie une liste de trames GPGGA comme suit :

$GPGGA,144444.00,4849.67013,N,00459.18936,E,1,07,1.27,140.6,M,46.7,M,,*

Les coordonnées sont inscrites en gras ci dessus. cela donne une Latitude de 48.4967013 et une longitude de 4.5918936

Voici le code permettant de récupérer ces trames

 

Retour à la foire aux questions

Article réalisé par Steeve / Hervé

Retour au menu

Pour extraire la latitude et la longitude, on doit s’appuyer sur la trame GPGGA qui est la trame GPS aux normes NMEA indiquant la position terrestre.

Nous allons donc contrôler pour chaque trame récupérée si celle ci commence par $GPGGA. Si c’est le cas, on l’affiche.

On récupère donc en sortie une liste de trames GPGGA comme suit :

$GPGGA,144444.00,4849.67013,N,00459.18936,E,1,07,1.27,140.6,M,46.7,M,,*

Les coordonnées sont inscrites en gras ci dessus. cela donne une Latitude de 48.4967013 et une longitude de 4.5918936

Voici le code permettant de récupérer ces trames

 

Retour à la foire aux questions

Article réalisé par Steeve / Hervé

Retour au menu

; break; } } currentchar = ‘.’; while(SoftSerial.available() && currentchar != ‘*’ && currentchar != ‘

 

Retour à la foire aux questions

Article réalisé par Steeve / Hervé

Retour au menu

) { buffer[count++]=’

Pour extraire la latitude et la longitude, on doit s’appuyer sur la trame GPGGA qui est la trame GPS aux normes NMEA indiquant la position terrestre.

Nous allons donc contrôler pour chaque trame récupérée si celle ci commence par $GPGGA. Si c’est le cas, on l’affiche.

On récupère donc en sortie une liste de trames GPGGA comme suit :

$GPGGA,144444.00,4849.67013,N,00459.18936,E,1,07,1.27,140.6,M,46.7,M,,*

Les coordonnées sont inscrites en gras ci dessus. cela donne une Latitude de 48.4967013 et une longitude de 4.5918936

Voici le code permettant de récupérer ces trames

 

Retour à la foire aux questions

Article réalisé par Steeve / Hervé

Retour au menu

; break; } } currentchar = ‘.’; while(SoftSerial.available() && currentchar != ‘*’ && currentchar != ‘

Pour extraire la latitude et la longitude, on doit s’appuyer sur la trame GPGGA qui est la trame GPS aux normes NMEA indiquant la position terrestre.

Nous allons donc contrôler pour chaque trame récupérée si celle ci commence par $GPGGA. Si c’est le cas, on l’affiche.

On récupère donc en sortie une liste de trames GPGGA comme suit :

$GPGGA,144444.00,4849.67013,N,00459.18936,E,1,07,1.27,140.6,M,46.7,M,,*

Les coordonnées sont inscrites en gras ci dessus. cela donne une Latitude de 48.4967013 et une longitude de 4.5918936

Voici le code permettant de récupérer ces trames

 

Retour à la foire aux questions

Article réalisé par Steeve / Hervé

Retour au menu

) { currentchar=SoftSerial.read(); buffer[count++]=currentchar; if(count == 200)break; } Serial.write(buffer, count); Serial.println(«  »); clearBufferArray(); count = 0; } } int isGPSGPGGA(unsigned char* trameGPS) { if(trameGPS[0] == ‘

Pour extraire la latitude et la longitude, on doit s’appuyer sur la trame GPGGA qui est la trame GPS aux normes NMEA indiquant la position terrestre.

Nous allons donc contrôler pour chaque trame récupérée si celle ci commence par $GPGGA. Si c’est le cas, on l’affiche.

On récupère donc en sortie une liste de trames GPGGA comme suit :

$GPGGA,144444.00,4849.67013,N,00459.18936,E,1,07,1.27,140.6,M,46.7,M,,*

Les coordonnées sont inscrites en gras ci dessus. cela donne une Latitude de 48.4967013 et une longitude de 4.5918936

Voici le code permettant de récupérer ces trames

 

Retour à la foire aux questions

Article réalisé par Steeve / Hervé

Retour au menu

) return 1; else return 0; } void clearBufferArray() { for (int i=0; i<count;i++) { buffer[i]=NULL;} }

Pour extraire la latitude et la longitude, on doit s’appuyer sur la trame GPGGA qui est la trame GPS aux normes NMEA indiquant la position terrestre.

Nous allons donc contrôler pour chaque trame récupérée si celle ci commence par $GPGGA. Si c’est le cas, on l’affiche.

On récupère donc en sortie une liste de trames GPGGA comme suit :

$GPGGA,144444.00,4849.67013,N,00459.18936,E,1,07,1.27,140.6,M,46.7,M,,*

Les coordonnées sont inscrites en gras ci dessus. cela donne une Latitude de 48.4967013 et une longitude de 4.5918936

Voici le code permettant de récupérer ces trames

 

Retour à la foire aux questions

Article réalisé par Steeve / Hervé

Retour au menu

) { currentchar=SoftSerial.read(); buffer[count++]=currentchar; if(count == 200)break; } if(isGPSGPGGA(buffer) == 1) { Serial.write(buffer, count); Serial.println(«  »); } clearBufferArray(); count = 0; } } int isGPSGPGGA(unsigned char* trameGPS) { if(trameGPS[0] == ‘

 

Retour à la foire aux questions

Article réalisé par Steeve / Hervé

Retour au menu

) { buffer[count++]=’

Pour extraire la latitude et la longitude, on doit s’appuyer sur la trame GPGGA qui est la trame GPS aux normes NMEA indiquant la position terrestre.

Nous allons donc contrôler pour chaque trame récupérée si celle ci commence par $GPGGA. Si c’est le cas, on l’affiche.

On récupère donc en sortie une liste de trames GPGGA comme suit :

$GPGGA,144444.00,4849.67013,N,00459.18936,E,1,07,1.27,140.6,M,46.7,M,,*

Les coordonnées sont inscrites en gras ci dessus. cela donne une Latitude de 48.4967013 et une longitude de 4.5918936

Voici le code permettant de récupérer ces trames

 

Retour à la foire aux questions

Article réalisé par Steeve / Hervé

Retour au menu

; break; } } currentchar = ‘.’; while(SoftSerial.available() && currentchar != ‘*’ && currentchar != ‘

Pour extraire la latitude et la longitude, on doit s’appuyer sur la trame GPGGA qui est la trame GPS aux normes NMEA indiquant la position terrestre.

Nous allons donc contrôler pour chaque trame récupérée si celle ci commence par $GPGGA. Si c’est le cas, on l’affiche.

On récupère donc en sortie une liste de trames GPGGA comme suit :

$GPGGA,144444.00,4849.67013,N,00459.18936,E,1,07,1.27,140.6,M,46.7,M,,*

Les coordonnées sont inscrites en gras ci dessus. cela donne une Latitude de 48.4967013 et une longitude de 4.5918936

Voici le code permettant de récupérer ces trames

 

Retour à la foire aux questions

Article réalisé par Steeve / Hervé

Retour au menu

) { currentchar=SoftSerial.read(); buffer[count++]=currentchar; if(count == 200)break; } Serial.write(buffer, count); Serial.println(«  »); clearBufferArray(); count = 0; } } int isGPSGPGGA(unsigned char* trameGPS) { if(trameGPS[0] == ‘

Pour extraire la latitude et la longitude, on doit s’appuyer sur la trame GPGGA qui est la trame GPS aux normes NMEA indiquant la position terrestre.

Nous allons donc contrôler pour chaque trame récupérée si celle ci commence par $GPGGA. Si c’est le cas, on l’affiche.

On récupère donc en sortie une liste de trames GPGGA comme suit :

$GPGGA,144444.00,4849.67013,N,00459.18936,E,1,07,1.27,140.6,M,46.7,M,,*

Les coordonnées sont inscrites en gras ci dessus. cela donne une Latitude de 48.4967013 et une longitude de 4.5918936

Voici le code permettant de récupérer ces trames

 

Retour à la foire aux questions

Article réalisé par Steeve / Hervé

Retour au menu

) return 1; else return 0; } void clearBufferArray() { for (int i=0; i<count;i++) { buffer[i]=NULL;} }

Pour extraire la latitude et la longitude, on doit s’appuyer sur la trame GPGGA qui est la trame GPS aux normes NMEA indiquant la position terrestre.

Nous allons donc contrôler pour chaque trame récupérée si celle ci commence par $GPGGA. Si c’est le cas, on l’affiche.

On récupère donc en sortie une liste de trames GPGGA comme suit :

$GPGGA,144444.00,4849.67013,N,00459.18936,E,1,07,1.27,140.6,M,46.7,M,,*

Les coordonnées sont inscrites en gras ci dessus. cela donne une Latitude de 48.4967013 et une longitude de 4.5918936

Voici le code permettant de récupérer ces trames

 

Retour à la foire aux questions

Article réalisé par Steeve / Hervé

Retour au menu

&& trameGPS[1] == ‘G’ && trameGPS[2] == ‘P’ && trameGPS[3] == ‘G’ && trameGPS[4] == ‘G’ && trameGPS[5] == ‘A’) return 1; else return 0; } void clearBufferArray() { for (int i=0; i<count;i++) { buffer[i]=NULL;} }

 

Retour à la foire aux questions

Article réalisé par Steeve / Hervé

Retour au menu

) { buffer[count++]=’

Pour extraire la latitude et la longitude, on doit s’appuyer sur la trame GPGGA qui est la trame GPS aux normes NMEA indiquant la position terrestre.

Nous allons donc contrôler pour chaque trame récupérée si celle ci commence par $GPGGA. Si c’est le cas, on l’affiche.

On récupère donc en sortie une liste de trames GPGGA comme suit :

$GPGGA,144444.00,4849.67013,N,00459.18936,E,1,07,1.27,140.6,M,46.7,M,,*

Les coordonnées sont inscrites en gras ci dessus. cela donne une Latitude de 48.4967013 et une longitude de 4.5918936

Voici le code permettant de récupérer ces trames

 

Retour à la foire aux questions

Article réalisé par Steeve / Hervé

Retour au menu

; break; } } currentchar = ‘.’; while(SoftSerial.available() && currentchar != ‘*’ && currentchar != ‘

Pour extraire la latitude et la longitude, on doit s’appuyer sur la trame GPGGA qui est la trame GPS aux normes NMEA indiquant la position terrestre.

Nous allons donc contrôler pour chaque trame récupérée si celle ci commence par $GPGGA. Si c’est le cas, on l’affiche.

On récupère donc en sortie une liste de trames GPGGA comme suit :

$GPGGA,144444.00,4849.67013,N,00459.18936,E,1,07,1.27,140.6,M,46.7,M,,*

Les coordonnées sont inscrites en gras ci dessus. cela donne une Latitude de 48.4967013 et une longitude de 4.5918936

Voici le code permettant de récupérer ces trames

 

Retour à la foire aux questions

Article réalisé par Steeve / Hervé

Retour au menu

) { currentchar=SoftSerial.read(); buffer[count++]=currentchar; if(count == 200)break; } Serial.write(buffer, count); Serial.println(«  »); clearBufferArray(); count = 0; } } int isGPSGPGGA(unsigned char* trameGPS) { if(trameGPS[0] == ‘

Pour extraire la latitude et la longitude, on doit s’appuyer sur la trame GPGGA qui est la trame GPS aux normes NMEA indiquant la position terrestre.

Nous allons donc contrôler pour chaque trame récupérée si celle ci commence par $GPGGA. Si c’est le cas, on l’affiche.

On récupère donc en sortie une liste de trames GPGGA comme suit :

$GPGGA,144444.00,4849.67013,N,00459.18936,E,1,07,1.27,140.6,M,46.7,M,,*

Les coordonnées sont inscrites en gras ci dessus. cela donne une Latitude de 48.4967013 et une longitude de 4.5918936

Voici le code permettant de récupérer ces trames

 

Retour à la foire aux questions

Article réalisé par Steeve / Hervé

Retour au menu

) return 1; else return 0; } void clearBufferArray() { for (int i=0; i<count;i++) { buffer[i]=NULL;} }

Pour extraire la latitude et la longitude, on doit s’appuyer sur la trame GPGGA qui est la trame GPS aux normes NMEA indiquant la position terrestre.

Nous allons donc contrôler pour chaque trame récupérée si celle ci commence par $GPGGA. Si c’est le cas, on l’affiche.

On récupère donc en sortie une liste de trames GPGGA comme suit :

$GPGGA,144444.00,4849.67013,N,00459.18936,E,1,07,1.27,140.6,M,46.7,M,,*

Les coordonnées sont inscrites en gras ci dessus. cela donne une Latitude de 48.4967013 et une longitude de 4.5918936

Voici le code permettant de récupérer ces trames

 

Retour à la foire aux questions

Article réalisé par Steeve / Hervé

Retour au menu