Problème GPS : un modèle fonctionne, mais pas l'autre

Bonjour à tous,

J’ai un projet sur lequel je souhaite utiliser deux GPS. Pour cela, j’ai acheté deux GPS NEO-7M. Le tout pour être utilisé sur des Arduino Nano clone.

Afin de les tester de manière simple, j’ai téléversé le code suivant, qui est un code d’exemple de la librairie TinyGPS :

#include <SoftwareSerial.h>

#include <TinyGPS.h>

/* This sample code demonstrates the normal use of a TinyGPS object.
   It requires the use of SoftwareSerial, and assumes that you have a
   4800-baud serial GPS device hooked up on pins 4(rx) and 3(tx).
*/

TinyGPS gps;
SoftwareSerial ss(4, 3);//RX,TX

void setup()
{
  Serial.begin(115200);
  ss.begin(4800);
  
  Serial.print("Simple TinyGPS library v. "); Serial.println(TinyGPS::library_version());
  Serial.println("by Mikal Hart");
  Serial.println();
}

void loop()
{
  bool newData = false;
  unsigned long chars;
  unsigned short sentences, failed;

  // For one second we parse GPS data and report some key values
  for (unsigned long start = millis(); millis() - start < 1000;)
  {
    while (ss.available())
    {
      char c = ss.read();
      //Serial.write(c); // uncomment this line if you want to see the GPS data flowing
      if (gps.encode(c)) // Did a new valid sentence come in?
        newData = true;
    }
  }

  if (newData)
  {
    float flat, flon;
    unsigned long age;
    gps.f_get_position(&flat, &flon, &age);
    Serial.print("LAT=");
    Serial.print(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat, 6);
    Serial.print(" LON=");
    Serial.print(flon == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flon, 6);
    Serial.print(" SAT=");
    Serial.print(gps.satellites() == TinyGPS::GPS_INVALID_SATELLITES ? 0 : gps.satellites());
    Serial.print(" PREC=");
    Serial.print(gps.hdop() == TinyGPS::GPS_INVALID_HDOP ? 0 : gps.hdop());
  }
  

  gps.stats(&chars, &sentences, &failed);
  Serial.print(" CHARS=");
  Serial.print(chars);
  Serial.print(" SENTENCES=");
  Serial.print(sentences);
  Serial.print(" CSUM ERR=");
  Serial.println(failed);
  if (chars == 0)
    Serial.println("** No characters received from GPS: check wiring **");
}

Le résultat est le suivant pour les deux GPS NEO-7M que j’ai acheté :

CHARS=9 SENTENCES=0 CSUM ERR=0
CHARS=119 SENTENCES=0 CSUM ERR=0
CHARS=229 SENTENCES=0 CSUM ERR=0
CHARS=343 SENTENCES=0 CSUM ERR=0
CHARS=453 SENTENCES=0 CSUM ERR=0
CHARS=563 SENTENCES=0 CSUM ERR=0
CHARS=738 SENTENCES=0 CSUM ERR=0
CHARS=897 SENTENCES=0 CSUM ERR=0
CHARS=1007 SENTENCES=0 CSUM ERR=0
CHARS=1117 SENTENCES=0 CSUM ERR=0
CHARS=1227 SENTENCES=0 CSUM ERR=0
CHARS=1337 SENTENCES=0 CSUM ERR=0
CHARS=1464 SENTENCES=0 CSUM ERR=0

Le résultat reste similaire, même si je laisse le GPS en extérieur pendant 2-3h comme je l’ai fait ce soir. De toute manière au bout de quelques dizaines de secondes le GPS se met à clignoter donc je pense qu’il a bien acquis la position.

Par chance, j’ai chez moi un troisième GPS acheté il y a plusieurs années : un EM406, donc un modèle différent. Afin de vérifier que le problème ne venait pas du code, j’ai branché ce troisième GPS en lieu et place de l’EM406. Le résultat est le suivant :

LAT=46.xxx LON=3.xxx SAT=4 PREC=350 CHARS=7244 SENTENCES=63 CSUM ERR=0
LAT=46.xxx LON=3.xxx SAT=4 PREC=350 CHARS=7572 SENTENCES=65 CSUM ERR=0
LAT=46.xxx LON=3.xxx SAT=5 PREC=210 CHARS=7900 SENTENCES=68 CSUM ERR=0
LAT=46.xxx LON=3.xxx8 SAT=5 PREC=210 CHARS=8266 SENTENCES=71 CSUM ERR=0
LAT=46.xxx LON=3.xxx7 SAT=5 PREC=210 CHARS=8491 SENTENCES=74 CSUM ERR=0

Nota : j’ai masqué les coordonnées parce que je ne veux pas que vous sachiez que j’habite dans la Nièvre au 36 rue de Arduineurs, 58000 Nevers

Ensuite, je me suis dit que la librairie TinyGPS était obsolète. J’ai donc installé la TinyGPS++. Je vous passe les résultats, mais en gros c’est similaire. Tout fonctionne avec l’EM406 mais pas avec le NEO-7M.

Mon analyse est la suivante :

  • Mes branchements sont corrects, sinon je n’aurais pas ce code. De plus tout fonctionne avec l’autre GPS
  • Le GPS est correctement alimenté et parvient bien à acquérir sa position puisqu’il clignote
  • L’arduino reçoit bien des trames, mais à priori pas de “nouvelles trames” si j’en crois le code
  • Je ne crois pas à un défaut de fabrication du NEO-7M. Déjà peu probable, ensuite presque impossible sur deux GPS identiques, et ensuite il envoie bien des trames
  • Ce n’est visiblement pas un problème de bibliothèque comme j’ai testé la TinyGPS++

Du coup, quelqu’un aurait-il une idée de test à réaliser ou de la cause source du problème?

Merci d’avance pour votre aide!

Bon problème résolu en relisant la datasheet : le 7M est par défaut à 9600 bauds alors que le programme de test était lui à 4800 bauds

J’ai corrigé la valeur et évidemment ça s’est mis à marcher comme par magie!

Désolé du dérangement et bonne soirée à toutes et tous!

catsur: Désolé du dérangement

Pas de problème, cela peut toujours servir à d'autres

Pour ma culture personnelle, tu as acheté quel module/carte pour tes NEO-7M?