ESP8266 NodeMCU avec module GPS NEO-6M (Arduino)

ESP8266 NodeMCU avec module GPS NEO-6M (Arduino)

Apprenez à interfacer le module GPS NEO-6M avec une carte ESP8266 NodeMCU pour obtenir des données GPS. Vous apprendrez comment obtenir la latitude, la longitude, l’altitude, la vitesse et l’heure UTC. L’ESP8266 sera programmé à l’aide de l’IDE Arduino.

ESP8266 NODEMCU avec module GPS NEO-6M Arduino IDE

En résumé, dans ce tutoriel, vous apprendrez à :

  • Câblez le module GPS NEO-6M à l’ESP8266 via série
  • Analyser les données brutes pour obtenir des informations GPS sélectionnées et lisibles
  • Obtenez votre position actuelle, la date, l’heure et plus encore…

Nous avons un guide similaire pour la carte ESP32 avec module GPS NEO-6M (Arduino IDE)

Table des matières

Tout au long de ce tutoriel, nous aborderons les sujets suivants :

Si vous êtes nouveau sur la carte ESP8266, vous aimerez peut-être lire : Premiers pas avec la carte de développement ESP8266 NodeMCU.

Présentation du module GPS NEO-6M

Le module GPS NEO-6M est un récepteur GPS compatible avec la plupart des cartes microcontrôleurs. Il peut obtenir des données sur l’emplacement, la vitesse, l’altitude et l’heure.

Module GPS NÉO-6M

Il est livré avec une petite batterie de secours, une EEPROM externe et un indicateur de signal LED. Cette LED commencera à clignoter lorsqu’elle aura obtenu une position fixe.

Habituellement, ces modules sont livrés avec une antenne GPS en céramique.

antenne GPS en céramique

Mais vous pouvez la remplacer par n’importe quelle autre antenne compatible qui pourrait mieux convenir à votre projet. Par exemple, j’aime utiliser celle de droite sur l’image ci-dessous car elle est étanche et l’antenne est livrée avec un long câble qui permet plus de flexibilité.

antennes pour modules GPS

Le module GPS NEO-6M communique avec un microcontrôleur via un protocole de communication série.

Ce module fonctionne avec les phrases NMEA standards. 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.

Caractéristiques du module GPS NEO-6M

Module GPS NEO-6M

En résumé:

  • Ce module dispose d’une antenne externe et d’une EEPROM intégrée.
  • Interface : RS232 TTL
  • Alimentation : 3V à 5V
  • Débit en bauds par défaut : 9 600 bps
  • Fonctionne avec les phrases NMEA standard

Où acheter ?

Vous pouvez obtenir le module GPS NEO-6M pour un prix compris entre 5 $ et 20 $. Nous vous recommandons de consulter la page du module GPS NEO-6M sur Maker Advisor pour comparer les prix dans différents magasins et trouver le meilleur.

Vous pouvez utiliser les liens précédents ou vous rendre directement sur MakerAdvisor.com/tools pour trouver toutes les pièces pour vos projets au meilleur prix !

ESP8266 NodeMCU avec module GPS NEO 6M Arduino

Câblage du module GPS NEO-6M au NodeMCU ESP8266

Pour communiquer avec le module GPS NEO-6M, nous utiliserons un logiciel série, vous pourrez donc utiliser tous les GPIO disponibles. Nous utiliserons : GPIO 14 (D5) et GPIO 12 (D6).

Câblage du module GPS NEO-6M au NodeMCU ESP8266
Module GPS NÉO-6M ESP8266
VCC 3V3
RX GPIO12 (D6)
Émission GPIO14 (D5)
GND GND

Installation de la bibliothèque TinyGPSPlus

Pour décoder les phrases NMEA reçues par le module GPS, nous utiliserons la bibliothèque TinyGPSPlus. Installez-le avant de continuer.

Dans l’IDE Arduino, accédez à Sketch > Inclure la bibliothèque > Gérer les bibliothèques ou cliquez sur l’icône Libary Manager dans la barre latérale gauche.

Recherchez TinyGPSPlus et installez la bibliothèque de Mikal Hart.

