LILYGO T-SIM7000G ESP32 Obtenir des données GPS Latitude Longitude Altitude

LILYGO T-SIM7000G ESP32 Obtenir des données GPS Latitude Longitude Altitude

Dans ce guide rapide, vous apprendrez comment obtenir des données GPS avec la carte LILYGO T-SIM7000G ESP32 à l’aide de l’IDE Arduino. Ce tuto est également compatible avec un ESP32 « normal » connecté à un module SIM7000G.

LILYGO T-SIM7000G ESP32 Obtenir des données GPS Latitude Longitude Altitude

Présentation du LILYGO T-SIM7000G ESP32

La LILYGO T-SIM7000G est une carte de développement ESP32 avec une puce SIM7000G. Cela ajoute LTE (4G), GPS et GPRS à votre carte. Cela signifie qu’avec cette carte, vous pouvez envoyer des SMS, obtenir l’emplacement et l’heure à l’aide du GPS et la connecter à Internet à l’aide d’un plan de données de carte SIM. Ce tableau ne prend pas en charge les appels téléphoniques.

LILYGO T-SIM7000G ESP32

Outre le module SIM7000G, la carte est également livrée avec des fonctionnalités intéressantes comme un support de batterie pour une batterie 18650, un circuit de charge de batterie où vous pouvez connecter des panneaux solaires pour recharger la batterie et un emplacement pour carte microSD qui peut être utile pour les projets d’enregistrement de données. ou pour enregistrer les paramètres de configuration.

Pour une introduction plus approfondie, nous vous recommandons de suivre le guide de démarrage :

Où acheter LILYGO T-SIM7000G ESP32 ?

Vérifiez le lien suivant :

Tous les magasins du lien précédent devraient vendre la dernière version, mais revérifiez la page du produit, juste au cas où le vendeur changerait quelque chose.

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

LILYGO T SIM7000G ESP32 Obtenir des donnees GPS Latitude Longitude Altitude

Bibliothèques

L’ESP32 communique avec la puce SIM7000G en envoyant des commandes AT via une communication série. Vous n’avez pas besoin d’une bibliothèque, vous pouvez simplement établir une communication série avec le module et commencer à envoyer des commandes AT. Il existe un manuel avec toutes les commandes SIM7000G AT :

Cependant, il pourrait être plus pratique d’utiliser une bibliothèque. Par exemple, le TinyGSM La bibliothèque sait quelles commandes envoyer et comment gérer les réponses AT, et intègre cela dans l’interface standard du client Arduino – c’est la bibliothèque que nous utiliserons dans ce didacticiel.

Installation de la bibliothèque TinyGSM

Ouvrez votre IDE Arduino et accédez à Esquisser > Inclure la bibliothèque > Gérer les bibliothèques. Le gestionnaire de bibliothèque devrait s’ouvrir. Rechercher TinyGSM. Sélectionnez la bibliothèque TinyGSM de Volodymyr Shymanskyy.

Installer la bibliothèque TinyGSM Arduino IDE

Vous devez également installer la bibliothèque StreamDebugger. Aller à Esquisser > Inclure la bibliothèque > Gérer les bibliothèquesrechercher Débogueur de fluxet installez-le.

installer la bibliothèque de débogage de flux

Préparation de la carte LILYGO T-SIM7000G ESP32

Pour obtenir des données GPS avec votre carte, vous n’avez pas besoin de connecter une carte SIM. Il vous suffit de connecter l’antenne GPS à la carte.

Antenne GPS ESP32 SIM7000G connectée

Carte LILYGO T-SIM7000G ESP32 – Obtenez des données GPS

Copiez le code suivant dans votre IDE Arduino.

/*
  Rui Santos
  Complete project details at https://Raspberryme.com/lilygo-t-sim7000g-esp32-gps-data/
  
  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.
*/

#define TINY_GSM_MODEM_SIM7000
#define TINY_GSM_RX_BUFFER 1024 // Set RX buffer to 1Kb

#include <TinyGsmClient.h>

// LilyGO T-SIM7000G Pinout
#define UART_BAUD   115200
#define PIN_DTR     25
#define PIN_TX      27
#define PIN_RX      26
#define PWR_PIN     4

#define LED_PIN     12

// Set serial for debug console (to Serial Monitor, default speed 115200)
#define SerialMon Serial
// Set serial for AT commands
#define SerialAT  Serial1

TinyGsm modem(SerialAT);

