Création d’un Tracker GPS est un projet passionnant, en particulier pour les débutants intéressés par l’électronique et le développement de logiciels. C’est un projet qui provoque la curiosité de l’enfance de suivre tout ce qui nous entoure. Bien que la configuration du matériel soit relativement simple, le vrai défi réside dans le logiciel. Mais ce n’est plus une préoccupation, grâce à l’introduction du API Geolinker.
Chez Circuit Digest Cloud, nous avons lancé un facile à utiliser, API gratuite appelé Géolinker. Ce L’API vous permet de tracer et d’acheminer les données de localisation envoyées de votre appareil vers un serveurle rendant sans effort pour visualiser et suivre les positions.
Dans ce tutoriel, nous construisons un GPS Tracker à l’aide du microcontrôleur ESP32 et du module GPS NEO-6M comme composants matériels principaux, avec Géolinker comme composant logiciel. Plongeons-nous et commençons avec ce projet passionnant! Nous avons précédemment construit de nombreux projets utilisant ESP32 Vous pouvez également les consulter si vous souhaitez en explorer plus.
Comment fonctionne ESP32 GPS Tracker?
Dans ce projet, nous allons créer un simple suivi GPS qui est plus facile à implémenter aux niveaux matériel et logiciel. Pour le matériel, nous utiliserons le bien connu Conseil de développement ESP32 avec le Module GPS NEO-6M. Côté logiciel, nous utiliserons le API Geolinker, développé par Nuage de digestion de circuit.
![]()
Nous allons récupérer les données GPS du module GPS NEO-6M à l’aide de l’ESP32 et envoyer ces données à une API de traçage et de routage de carte via une demande HTTP simple. Chaque point de données sera annexé à la base de données. En vous connectant à notre compte Circuit Digest Cloud, nous pouvons afficher les données tracées en direct ainsi que le suivi de l’itinéraire.
Une fonctionnalité supplémentaire implémentée dans ce projet est Gestion des données en ligne / hors ligne. Plus précisément, lorsque Internet n’est pas disponible, les données sont stockées dans un variable locale. Une fois la connexion restaurée, les données stockées sont appuyées sur le serveur en premier, suivies des données nouvellement récupérées. Il s’agit d’une fonctionnalité assez intéressante et utile, en particulier dans les domaines où la connectivité Internet n’est pas fiable.
Avec cela, passons aux composants requis pour ce projet.
Composants requis
Seul un nombre minimal de composants est requis pour ce projet. Cependant, il est important de vérifier la fonctionnalité de chaque composant avant utilisation. Comme toujours, la sélection des composants est votre choix, en fonction de votre budget et de votre créativité, sans limites de personnalisation. Voici les composants que nous avons utilisés pour construire un GPS Tracker en utilisant ESP32.
- Board de développement ESP32 – 1
- LEDS – 2
- Résistance 1K – 2
- Planche à pain – 1
- Module GPS NEO-6M – 1
- Fils de connexion – selon les besoins
Il n’y a aucune raison spécifique de sélectionner le module GPS NEO-6M en dehors de sa rentabilité. Si vous utilisez le NEO-6M, comme moi, et si votre module GPS ne fonctionne pas, consultez l’article lié pour le dépannage. Vous pouvez également utiliser tout autre module GPS compatible avec l’ESP32 pour terminer ce projet. Garder les choses théoriques à part, passons au projet réel, à partir du logiciel.
Configuration de Geolinker pour GPS Tracker
Comme la plupart des API de cloud CircuitDigest, Geolinker nécessite également une clé API pour l’autorisation. Suivez les étapes ci-dessous pour recevoir votre clé API gratuite.
Si vous êtes nouveau dans Nuage de circuitdigevous devez enregistrer un nouveau compte en suivant les étapes ci-dessous.
Connexion au « Nuage de digestion de circuit«
![]()
Étape 1: Visitez le circuit digest.cloud Page d’accueil. Cliquez sur « Se connecter« Bouton situé dans le coin supérieur droit pour être redirigé vers la page de connexion.
Étape 2: Si vous avez déjà un compte, connectez-vous en utilisant vos informations d’identification existantes. Sinon, accédez à la page d’enregistrement pour créer un compte en remplissant les détails requis. Une fois terminé, cliquez sur « Inscrivez-vous maintenant« Pour vous inscrire.
Étape 3: Après votre inscription, utilisez votre identifiant de messagerie et mot de passe Pour se connecter sur la page de connexion.
Ensuite, l’étape consiste à générer le Clé API.
Génération de la clé d’API
![]()
Étape 4: Une fois connecté, cliquez sur « Mon compte« Dans le coin supérieur droit.
Étape 5: Vous serez dirigé vers une page où vous pourrez générer votre clé API. Entrez le texte CAPTCHA dans la case fournie, puis cliquez sur « Soumettre » bouton.
Étape 6: Si le captcha est correct, vous verrez un tableau affichant votre clé API avec sa date d’expiration et son nombre d’utilisation.
Actuellement, il y a une limite de 100 utilisations par clé. Une fois que vous avez atteint cette limite, vous pouvez générer une autre clé, vous donnant 100 utilisations supplémentaires. Cette limite d’utilisation est en place pour empêcher la surcharge du serveur.
Avec cela, nous sommes prêts à passer au matériel.
Diagramme du circuit de tracker GPS ESP32
Le diagramme du circuit est assez explicite, car il n’y a que quelques connexions, ce qui les rend simples à comprendre. Le diagramme de circuit complet pour construire un GPS Tracker en utilisant ESP32 est indiqué ci-dessous. L’ESP32 est alimenté via son port USB, tandis que le module GPS reçoit une alimentation 5V stable de l’ESP32. La communication entre les deux modules est établie via UART, où la broche TX (transmission) du module GPS se connecte au RX (IO16) de l’ESP32, et la broche GPS RX (recevoir) se connecte au TX (IO17) de l’ESP32. Si vous avez besoin de plus d’aide, vous pouvez également consulter notre article sur la façon d’utiliser le module GPS NEO-6M avec ESP32 et en savoir plus.
![]()
Deux LED sont utilisées pour l’indication de statut,
- Une LED jaune connectée à IO19 via une résistance de 1kΩ indique la réception des données GPS.
- Une LED verte connectée à IO18 via une résistance de 1kΩ signale la connectivité du réseau.
Avec cela, les connexions de circuit sont complètes. Ci-dessous, vous pouvez voir l’assemblage des composants matériels.
![]()
Lors de l’assemblage des composants, vérifiez soigneusement les connexions appropriées entre les composants et la planche à pain, car un câblage incorrect pourrait entraîner des problèmes non identifiés.
Ensuite, nous pouvons passer à la partie de codage.
Code arduino
Avant de passer à la brève explication du code, examinons la vue d’ensemble du code. Le code complet pour créer un GPS Tracker avec ESP32 est donné à la fin de cet article.
Ce code est principalement conçu pour le microcontrôleur ESP32. Avec quelques modifications, il peut également être utilisé pour d’autres microcontrôleurs exécutant le noyau Arduino. Il se connecte à un module GPS via UART1, lit et traite les données GPS (latitude, la longitude, l’altitude, l’horodatage), se connecte au Wi-Fi pour envoyer des données GPS à un serveur cloud et stocke les données GPS localement si le Wi-Fi n’est pas disponible, en les téléchargeant plus tard.
Actuellement, décomposons le code, en commençant par les bibliothèques utilisées.
Bibliothèques utilisées:
- Wifi.h: Permet à l’ESP32 de se connecter à un réseau Wi-Fi.
- Httpclient.h: Permet la communication HTTP avec un serveur cloud.
- Arduinojson.h: Gère le formatage JSON pour l’envoi de données GPS.
- vecteur: Stocke les données GPS lorsqu’ils sont hors ligne pour le téléchargement ultérieur.
#include
#include
#include
#include
Variables et constantes utilisées
Cette section comprend diverses catégories telles que les configurations Wi-Fi et Server, la configuration du module GPS, les structures de données pour les informations GPS et d’autres variables générales.
const char* ssid = "xxxx"; // WiFi SSID - Replace your own
const char* password = "xxxx"; // WiFi Password - Replace your own
const char* serverUrl = "https://www.raspberryme.cloud/geolinker"; // Server URL
const char* apiKey = "xxxxxxxxxxxx"; // API key for authentication
HardwareSerial gpsSerial(1);
const int RXPin = 16; // GPS TX connected to ESP32 RX
const int TXPin = 17; // GPS RX connected to ESP32 TX
struct GPSRawData {
double latitude;
char latitudeDir;
double longitude;
char longitudeDir;
int satellites;
double altitude;
int hours, minutes, seconds;
int day, month, year;
String timestamp; // Combined timestamp with date and time
};
struct GPSData {
double latitude;
double longitude;
String timestamp;
};
const unsigned long uploadInterval = 10000;
unsigned long lastUploadTime = 0;
const int networkStatusLED = 18;
const int gpsStatusLED = 19;
bool gpsDataValid = false;
GPSData latestGPSData;
GPSRawData latestGPSRawData;
std::vector offlineData;
Parmi les variables ci-dessus, seuls quelques-uns doivent être remplacés par vos propres valeurs: les broches SSID, mot de passe, apikey et IO (broches GPS UART, réseau de réseaux et de LED d’état GPS).
Après cela, deux structures sont initialisées:
- Gpsrawdata: Stocke toutes les données brutes reçues du module GPS.
- GPSDATA: Stocke les informations essentielles pour le téléchargement sur le serveur et pour le stockage hors ligne.
De plus, le type de données vectoriel STD :: est utilisé. Il s’agit d’un tableau dynamique fourni par la bibliothèque C ++ standard, qui peut redimensionner dynamiquement à mesure que les éléments sont ajoutés ou supprimés, contrairement aux tableaux réguliers. Pour plus d’informations, visitez: C ++ moderne: std :: vector et std :: array.
Fonction de configuration
La fonction de configuration initialise les composants essentiels.
- Initialise la communication en série à 115200 bauds pour le débogage.
- Définit la communication GPS à 9600 bauds.
void setup() {
Serial.begin(115200);
gpsSerial.begin(9600, SERIAL_8N1, RXPin, TXPin);
- Configure les LED d’état sous forme de sorties.
pinMode(networkStatusLED, OUTPUT);
pinMode(gpsStatusLED, OUTPUT);
- Tente de se connecter au Wi-Fi. Le LED du réseau clignote lors de la connexion et reste une fois connecté.
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
digitalWrite(networkStatusLED, LOW);
delay(500);
digitalWrite(networkStatusLED, HIGH);
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi connected!");
digitalWrite(networkStatusLED, HIGH);
}
Fonction de boucle
La fonction de boucle est légèrement complexe. Vous pouvez vous référer à l’organigramme pour une meilleure compréhension:
![]()
1. Une chaîne statique est utilisée pour stocker les données GPS entrantes.
void loop() {
static String gpsData = "";
2. Lire les données GPS Caract-by-Character et appelle ProcessGPSData () lorsqu’une phrase NMEA complète est reçue.
while (gpsSerial.available()) {
char c = gpsSerial.read();
gpsData += c;
if (c == '\n') {
processGPSData(gpsData);
gpsData = "";
}
}
3. Vérifie si 10 secondes sont passés depuis le dernier téléchargement.
if (millis() - lastUploadTime >= uploadInterval) {
lastUploadTime = millis(00);
4. Si les données GPS sont valides et que le Wi-Fi est connecté, continue le téléchargement.
if (gpsDataValid) {
if (WiFi.status() == WL_CONNECTED) {
digitalWrite(networkStatusLED, HIGH);
5. Télécharges les données précédemment stockées si le Wi-Fi est disponible. Efface le tampon si toutes les données sont téléchargées avec succès.
bool offlineUploadSuccess = true;
for (auto& data : offlineData) {
if (!sendGPSData(data)) {
offlineUploadSuccess = false;
break;
}
}
if (offlineUploadSuccess) {
offlineData.clear();
}
6. Si le téléchargement échoue, stockez les données pour plus tard.
if (!sendGPSData(latestGPSData)) {
Serial.println("Failed to upload latest GPS data. Storing locally.");
offlineData.push_back(latestGPSData);
digitalWrite(networkStatusLED, LOW);
} else {
Serial.println("Latest GPS data uploaded successfully.");
}
7. Si le Wi-Fi est déconnecté, stocke les données et tente de se reconnecter. Si les données GPS ne sont pas valides, sautez le téléchargement.
} else {
Serial.println("WiFi not connected. Storing data locally.");
offlineData.push_back(latestGPSData);
digitalWrite(networkStatusLED, LOW);
WiFi.disconnect();
WiFi.reconnect();
}
} else {
Serial.println("Invalid GPS data. Skipping upload.");
}
}
}
Autres fonctions de soutien
En dehors de la logique principale, il existe des fonctions d’assistance pour téléchargement et traitement des données GPS.
![]()
Téléchargement des données GPS
Initialise une demande HTTP, définit les en-têtes pour le format JSON et l’authentification de l’API.
bool sendGPSData(GPSData data) {
HTTPClient http;
http.begin(serverUrl);
http.addHeader("Content-Type", "application/json");
http.addHeader("Authorization", apiKey);
Crée un Charge utile JSON avec les données GPS.
String payload = R"({
"timestamp": [")" + String(data.timestamp) + R"("],
"lat": [)" + String(data.latitude, 6) + R"(],
"long": [)" + String(data.longitude, 6) + R"(]
})";
Envoie la demande de poste HTTP et Renvoie True en cas de succès.
int httpResponseCode = http.POST(payload);
Serial.print("Server response code: ");
Serial.println(httpResponseCode);
http.end();
return (httpResponseCode == 200 || httpResponseCode == 201);
}
Traitement des données GPS
- Extrait les données GPS des phrases NMEA ($ gpgga, $ gprmc).
- Appelle les fonctions d’analyse appropriées.
void processGPSData(String raw) {
if (raw.startsWith("$GPGGA")) {
parseGPGGA(raw);
convertAndPrintLocalDateTime();
} else if (raw.startsWith("$GPRMC")) {
parseGPRMC(raw);
}
}
Avec cela, l’explication du code est terminée. L’ensemble du code est disponible au bas de cet article. Actuellement, la seule tâche en attente est de le télécharger sur l’ESP32, et la magie se produit.
ESP32 GPS Tracker – Demo and Testing
Après avoir réussi à télécharger le code, nous pouvons vérifier ses fonctionnalités. Comme toujours, vous pouvez vous référer à l’organigramme pour comprendre la sortie attendue.
Avant de procéder à la démonstration, vous devez comprendre certains détails importants sur la réponse.
Concernant le matériel;
Concernant le logiciel;
Dans notre projet, le concept est simple: les données GPS sont récupérées et envoyées au serveur. En cas de réseau peu fiable, les données sont stockées localement et poussées une fois qu’une connexion Internet est disponible. C’est exactement ce que nous avons testé lors d’un essai. Alors, voyons tous les détails ci-dessous.
Initialement, pendant la phase de test, nous n’avons pas pu obtenir un signal GPS approprié en raison de limitations dans une zone urbaine. Pour résoudre ce problème, nous avons utilisé une antenne externe pour les tests, et cela a fonctionné parfaitement.
![]()
Une fois que tout fonctionnait, nous avons commencé notre voyage depuis le bureau. Vous pouvez voir un petit mouvement du bureau sur la carte. Comme vous le savez peut-être, le système pousse actuellement les données toutes les 10 secondes.
![]()
Comme tout allait bien, après quelques minutes, nous avons décidé de tester la fonctionnalité en ligne / hors ligne. Pour ce faire, nous avons éteint le hotspot mobile et l’avons laissé pendant 1 minute. Comme indiqué dans l’image ci-dessous, j’ai déconnecté le hotspot mobile, forçant l’appareil en mode hors ligne.
![]()
Une fois hors ligne, les données ont commencé à stocker dans un tableau dynamique local. Pendant la période hors ligne d’une minute, chaque point de données était stocké en toute sécurité sans aucune perte de données.
![]()
Comme vous pouvez le voir dans l’image ci-dessus, une fois que j’ai reconnecté sur Internet, l’ensemble entier des données stockées a été poussée vers le serveur une par une en quelques secondes et le système Revenu en mode en ligne.
Après 20 minutesnous avons terminé nos tests et retourné au bureau.
![]()
Par conséquent, nous avons réussi et vérifié le fonctionnement de l’appareil et de son application. Avec les futures mises à jour dans Geolinker, il sera encore plus facile à utiliser comme plate-forme générique de traçage et de routage GPS.
Au cours de cette démonstration, nous avons fait face à certains défis que je voudrais partager ici.
- Nous devons vérifier la précision des données avant de les envoyer au serveur car le serveur est conçu pour gérer uniquement les coordonnées décimales. Il n’est pas nécessaire de s’inquiéter de l’horodatage, car c’est juste une chaîne, et vous pouvez nourrir toute valeur de votre choix.
- L’API de routage ne peut tracer que des coordonnées consécutives à proximité. Si les données fluctuent trop, vous pourriez ne pas obtenir une sortie de routage appropriée sur la carte, mais le traçage sera toujours effectué.
- L’utilisation d’un tableau dynamique local est limitée par les spécifications matérielles. Il est recommandé d’utiliser une mémoire flash séparée pour une meilleure rétention des données, même si l’appareil perd l’énergie.
- L’utilisation du module GPS NEO6M dans les villes ou les zones à fort trafic avec son antenne intégrée pourrait être difficile. Par conséquent, l’utilisation d’une antenne externe est une meilleure option.
Référentiel GitHub avec code et circuit
Le code complet pour cela GPS Tracker à l’aide du projet ESP32 est fourni au bas de cette page. De plus, vous pouvez trouver le code source dans notre référentiel GitHub lié ci-dessous.
![]()
![]()
Projets utilisant GPS Tracker pour la visualisation des données
Auparavant, nous avons utilisé des trackers GPS dans divers projets pour collecter et visualiser les données de localisation. Si vous souhaitez explorer ces projets, consultez les liens ci-dessous.