Installation de l'IDE Arduino de la bibliothèque TinyGPSPlus

ESP8266 avec le module GPS NEO-6M – Obtenir des données GPS

Après avoir connecté le module GPS à l’ESP8266 et installé la bibliothèque TinyGPSPlus, exécutons un exemple simple pour obtenir la latitude, la longitude, l’altitude, les données, l’heure, etc.

NodeMCU ESP8266 avec module GPS NEO-6M

Le code suivant montre comment obtenir des données GPS à l’aide de la bibliothèque TinyGPSPlus. Nous obtiendrons la date, l’heure, la vitesse, l’altitude, le nombre de satellites visibles et le HDOP (une mesure de la précision du signal).

/*********
  Rui Santos & Sara Santos - Raspberryme.com
  Complete instructions at https://Raspberryme.com/esp8266-nodemcu-neo-6m-gps-module-arduino/
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*********/

#include 
#include 

// Define the RX and TX pins for Software Serial 2
#define RX 12
#define TX 14

#define GPS_BAUD 9600

// The TinyGPS++ object
TinyGPSPlus gps;

// Create an instance of Software Serial
SoftwareSerial gpsSerial(RX, TX);

void setup() {
  // Serial Monitor
  Serial.begin(115200);
  
  // Start Serial 2 with the defined RX and TX pins and a baud rate of 9600
  gpsSerial.begin(GPS_BAUD);
  Serial.println("Software Serial started at 9600 baud rate");
}

void loop() {
  // This sketch displays information every time a new sentence is correctly encoded.
  unsigned long start = millis();

  while (millis() - start < 1000) {
    while (gpsSerial.available() > 0) {
      gps.encode(gpsSerial.read());
    }
    if (gps.location.isUpdated()) {
      Serial.print("LAT: ");
      Serial.println(gps.location.lat(), 6);
      Serial.print("LONG: "); 
      Serial.println(gps.location.lng(), 6);
      Serial.print("SPEED (km/h) = "); 
      Serial.println(gps.speed.kmph()); 
      Serial.print("ALT (min)= "); 
      Serial.println(gps.altitude.meters());
      Serial.print("HDOP = "); 
      Serial.println(gps.hdop.value() / 100.0); 
      Serial.print("Satellites = "); 
      Serial.println(gps.satellites.value()); 
      Serial.print("Time in UTC: ");
      Serial.println(String(gps.date.year()) + "/" + String(gps.date.month()) + "/" + String(gps.date.day()) + "," + String(gps.time.hour()) + ":" + String(gps.time.minute()) + ":" + String(gps.time.second()));
      Serial.println("");
    }
  }
}

Afficher le code brut

Comment fonctionne le code ?

Vous commencez par importer la bibliothèque TinyGPSPlus et SoftwareSerial.

#include 
#include 

Ensuite, vous définissez les GPIO que vous souhaitez utiliser pour le logiciel série et le débit en bauds du module GPS.

// Define the RX and TX pins for Software Serial 2
#define RX 12
#define TX 14

#define GPS_BAUD 9600

Ensuite, vous créez un objet TinyGPS++ :

TinyGPSPlus gps;

Créez une instance SoftwareSerial sur les broches que vous avez définies précédemment.

SoftwareSerial gpsSerial(RX, TX);

Dans setup(), initialisez le Serial Monitor et la communication série avec le module GPS.

void setup() {
  // Serial Monitor
  Serial.begin(115200);
  
  // Start Serial 2 with the defined RX and TX pins and a baud rate of 9600
  gpsSerial.begin(GPS_BAUD);
  Serial.println("Software Serial started at 9600 baud rate");
}

Dans la boucle(), c’est là que vous demandez les informations. Analysez les données du module GPS dans l’objet TinyGPS++ à l’aide de la méthode encode() comme suit.

while (gpsSerial.available() > 0) {
  gps.encode(gpsSerial.read());
}