void setup(){
  SerialMon.begin(115200);
  SerialMon.println("Place your board outside to catch satelite signal");

  // Set LED OFF
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, HIGH);

  //Turn on the modem
  pinMode(PWR_PIN, OUTPUT);
  digitalWrite(PWR_PIN, HIGH);
  delay(300);
  digitalWrite(PWR_PIN, LOW);

  delay(1000);
  
  // Set module baud rate and UART pins
  SerialAT.begin(UART_BAUD, SERIAL_8N1, PIN_RX, PIN_TX);

  // Restart takes quite some time
  // To skip it, call init() instead of restart()
  SerialMon.println("Initializing modem...");
  if (!modem.restart()) {
    Serial.println("Failed to restart modem, attempting to continue without restarting");
  }
  
  // Print modem info
  String modemName = modem.getModemName();
  delay(500);
  SerialMon.println("Modem Name: " + modemName);

  String modemInfo = modem.getModemInfo();
  delay(500);
  SerialMon.println("Modem Info: " + modemInfo);
}

void loop(){
  // Set SIM7000G GPIO4 HIGH ,turn on GPS power
  // CMD:AT+SGPIO=0,4,1,1
  // Only in version 20200415 is there a function to control GPS power
  modem.sendAT("+SGPIO=0,4,1,1");
  if (modem.waitResponse(10000L) != 1) {
    SerialMon.println(" SGPIO=0,4,1,1 false ");
  }

  modem.enableGPS();
  
  delay(15000);
  float lat      = 0;
  float lon      = 0;
  float speed    = 0;
  float alt     = 0;
  int   vsat     = 0;
  int   usat     = 0;
  float accuracy = 0;
  int   year     = 0;
  int   month    = 0;
  int   day      = 0;
  int   hour     = 0;
  int   min      = 0;
  int   sec      = 0;
  
  for (int8_t i = 15; i; i--) {
    SerialMon.println("Requesting current GPS/GNSS/GLONASS location");
    if (modem.getGPS(&lat, &lon, &speed, &alt, &vsat, &usat, &accuracy,
                     &year, &month, &day, &hour, &min, &sec)) {
      SerialMon.println("Latitude: " + String(lat, 8) + "\tLongitude: " + String(lon, 8));
      SerialMon.println("Speed: " + String(speed) + "\tAltitude: " + String(alt));
      SerialMon.println("Visible Satellites: " + String(vsat) + "\tUsed Satellites: " + String(usat));
      SerialMon.println("Accuracy: " + String(accuracy));
      SerialMon.println("Year: " + String(year) + "\tMonth: " + String(month) + "\tDay: " + String(day));
      SerialMon.println("Hour: " + String(hour) + "\tMinute: " + String(min) + "\tSecond: " + String(sec));
      break;
    } 
    else {
      SerialMon.println("Couldn't get GPS/GNSS/GLONASS location, retrying in 15s.");
      delay(15000L);
    }
  }
  SerialMon.println("Retrieving GPS/GNSS/GLONASS location again as a string");
  String gps_raw = modem.getGPSraw();
  SerialMon.println("GPS/GNSS Based Location String: " + gps_raw);
  SerialMon.println("Disabling GPS");
  modem.disableGPS();

  // Set SIM7000G GPIO4 LOW ,turn off GPS power
  // CMD:AT+SGPIO=0,4,1,0
  // Only in version 20200415 is there a function to control GPS power
  modem.sendAT("+SGPIO=0,4,1,0");
  if (modem.waitResponse(10000L) != 1) {
    SerialMon.println(" SGPIO=0,4,1,0 false ");
  }

  delay(200);
  // Do nothing forevermore
  while (true) {
      modem.maintain();
  }
}

Afficher le code brut

Comment fonctionne le code

Examinons rapidement les parties pertinentes du code.

Tout d’abord, vous devez définir le module que vous utilisez. La bibliothèque est compatible avec de nombreux modules différents. Pour utiliser le SIM7000G, incluez la ligne suivante :

#define TINY_GSM_MODEM_SIM7000

Inclure la bibliothèque TinyGSM.

#include <TinyGsmClient.h>

Les lignes suivantes définissent les broches de la carte pour contrôler le modem :

// LilyGO T-SIM7000G Pinout
#define UART_BAUD   115200
#define PIN_DTR     25
#define PIN_TX      27
#define PIN_RX      26
#define PWR_PIN     4

#define LED_PIN     12

