Ce guide montre comment utiliser le module GPS NEO-6M avec l’Arduino pour obtenir des données GPS. GPS signifie Système de positionnement global et peut être utilisé pour déterminer la position, l’heure et la vitesse si vous voyagez.

Vous apprendrez à :
- Câblez le module GPS NEO-6M à l’Arduino UNO
- Obtenez des données GPS brutes
- Analyser les données brutes pour obtenir des informations GPS sélectionnées et lisibles
- Obtenir l’emplacement
Présentation du module GPS NEO-6M
Le module GPS NEO-6M est illustré dans la figure ci-dessous. Il est livré avec une antenne externe et n’est pas livré avec des broches d’en-tête. Donc, vous devrez en obtenir et en souder.

- Ce module a une antenne externe et une EEPROM intégrée.
- Interface : RS232 TTL
- Alimentation : 3V à 5V
- Débit en bauds par défaut : 9600 bps
- Fonctionne avec des phrases NMEA standard
Le module GPS NEO-6M est également compatible avec d’autres cartes de microcontrôleur. Pour apprendre à utiliser le module GPS NEO-6M avec le Raspberry Pi, vous pouvez lire : Système d’alerte par e-mail en cas de changement d’emplacement avec Raspberry Pi et module GPS.
Où acheter?
Vous pouvez obtenir le module GPS NEO-6M pour un prix compris entre 5 $ et 20 $. Nous vous recommandons de vérifier le Page du module GPS NEO-6M sur Maker Advisor pour comparer les prix dans différents magasins et trouver le meilleur.
Câblage des broches
Le module GPS NEO-6M possède quatre broches : VCC, Réception, Émission, et GND. Le module communique avec l’Arduino via une communication série en utilisant les broches TX et RX, donc le câblage ne pourrait pas être plus simple :
Module GPS NEO-6M | Câblage à Arduino UNO |
VCC | 5V |
Réception | Broche TX définie dans le logiciel série |
Émission | Broche RX définie dans le logiciel série |
GND | GND |
Obtenir des données GPS brutes
Pour obtenir des données GPS brutes, il vous suffit de démarrer une communication série avec le module GPS à l’aide du logiciel Serial. Continuez à lire pour voir comment faire cela.
Pièces requises
Pour tester cet exemple, vous aurez besoin des pièces suivantes :
Vous pouvez utiliser les liens précédents ou aller directement sur MakerAdvisor.com/tools pour trouver toutes les pièces pour vos projets au meilleur prix !
Schémas
Câblez le module GPS NEO-6M à votre Arduino en suivant le schéma ci-dessous.

- La broche GND du module est connectée à Arduino GND épingler
- La broche RX du module est connectée à Arduino broche 3
- La broche TX du module est connectée à Arduino broche 4
- La broche VCC du module est connectée à Arduino 5V épingler
Code
Copiez le code suivant sur votre IDE Arduino et téléchargez-le sur votre carte Arduino.
/*
* Rui Santos
* Complete Project Details https://www.raspberryme.com
*/
#include <SoftwareSerial.h>
// The serial connection to the GPS module
SoftwareSerial ss(4, 3);
void setup(){
Serial.begin(9600);
ss.begin(9600);
}
void loop(){
while (ss.available() > 0){
// get the byte data from the GPS
byte gpsData = ss.read();
Serial.write(gpsData);
}
}
Ce croquis suppose que vous utilisez broche 4 et broche 3 en tant que broches série RX et TX pour établir une communication série avec le module GPS. Si vous utilisez d’autres épingles, vous devez les modifier sur la ligne suivante :
SoftwareSerial ss(4, 3);
De plus, si votre module utilise un débit en bauds par défaut différent de 9600 bps, vous devez modifier le code sur la ligne suivante :
ss.begin(9600);
Cette esquisse écoute le port série GPS et lorsque les données sont reçues du module, elles sont envoyées au moniteur série.
while (ss.available() > 0){
// get the byte data from the GPS
byte gpsData = ss.read();
Serial.write(gpsData);
}
Ouvrez le moniteur série à un débit en bauds de 9600.