Ensuite, vous pouvez interroger l’objet GPS pour voir si des champs de données ont été mis à jour :

 if (gps.location.isUpdated()) {

S’il y a de nouvelles données, nous pouvons les obtenir comme suit :

Latitude gps.location.lat()
Longitude gps.location.lng()
Vitesse (km/h) gps.speed.kmph()
Altitude (mètres) gps.altitude.meters()
HDOP gps.hdop.value()
Le nombre de satellites visibles gps.satellites.value()
Année gps.date.année()
Mois gps.date.mois()
Jour gps.date.day()
Heure gps.time.hour()
Minutes gps.time.minute()
Secondes gps.time.second()

Dans le code, nous récupérons les données et imprimons toutes les informations dans le moniteur série Arduino IDE.

Serial.print("LAT: ");
Serial.println(gps.location.lat(), 6);
Serial.print("LONG: "); 
Serial.println(gps.location.lng(), 6);
Serial.print("SPEED (km/h) = "); 
Serial.println(gps.speed.kmph()); 
Serial.print("ALT (min)= "); 
Serial.println(gps.altitude.meters());
Serial.print("HDOP = "); 
Serial.println(gps.hdop.value() / 100.0); 
Serial.print("Satellites = "); 
Serial.println(gps.satellites.value()); 
Serial.print("Time in UTC: ");
Serial.println(String(gps.date.year()) + "/" + String(gps.date.month()) + "/" + String(gps.date.day()) + "," + String(gps.time.hour()) + ":" + String(gps.time.minute()) + ":" + String(gps.time.second()));
Serial.println("");

Tester le code

Téléchargez le code sur votre tableau.

Bouton de téléchargement Arduino IDE 2

Ensuite, ouvrez le moniteur série à un débit en bauds de 115 200.

Assurez-vous que l’antenne est connectée et que le module ou l’antenne est placé à l’extérieur ou à côté d’une fenêtre afin qu’il puisse recevoir les données des satellites.

antenne GPS active pour NEO-6M

La LED bleue du module commencera à clignoter lorsqu’il trouvera une position fixe.

Module GPS NEO-6M LED bleue clignotante

Ouvrez le moniteur série à un débit en bauds de 115 200. Assurez-vous que votre module GPS est placé à l’extérieur ou à côté d’une fenêtre pour obtenir les données des satellites.

Vous obtiendrez des données GPS sur le moniteur série concernant votre position actuelle, votre vitesse, votre altitude, le nombre de satellites visibles HDOP et l’heure.

Obtenez des données GPS avec ESP32 - module NEO-6M

HDOP signifie Dilution horizontale de précision. Il s’agit d’une mesure de la précision de la localisation. Plus la valeur HDOP est élevée, moins la détermination de la position sera précise. Idéalement, vous devriez obtenir une valeur inférieure à 2. Une valeur inférieure signifie une meilleure précision.

Vous pouvez désormais pousser ce projet plus loin et afficher les données sur un écran OLED, par exemple. Pour apprendre à utiliser un écran OLED avec la carte ESP8266, vous pouvez suivre le tutoriel suivant :

Conclusion

Dans ce didacticiel, vous avez appris à utiliser le module GPS NEO-6M avec l’ESP8266 pour obtenir des données GPS : latitude, longitude, altitude, vitesse, date, heure, nombre de satellites, etc.

La précision des données dépendra de l’endroit où le module est placé et de l’antenne utilisée. Pour de meilleures performances, le capteur doit être placé à l’extérieur ou à côté d’une fenêtre et loin des rues étroites avec des immeubles de grande hauteur. Plus le nombre de satellites visibles est élevé, plus la position sera précise.

Nous espérons que vous avez trouvé ce tutoriel utile. Nous avons des guides pour plus de 20 modules et capteurs avec l’ESP8266, vous pouvez les consulter ci-dessous :

Si vous souhaitez en savoir plus sur l’ESP8266, consultez nos ressources :

Merci d’avoir lu.

Apprenez l’histoire de Raspberry Pi à travers cette vidéo :

Youtube video

  • 2 modules GPS, GY-NEO6MV2 NEO-6M module de contrôle de vol GPS
  • GY-NEO6MV2 NEO-6M Lot de 3 modules de commande de vol GPS 3 V-5 V avec antenne en céramique super puissante pour Arduino EEPROM APM 2.5