Vous devez créer deux instances Serial. Un pour le Serial Monitor que nous appellerons SerialMonet un autre pour communiquer avec le modem via des commandes AT, que nous appelons SerialAT.

// Set serial for debug console (to Serial Monitor, default speed 115200)
#define SerialMon Serial
// Set serial for AT commands
#define SerialAT  Serial1

Créer un TinyGSM instance appelée modem sur le SerialAT.

TinyGsm modem(SerialAT);

Initialisez le moniteur série à un débit en bauds de 115200.

SerialMon.begin(115200);

Allumez le modem en réglant la broche d’alimentation sur HIGH et LOW à un intervalle spécifique.

//Turn on the modem
pinMode(PWR_PIN, OUTPUT);
digitalWrite(PWR_PIN, HIGH);
delay(300);
digitalWrite(PWR_PIN, LOW);

Initialisez une communication série avec le modem sur les broches RX et TX que nous avons définies précédemment.

SerialAT.begin(UART_BAUD, SERIAL_8N1, PIN_RX, PIN_TX);

Redémarrez ou initialisez le modem :

// Restart takes quite some time
// To skip it, call init() instead of restart()
SerialMon.println("Initializing modem...");
if (!modem.restart()) {
  Serial.println("Failed to restart modem, attempting to continue without restarting");
}

Obtenez des informations sur le modem à l’aide de getNomModem() et getModemInfo() méthodes. Ces lignes sont facultatives et vous n’en avez pas réellement besoin pour obtenir des données GPS.

// Print modem info
String modemName = modem.getModemName();
delay(500);
SerialMon.println("Modem Name: " + modemName);

String modemInfo = modem.getModemInfo();
delay(500);
SerialMon.println("Modem Info: " + modemInfo);

Il existe deux versions de la carte LILYGO SIM7000G ESP32. Le dernier est livré avec un contrôle actif de l’alimentation de l’antenne GPS – lorsque le module GPIO 4 n’est pas allumé, l’antenne ne consomme que le courant statique du LDO. Cela signifie que nous devons activer GPIO 4 avant d’obtenir des données GPS pour alimenter l’antenne. C’est ce que font les lignes suivantes :

// Set SIM7000G GPIO4 HIGH ,turn on GPS power
// CMD:AT+SGPIO=0,4,1,1
// Only in version 20200415 is there a function to control GPS power
modem.sendAT("+SGPIO=0,4,1,1");
if (modem.waitResponse(10000L) != 1) {
  SerialMon.println(" SGPIO=0,4,1,1 false ");
}

Vous pouvez démarrer le GPS en utilisant le activerGPS() méthode.

modem.enableGPS();

Ensuite, nous créons des variables dans lesquelles nous enregistrerons les données GPS. Nous obtiendrons la latitude, la longitude, la vitesse, l’altitude, les satellites visibles, les satellites utilisés, la précision, la date et l’heure.

delay(15000);
float lat      = 0;
float lon      = 0;
float speed    = 0;
float alt     = 0;
int   vsat     = 0;
int   usat     = 0;
float accuracy = 0;
int   year     = 0;
int   month    = 0;
int   day      = 0;
int   hour     = 0;
int   min      = 0;
int   sec      = 0;

La ligne suivante obtient les données GPS en utilisant le getGPS() méthode et enregistre les valeurs sur les bonnes variables.

if (modem.getGPS(&lat, &lon, &speed, &alt, &vsat, &usat, &accuracy,
                     &year, &month, &day, &hour, &min, &sec))

Ensuite, nous imprimons simplement les valeurs sur le Serial Monitor. Maintenant que vous disposez des informations pertinentes enregistrées sur les variables, il est facile de modifier ce projet selon vos propres besoins. Par exemple, un traceur GPS, un enregistreur de données GPS, etc.

SerialMon.println("Latitude: " + String(lat, 8) + "\tLongitude: " + String(lon, 8));
SerialMon.println("Speed: " + String(speed) + "\tAltitude: " + String(alt));
SerialMon.println("Visible Satellites: " + String(vsat) + "\tUsed Satellites: " + String(usat));
SerialMon.println("Accuracy: " + String(accuracy));
SerialMon.println("Year: " + String(year) + "\tMonth: " + String(month) + "\tDay: " + String(day));
SerialMon.println("Hour: " + String(hour) + "\tMinute: " + String(min) + "\tSecond: " + String(sec));

Vous pouvez également obtenir toutes les données brutes renvoyées par le GPS en utilisant le getGPRSraw() méthode.