![]()
STACKER GPS BASET LORA Utilisation d’Arduino et Lora Shield
Ce projet démontre la construction d’un système de suivi GPS utilisant la technologie LORA pour une communication à longue portée. Un émetteur lit les données de localisation d’un module GPS NEO-6M et le transmet sans fil sur LORA, ce qui le rend adapté aux applications nécessitant une plage prolongée et une faible consommation d’énergie.
![]()
![]()
DIY Emplacement Tracker à l’aide de GSM SIM800 et Arduino
Ce projet consiste à créer un tracker de localisation à l’aide d’un module Arduino et d’un module GSM SIM800. Le système reçoit les appels des utilisateurs, récupère les coordonnées GPS et renvoie les données de localisation via SMS, permettant le suivi en temps réel sans avoir besoin de connectivité Internet.
Retrouvez l’histoire de Raspberry Pi dans cette vidéo :

-
Android Smart Tag, Traceur GPS Lot de 4, Localisateur D’Objets Bluetooth Fonctionne avec l’app Google Localiser (Uniquement Android), Batterie Remplaçable, IP67 Imperméable, Voiture/Les clés/Valises
-
Android Smart Tag, Traceur GPS Lot de 2, Localisateur D’Objets Bluetooth Fonctionne avec l’app Google Localiser (Uniquement Android), Batterie Remplaçable, IP67 Imperméable, Voiture/Les clés/Valises