[Tuto] Mise en marche de l’Ultimate GPS FeatherWing via le HUZZAH ESP8266 Wifi

Comment lire les coordonnées lue par le GPS à travers le HUZZAH ESP8266 Wifi?

1.Montage

Le but de ce montage est de tester le featherwing GPS via le Feather HUZZAH ESP8266 Wifi. Les cartes ne sont pas directement compatibles en mode shield, il est donc nécessaire de simuler un nouveau couple de ports RX/TX.


Effectuer les connexions suivantes :

  • le pin 3V du GPS au pin 3V de l’ESP
  • le pin GND du GPS au pin GND de l’ESP
  • Pin 12 de l’ESP au pin TX du GPS
  • Pin 14 de l’ESP au pin RX du GPS
  • Brancher l’ESP à un pc avec un câble USB

2. Programme

Le Programme permet de lire les données envoyées par le GPS, sur le serial monitor de l’IDE Arduino.

Avant de mettre le programme sous Arduino IDE, vous devez ajouter des types de cartes supplémentaires.

  1. Pour cela, aller dans Fichier/Préférence puis coller le lien suivant : http://arduino.esp8266.com/stable/package_esp8266com_index.json
  2. Coller le dans le champ texte “URL de gestionnaire des cartes supplémentaires”.
  3. Valider l’entrée en appuyant sur “OK”.
  4. Ensuite,aller dans Outils/Type de carte et choisir Generic ESP8266 module.
  5. Choisir nodemcu dans Outils/Reset Method
  6. Copier/Coller le programme suivant :

Code :

 
#include <Adafruit_GPS.h>// https://github.com/adafruit/Adafruit_GPS.git
#include <SoftwareSerial.h>// déjà intégré à Arduino
#define BAUD_RATE 115200 // vitesse de communication de l’USB
#define BAUD_RATE_GPS 9600 // vitesse de communication entre le GPS et ESP8266 généralement 9600 baud

SoftwareSerial swSer(12, 14, false, 256); // Crée une sortie (RX, TX) dans la variable swSer
void setup()  // Programme d’initialisation
{
 Serial.begin(BAUD_RATE); // Initiation de la sortie UART de HUZZAH
 swSer.begin(BAUD_RATE_GPS); // Initiation de la sortie UART du gps
 pinMode(0, OUTPUT); // Initialise le PIN 0 en sortie
 Serial.print("\nEntering Setup"); // Affiche sur le moniteur “Entering Setup”
 Serial.println("\nSoftware serial test started"); // Affiche sur le moniteur “Software serial test started"

 for (char ch = ' '; ch <= 'z'; ch++) { //test pour afficher tous les caractères à la suite
   swSer.write(ch);
   Serial.write(ch);
   swSer.println("");
   }
 Serial.println("\nSoftware serial test done");// Affiche sur le moniteur “Software serial test done"
}

void clignot() {  // sous-programme qui fait clignoter la led rouge
 for (int i =0; i<= 10; i++) {
   digitalWrite(0, HIGH);  // Allume la LED
   delay(500);  // Attend 500ms
   digitalWrite(0, LOW);  // Eteint la LED
   delay(500);
   }
}

void loop() {
//  clignot(); //test si HUZZAH répond
//affiche ce que le GPS envoie
 if (swSer.available()) {    // regarde si la sortie est “libre”
char c = swSer.read(); // mets ce que envoie le GPS dans la variable caractère c
   Serial.write(c); // Affiche ce que contient la variable c
 }    
}

Le programme ci dessus affiche dans le Moniteur série:


$GPGGA,001336.799,,,,,0,00,,,M,,M,,*78
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPRMC,001336.799,V,,,,,0.00,0.00,060180,,,N*42
$GPVTG,0.00,T,,M,0.00,N,0.00,K,N*32

GPRMC et GPGGA sont les lignes qui contiennent les coordonnées qui nous intéressent. Le GPRMC est une trame d’information (souvent utilisée dans la navigation maritime). Le GPGGA est une trame d’information couramment utilisée pour connaître la position courante du récepteur GPS.

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

  • 064036.289: Heure exprimée en hhmmss.ms (06H40min36s et 289ms).
  • 4836.5375,N,00740.9373,E : Coordonnées liées à la position.
    1. Latitude 48 degré et  36,5375 minutes Nord (N = Nord / S =Sud).
    2. Longitude -74 degré  et 40,9373 minutes Ouest (W = Ouest / E = Est).
  • 1: Type de positionnement ( 1 = positionnement GPS).
  • 04: Nombre de satellites utilisés pour calculer les coordonnées.
  • 3.2: Précision Horizontale.
  • 200.2,M: Altitude en mètres.
  • ,,,,0000 : D’autres données peuvent être inscrite.
  • *0E : Contrôle de parité de la trame au format hexadécimal.