Vous devriez obtenir un tas d’informations dans la langue standard GPS, NMEA. Chaque ligne que vous obtenez dans le moniteur série est une phrase NMEA.
NMEA signifie National Marine Electronics Association, et dans le monde du GPS, il s’agit d’un format de données standard pris en charge par les fabricants de GPS.
Comprendre les phrases NMEA
Les phrases NMEA commencent par le caractère $ et chaque champ de données est séparé par une virgule.
$GPGGA,110617.00,41XX.XXXXX,N,00831.54761,W,1,05,2.68,129.0,M,50.1,M,,*42 $GPGSA,A,3,06,09,30,07,23,,,,,,,,4.43,2.68,3.53*02 $GPGSV,3,1,11,02,48,298,24,03,05,101,24,05,17,292,20,06,71,227,30*7C $GPGSV,3,2,11,07,47,138,33,09,64,044,28,17,01,199,,19,13,214,*7C $GPGSV,3,3,11,23,29,054,29,29,01,335,,30,29,167,33*4E $GPGLL,41XX.XXXXX,N,00831.54761,W,110617.00,A,A*70 $GPRMC,110618.00,A,41XX.XXXXX,N,00831.54753,W,0.078,,030118,,,A*6A $GPVTG,,T,,M,0.043,N,0.080,K,A*2C
Il existe différents types de phrases NMEA. Le type de message est indiqué par les caractères avant la première virgule.
Le GP après le $ indique qu’il s’agit d’une position GPS. Le $GPGGA est le message GPS NMEA de base, qui fournit des données de localisation et de précision en 3D. Dans la phrase suivante :
$GPGGA,110617.00,41XX.XXXXX,N,00831.54761,W,1,05,2.68,129.0,M,50.1,M,,*42
- 110617 – représente l’heure à laquelle l’emplacement fixe a été pris, 11:06:17 UTC
- 41XX.XXXXX,N – latitude 41 deg XX.XXXXX’ N
- 00831.54761,W – Longitude 008 deg 31,54761′ W
- 1 – qualité de la correction (0 = invalide ; 1= correction GPS ; 2 = correction DGPS ; 3 = correction PPS ; 4 = cinématique en temps réel ; 5 = RTK flottant ; 6 = estimée (navigation à l’estime); 7 = mode de saisie manuelle ; 8 = mode simulation)
- 05 – nombre de satellites suivis
- 2,68 – Dilution horizontale de position
- 129,0, M – Altitude, en mètres au dessus du niveau de la mer
- 50,1, M – Hauteur du géoïde (niveau moyen de la mer) au-dessus de l’ellipsoïde WGS84
- champ vide – temps en secondes depuis la dernière mise à jour DGPS
- champ vide – numéro d’identification de la station DGPS
- *42 – les données de la somme de contrôle, commencent toujours par *
Les autres phrases NMEA fournissent des informations supplémentaires :
- $GPGSA – GPS DOP et satellites actifs
- $GPGSV – Informations détaillées sur les satellites GPS
- $GPGLL – Latitude et longitude géographiques
- $GPRMC – Données GPS pvt (position, vitesse, temps) essentielles
- $GPVTG – Vitesse rendue bonne
Pour savoir ce que signifie chaque champ de données dans chacune de ces phrases, vous pouvez consulter Données NMEA ici.
Analyser les phrases NMEA avec la bibliothèque TinyGPS++
Vous pouvez travailler avec les données brutes du GPS, ou vous pouvez convertir ces messages NMEA dans un format lisible et utile, en enregistrant les séquences de caractères dans des variables. Pour ce faire, nous allons utiliser le Bibliothèque TinyGPS++.
Cette bibliothèque permet d’obtenir facilement des informations sur l’emplacement dans un format utile et facile à comprendre. Vous pouvez cliquer ici pour plus d’informations sur la bibliothèque TinyGPS++.
Installation de la bibliothèque TinyGPS++
Suivez les étapes suivantes pour installer la bibliothèque TinyGPS++ dans votre IDE Arduino :
- Cliquez sur ici pour télécharger la bibliothèque TinyGPSPlus. Vous devriez avoir un dossier .zip dans votre dossier Téléchargements
- Décompressez le dossier .zip et vous devriez obtenir le dossier TinyGPSPlus-master
- Renommez votre dossier de
TinyGPSPlus-mastervers TinyGPSPlus - Déplacez le dossier TinyGPSPlus vers votre dossier de bibliothèques d’installation Arduino IDE
- Enfin, rouvrez votre IDE Arduino
La bibliothèque fournit plusieurs exemples sur la façon de l’utiliser. Dans votre IDE Arduino, il vous suffit d’aller sur Déposer > Exemples > Petit GPS++, et choisissez parmi les exemples fournis.
Noter: les exemples fournis dans la bibliothèque supposent un débit en bauds de 4800 pour le module GPS. Vous devez le remplacer par 9600 si vous utilisez le module GPS NEO-6M.
Obtenir la localisation à l’aide du module GPS NEO-6M et de la bibliothèque TinyGPS++
Vous pouvez obtenir l’emplacement dans un format pratique et utile en utilisant la bibliothèque TinyGPS++. Ci-dessous, nous fournissons un code pour obtenir l’emplacement du GPS. Ceci est une version simplifiée de l’un des exemples de bibliothèque.
/*
* Rui Santos
* Complete Project Details https://www.raspberryme.com
*/
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
static const int RXPin = 4, TXPin = 3;
static const uint32_t GPSBaud = 9600;
// The TinyGPS++ object
TinyGPSPlus gps;
// The serial connection to the GPS device
SoftwareSerial ss(RXPin, TXPin);
void setup(){
Serial.begin(9600);
ss.begin(GPSBaud);
}
void loop(){
// This sketch displays information every time a new sentence is correctly encoded.
while (ss.available() > 0){
gps.encode(ss.read());
if (gps.location.isUpdated()){
Serial.print("Latitude= ");
Serial.print(gps.location.lat(), 6);
Serial.print(" Longitude= ");
Serial.println(gps.location.lng(), 6);
}
}
}
Vous commencez par importer les bibliothèques nécessaires : TinyGPSPlus et LogicielSérie
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
Ensuite, vous définissez les broches série RX et TX du logiciel, ainsi que le débit en bauds GPS. Si vous utilisez d’autres broches pour la série logicielle, vous devez les modifier ici. De plus, si votre module GPS utilise un débit en bauds par défaut différent, vous devez également le modifier.
static const int RXPin = 4, TXPin = 3;
static const uint32_t GPSBaud = 9600;
Ensuite, vous créez un Petit GPS++ objet:
TinyGPSPlus gps;
Et démarrez une connexion série sur les broches que vous avez définies précédemment
SoftwareSerial ss(RXPin, TXPin);
Dans le mettre en place(), vous initialisez la communication série, à la fois pour voir les lectures sur le moniteur série et pour communiquer avec le module GPS.
void setup() {
Serial.begin(9600);
ss.begin(GPSBaud);
}
C’est dans la boucle que vous demandez les informations. Pour que TinyGPS++ fonctionne, vous devez à plusieurs reprises canaliser les caractères vers celui-ci à partir du module GPS en utilisant le encoder() méthode.
while (ss.available() > 0){
gps.encode(ss.read());
Ensuite, vous pouvez interroger le GPS objet pour voir si des champs de données ont été mis à jour :
if (gps.location.isUpdated()){
Serial.print("Latitude="); Serial.print(gps.location.lat(), 6);
Serial.print("Longitude="); Serial.println(gps.location.lng(), 6);
}
Obtenir la latitude et la longitude est simple a utiliser gps.location.lat(), et gps.location.lng(), respectivement.
Téléchargez le code sur votre Arduino et vous devriez voir l’emplacement affiché sur le moniteur série. Après avoir téléchargé le code, attendez quelques minutes pendant que le module ajuste la position pour obtenir des données plus précises.

Obtenir plus d’informations GPS à l’aide de la bibliothèque TinyGPS++
La bibliothèque TinyGPS++ vous permet d’obtenir bien plus d’informations que l’emplacement, et de manière simple. Outre l’emplacement, vous pouvez obtenir :
- Date
- temps
- vitesse
- cours
- altitude
- satellites
- hdop
Le code ci-dessous illustre comment vous pouvez obtenir toutes ces informations de manière simple.
/*
* Rui Santos
* Complete Project Details https://www.raspberryme.com
*
* Based on the example TinyGPS++ from arduiniana.org
*
*/
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
static const int RXPin = 4, TXPin = 3;
static const uint32_t GPSBaud = 9600;
// The TinyGPS++ object
TinyGPSPlus gps;
// The serial connection to the GPS device
SoftwareSerial ss(RXPin, TXPin);
void setup(){
Serial.begin(9600);
ss.begin(GPSBaud);
}
void loop(){
// This sketch displays information every time a new sentence is correctly encoded.
while (ss.available() > 0){
gps.encode(ss.read());
if (gps.location.isUpdated()){
// Latitude in degrees (double)
Serial.print("Latitude= ");
Serial.print(gps.location.lat(), 6);
// Longitude in degrees (double)
Serial.print(" Longitude= ");
Serial.println(gps.location.lng(), 6);
// Raw latitude in whole degrees
Serial.print("Raw latitude = ");
Serial.print(gps.location.rawLat().negative ? "-" : "+");
Serial.println(gps.location.rawLat().deg);
// ... and billionths (u16/u32)
Serial.println(gps.location.rawLat().billionths);
// Raw longitude in whole degrees
Serial.print("Raw longitude = ");
Serial.print(gps.location.rawLng().negative ? "-" : "+");
Serial.println(gps.location.rawLng().deg);
// ... and billionths (u16/u32)
Serial.println(gps.location.rawLng().billionths);
// Raw date in DDMMYY format (u32)
Serial.print("Raw date DDMMYY = ");
Serial.println(gps.date.value());
// Year (2000+) (u16)
Serial.print("Year = ");
Serial.println(gps.date.year());
// Month (1-12) (u8)
Serial.print("Month = ");
Serial.println(gps.date.month());
// Day (1-31) (u8)
Serial.print("Day = ");
Serial.println(gps.date.day());
// Raw time in HHMMSSCC format (u32)
Serial.print("Raw time in HHMMSSCC = ");
Serial.println(gps.time.value());
// Hour (0-23) (u8)
Serial.print("Hour = ");
Serial.println(gps.time.hour());
// Minute (0-59) (u8)
Serial.print("Minute = ");
Serial.println(gps.time.minute());
// Second (0-59) (u8)
Serial.print("Second = ");
Serial.println(gps.time.second());
// 100ths of a second (0-99) (u8)
Serial.print("Centisecond = ");
Serial.println(gps.time.centisecond());
// Raw speed in 100ths of a knot (i32)
Serial.print("Raw speed in 100ths/knot = ");
Serial.println(gps.speed.value());
// Speed in knots (double)
Serial.print("Speed in knots/h = ");
Serial.println(gps.speed.knots());
// Speed in miles per hour (double)
Serial.print("Speed in miles/h = ");
Serial.println(gps.speed.mph());
// Speed in meters per second (double)
Serial.print("Speed in m/s = ");
Serial.println(gps.speed.mps());
// Speed in kilometers per hour (double)
Serial.print("Speed in km/h = ");
Serial.println(gps.speed.kmph());
// Raw course in 100ths of a degree (i32)
Serial.print("Raw course in degrees = ");
Serial.println(gps.course.value());
// Course in degrees (double)
Serial.print("Course in degrees = ");
Serial.println(gps.course.deg());
// Raw altitude in centimeters (i32)
Serial.print("Raw altitude in centimeters = ");
Serial.println(gps.altitude.value());
// Altitude in meters (double)
Serial.print("Altitude in meters = ");
Serial.println(gps.altitude.meters());
// Altitude in miles (double)
Serial.print("Altitude in miles = ");
Serial.println(gps.altitude.miles());
// Altitude in kilometers (double)
Serial.print("Altitude in kilometers = ");
Serial.println(gps.altitude.kilometers());
// Altitude in feet (double)
Serial.print("Altitude in feet = ");
Serial.println(gps.altitude.feet());
// Number of satellites in use (u32)
Serial.print("Number os satellites in use = ");
Serial.println(gps.satellites.value());
// Horizontal Dim. of Precision (100ths-i32)
Serial.print("HDOP = ");
Serial.println(gps.hdop.value());
}
}
}
Le tout petit GPS++ bibliothèque est bien commenté sur la façon d’utiliser toutes ses fonctionnalités.
Conclusion
Nous espérons que vous avez trouvé ce guide utile. Nous avons l’intention de faire un enregistreur de données GPS avec le Module GPS NEO-6M et le module de carte SD, alors restez à l’écoute.
Si vous avez aimé ce projet, vous aimerez aussi :
Merci d’avoir lu.
-
ICQUANZX GY-NEO6MV2 NEO-6M Module de contrôle de vol GPS 3 V-5 V avec antenne en céramique super puissante pour Arduino EEPROM APM 2.5Module avec une antenne en céramique, un signal supérieur Sauvegardez les données des paramètres de configuration EEPROM Down Avec batterie de sauvegarde des données; avec indicateur de signal LED Débit en bauds par défaut: 9600, Interface: RS232 TTL Compatible avec une variété de modules de commande de vol
-
Guangcailun NEO-6M GPS EEPROM Module Compatible pour MWC/AeroQuad Antenne Compatible pour Arduino Aircraft Flight contrôleDans les cas où une plus grande précision est nécessaire pour des vitesses de rapides de navigation irréguliers ou itinéraires complexes NEO-6M est parfait NEO-6M est en mesure de fournir une meilleure résolution à jour de meilleures approximations de l'emplacement et des lectures plus cohérentes Le NEO-6M a une antenne très grande pour la précision de la position GPS est beaucoup mieux Les résultats indiquent que le module GPS NEO-6M surperforme le pour le service de localisation GPS de l'iPhone dans presque tous les cas La chose importante à retenir est que ce module ne couvrent que le câblage et le codage de l'émetteur. L'utilisateur devra programmer un smartphone ou un autre type de récepteur pour enregistrer les données
-
ElectroWorldFR NEO-6M GPS Module avec antenne en céramique EEPROM APM 2.5 NEO-6MModule GPS NEO-6M localisation. Facile à utiliser Tension d'alimentation 3V-5V Utilisation DIY avec UNO ou professionnel Batterie de secours intégré dans le module EEPROM pour enregistre et garder les paramètres en permanent