String gps_raw = modem.getGPSraw();
SerialMon.println("GPS/GNSS Based Location String: " + gps_raw);

Lorsque vous avez fini d’utiliser le GPS, vous pouvez le désactiver à l’aide de la désactiverGPS() méthode:

modem.disableGPS();

Et enfin, coupez l’alimentation de l’antenne en désactivant le GPIO 4 :

// Set SIM7000G GPIO4 LOW ,turn off GPS power
// CMD:AT+SGPIO=0,4,1,0
// Only in version 20200415 is there a function to control GPS power
modem.sendAT("+SGPIO=0,4,1,0");
if (modem.waitResponse(10000L) != 1) {
  SerialMon.println(" SGPIO=0,4,1,0 false ");
}

Manifestation

Dans votre IDE Arduino, accédez à Outils > Planches et sélectionnez le Module de développement ESP32. Sélectionnez le port COM dans Outils > Port.

Ensuite, téléchargez le code sur votre tableau.

Bouton de téléchargement Arduino 2.0

Ouvrez le moniteur série à un débit en bauds de 115200 et appuyez sur le bouton RST intégré pour redémarrer la carte. Placez votre tableau à l’extérieur ou à côté d’une fenêtre ou d’une porte afin qu’il puisse capter les signaux satellites.

Cela peut prendre un certain temps avant qu’il ne puisse obtenir des données GPS, comme vous pouvez le voir sur la capture d’écran de mon Serial Monitor.

ESP32 T-SIM7000G obtenir des données GPS

Comme vous pouvez le voir, il obtient la latitude, la longitude, la vitesse, l’altitude, les satellites visibles, le nombre de satellites utilisés pour obtenir la position, la précision et la date et l’heure UTC. La longitude et la latitude que j’ai obtenues étaient très précises. Donc, dans mon cas, cela fonctionnait plutôt bien pour obtenir l’emplacement.

Il produit également les informations de navigation GNSS complètes analysées à partir de phrases NMEA (que vous ne pouvez pas voir ci-dessus car la fenêtre Serial Monitor est trop petite). 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. La sortie est la suivante. Les virgules séparent différentes valeurs.

1,1,20220809173458.000,41.12XXXX,-8.52XXXX,140.200,0.00,237.6,1,,2.3,2.5,1.0,,20,5,1,,48,,

Voici ce que chaque valeur signifie, dans l’ordre :

  1. Statut d’exécution GNSS
  2. Correction de l’état
  3. Date et heure UTC
  4. Latitude
  5. Longitude
  6. Altitude MSL
  7. Vitesse sur le fond
  8. Parcours au sol
  9. Mode fixe
  10. Réservateur1
  11. HDOP
  12. PDOP
  13. VDOP
  14. Réservé2
  15. Satellites GNSS en vue
  16. Satellites GPS utilisés
  17. Satellites GLONASS utilisés
  18. Réservateur3
  19. C/N0 max
  20. HPA
  21. APV

Vous pouvez en savoir plus sur ces paramètres et les valeurs possibles en consultant le AT+CGNSINF Commande AT sur le manuel des commandes AT du SIM7000G.

Emballer

Dans ce tutoriel, vous avez appris à utiliser la carte LILYGO T-SIM7000G ESP32 pour obtenir des données GPS. Nous vous avons montré un exemple simple qui imprime les données GPS dans le Serial Monitor. L’idée est de modifier l’exemple et de l’appliquer à vos propres projets. Il devrait également être compatible avec une carte ESP32 « normale » connectée à un module SIM7000G séparé.

Les fonctionnalités de la carte ESP32 T-SIM7000G vous permettront de construire une grande variété de projets en tenant compte du fait qu’elle peut se connecter à Internet dans des endroits distants à l’aide d’un plan de données de carte SIM et envoyer des SMS. Le fait qu’il puisse utiliser une batterie et des panneaux solaires pour le chargement est également excellent, et la carte microSD peut également être très utile pour l’enregistrement de données ou pour enregistrer les paramètres de configuration.

Nous espérons que vous avez trouvé ce tutoriel utile. Avez-vous développé des projets avec cette carte ? Faites-nous savoir dans la section commentaires ci-dessous.

Vous aimerez peut-être aussi les tutoriels suivants (qui, avec des modifications mineures, peuvent être utilisés avec la carte SIM7000G) :

En savoir plus sur l’ESP32 avec nos ressources :

Merci d’avoir lu.