Pour une meilleure réception des données  du GPS, il est conseillé de l’utiliser en extérieur.

Source:

https://fr.wikipedia.org/wiki/NMEA_0183

https://www.uni-weimar.de/projekte/costumes-and-environment/2017/05/19/tutorial-connecting

[Tuto] Trianguler la position avec le SIM800L (Arduino)

Pour voir le montage et la prise en main de ce module SIM800L, vous pouvez suivre le tuto sur cette page: Tuto SIM800L – Montage et prise en main 

Le programme suivant affiche dans le moniteur série la position du module SIM800L (latitude,longitude),ainsi que l’heure GMT ,grâce à des commandes AT :

//Importation des librairies
#include <SoftwareSerial.h>
#include <String.h>
#define AT_DELAY  3000    // Delai après envoi commande AT

SoftwareSerial sim800l(9, 10);// RX, TX

String Message, tampon;
String Latitude, Longitude, Time;
//stockage des differentes commandes // Configure le mode positionnement
String AT_COMMAND[9] = {"AT+CGATT =1", "AT+SAPBR =3,1,\"CONTYPE\",\"GPRS\"", "AT+SAPBR =3,1,\"APN\",\"orange.m2m.spec\"",
                        "AT+SAPBR =3,1,\"USER\",\"orange\"", "AT+SAPBR =3,1,\"PWD\",\"orange\"",
                        "AT+SAPBR=1,1", "AT+SAPBR=2,1", "AT+CIPGSMLOC=1,1"
                       };
void setup() {      // début du setup
  sim800l.begin(9600);// Démarrage du modem
  Serial.begin(9600);// Initialisation de la communication série
  Serial.println("start ...");
}

void loop() {    // Début du loop
  delay(2000);
  for (int k = 0; k < 9; k++)
  {
    sim800l.println(AT_COMMAND[k]);//envoie de la commande AT
    delay(650);//délai de réponse
    Message = sim800l.readString();//lecture du retour du sim800l
    Serial.println(Message);// affichage dans le moniteur série des commandes AT + réponse
    if (k == 8)
    {
      Serial.println("##############################################################");
      
      Serial.print("Time: "); 
      //récupération des chaines de caractère correspondant à l'heure
      Time = Message.substring(Message.indexOf('/') + 7, Message.indexOf('/') + 15);
      //affichage dans le moniteur série
      Serial.println(Time);
      
      Serial.println("##############################################################");
      
      Serial.print("Latitude: ");
      Latitude = Message.substring(Message.indexOf("0,") + 11, Message.indexOf(',') + 19);
      Serial.println(Latitude);
      
      Longitude = Message.substring(Message.indexOf(':') + 4, Message.indexOf(',') + 9);
      Serial.print("Longitude: ");
      Serial.println(Longitude);
      
      Serial.println("##############################################################");
    }
  }
  sim800l.println( "AT+SAPBR =0,1");

exit(0);
}


Récapitulatif des AT commandes utilisées pour la localisation:

CommandesRéponsesInfo
AT+CGATTOK
Connexion au service GPRS
AT+SAPBR =3,1, »CONTYPE », »GPRS »OKConfiguration du support en GPRS
AT+SAPBR =3,1, »APN », »orange.m2m.spec »OKConfiguration de l’APN
AT+SAPBR =3,1, »USER », »orange »OKUser de l’APN
AT+SAPBR =3,1, »PWD », »orange »OKMot de passe de l’APN
AT+SAPBR=1,1OKOuverture du support
AT+SAPBR=2,1+SAPBR: 1,1, »IP »
OK
Vérification de la connexion
AT+CIPGSMLOC=1,1+CIPGSMLOC: 0,Longitude,Latitude,AAAA/MM/JJ,H:MIN:SECRécupération de la localisation et de l’heure
AT+SAPBR =0,1OKFermeture du support
  1. Bonjour , le travail s’arrête en cours de travail sur ma cnc sans message d’erreur et ceci malgré différents tests:…