Souci GPS GPS6MV2

Bonjour,

Je ne suis pas du genre à demander de l'aide mais là je sèche.

Je viens de recevoir mon module GPS -> gps6mv2

Celui-ci :

J'ai fait mes testes avec une NANO et UNO.

Après plusieurs recherche sur internet pour voir comment le faire fonctionner, je tombe sur les librairies TinyGPS, TinyGPS++ et Adafruit_GPS

Après plusieurs testes avec TinyGPS ou TinyGPS++ rien de concluant. J'ai vu sur d'autres forum que les libs TinyGPS et TinyGPS++ peuvent être instable. Du coup j'ai testé avec Adafruit_GPS et là mm résultat à savoir rien du tout.

Le rien du tout c'est quoi ? :slight_smile:

  • lorsque je teste les Sketch d'exemple des Lib Tiny par exemple celui-ci : DeviceExemple -> j'obtiens toujours ceci dans le moniteur série : No GPS detected: check wiring.

  • j'ai testé un autre Sketch TibyGPS -> test_with_gps_device (un d'exemple de la lib) : j’obtiens ceci :

A chaque fois j'ai bien pris le temps de modifier les Pins RX et TX pour correspondre à mon branchement.

Dans mon cas le branchement est le suivant :

  • GPS VCC -> 5v Arduino
  • GPS RX -> Pin 8 Arduino
  • GPS TX -> Pin 9 Arduino
  • GPS GND -> GND Arduino

Plusieurs points me laisse perplexe :

  • jusqu'à maintenant, j'ai 0 led qui s'allume sur le GPS (il me semble que normalement elle devrait clignoter mais ce n'est pas le cas)
  • j'ai vu également que le GPS pourrait être en mode binaire (pas bien certain de ce que j'ai lu en anglais) comment s'en assurer ? et que dois-je faire dans ce cas ?

J'ai l'impression que le GPS est mort mais comment s'en assurer ?

J'espère avoir été assez clair et merci d'avance pour votre aide .

Il faudrait voir le code pour en savoir plus, ainsi qu'une datasheet du GPS ou un lien vendeur...

Voici la datasheet http://www.openimpulse.com/blog/wp-content/uploads/wpsc/downloadables/Ublox-NEO-6-GPS-Module-Datasheet.pdf

et Voici le code d'exemple de la lib

#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(8, 9);

static void smartdelay(unsigned long ms);
static void print_float(float val, float invalid, int len, int prec);
static void print_int(unsigned long val, unsigned long invalid, int len);
static void print_date(TinyGPS &gps);
static void print_str(const char *str, int len);

void setup()
{
  Serial.begin(115200);
  
  Serial.print("Testing TinyGPS library v. "); Serial.println(TinyGPS::library_version());
  Serial.println("by Mikal Hart");
  Serial.println();
  Serial.println("Sats HDOP Latitude  Longitude  Fix  Date       Time     Date Alt    Course Speed Card  Distance Course Card  Chars Sentences Checksum");
  Serial.println("          (deg)     (deg)      Age                      Age  (m)    --- from GPS ----  ---- to London  ----  RX    RX        Fail");
  Serial.println("-------------------------------------------------------------------------------------------------------------------------------------");

  ss.begin(4800);
}

void loop()
{
  float flat, flon;
  unsigned long age, date, time, chars = 0;
  unsigned short sentences = 0, failed = 0;
  static const double LONDON_LAT = 51.508131, LONDON_LON = -0.128002;
  
  print_int(gps.satellites(), TinyGPS::GPS_INVALID_SATELLITES, 5);
  print_int(gps.hdop(), TinyGPS::GPS_INVALID_HDOP, 5);
  gps.f_get_position(&flat, &flon, &age);
  print_float(flat, TinyGPS::GPS_INVALID_F_ANGLE, 10, 6);
  print_float(flon, TinyGPS::GPS_INVALID_F_ANGLE, 11, 6);
  print_int(age, TinyGPS::GPS_INVALID_AGE, 5);
  print_date(gps);
  print_float(gps.f_altitude(), TinyGPS::GPS_INVALID_F_ALTITUDE, 7, 2);
  print_float(gps.f_course(), TinyGPS::GPS_INVALID_F_ANGLE, 7, 2);
  print_float(gps.f_speed_kmph(), TinyGPS::GPS_INVALID_F_SPEED, 6, 2);
  print_str(gps.f_course() == TinyGPS::GPS_INVALID_F_ANGLE ? "*** " : TinyGPS::cardinal(gps.f_course()), 6);
  print_int(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0xFFFFFFFF : (unsigned long)TinyGPS::distance_between(flat, flon, LONDON_LAT, LONDON_LON) / 1000, 0xFFFFFFFF, 9);
  print_float(flat == TinyGPS::GPS_INVALID_F_ANGLE ? TinyGPS::GPS_INVALID_F_ANGLE : TinyGPS::course_to(flat, flon, LONDON_LAT, LONDON_LON), TinyGPS::GPS_INVALID_F_ANGLE, 7, 2);
  print_str(flat == TinyGPS::GPS_INVALID_F_ANGLE ? "*** " : TinyGPS::cardinal(TinyGPS::course_to(flat, flon, LONDON_LAT, LONDON_LON)), 6);

  gps.stats(&chars, &sentences, &failed);
  print_int(chars, 0xFFFFFFFF, 6);
  print_int(sentences, 0xFFFFFFFF, 10);
  print_int(failed, 0xFFFFFFFF, 9);
  Serial.println();
  
  smartdelay(1000);
}

static void smartdelay(unsigned long ms)
{
  unsigned long start = millis();
  do 
  {
    while (ss.available())
      gps.encode(ss.read());
  } while (millis() - start < ms);
}

static void print_float(float val, float invalid, int len, int prec)
{
  if (val == invalid)
  {
    while (len-- > 1)
      Serial.print('*');
    Serial.print(' ');
  }
  else
  {
    Serial.print(val, prec);
    int vi = abs((int)val);
    int flen = prec + (val < 0.0 ? 2 : 1); // . and -
    flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1;
    for (int i=flen; i<len; ++i)
      Serial.print(' ');
  }
  smartdelay(0);
}

static void print_int(unsigned long val, unsigned long invalid, int len)
{
  char sz[32];
  if (val == invalid)
    strcpy(sz, "*******");
  else
    sprintf(sz, "%ld", val);
  sz[len] = 0;
  for (int i=strlen(sz); i<len; ++i)
    sz[i] = ' ';
  if (len > 0) 
    sz[len-1] = ' ';
  Serial.print(sz);
  smartdelay(0);
}

static void print_date(TinyGPS &gps)
{
  int year;
  byte month, day, hour, minute, second, hundredths;
  unsigned long age;
  gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age);
  if (age == TinyGPS::GPS_INVALID_AGE)
    Serial.print("********** ******** ");
  else
  {
    char sz[32];
    sprintf(sz, "%02d/%02d/%02d %02d:%02d:%02d ",
        month, day, year, hour, minute, second);
    Serial.print(sz);
  }
  print_int(age, TinyGPS::GPS_INVALID_AGE, 5);
  smartdelay(0);
}

static void print_str(const char *str, int len)
{
  int slen = strlen(str);
  for (int i=0; i<len; ++i)
    Serial.print(i<slen ? str[i] : ' ');
  smartdelay(0);
}

Bonjour

-Dans SofwareSerial.begin() le premier numéro de broche indiqué est Rx , le second Tx

  • GPS RX -> Pin 8 Arduino
  • GPS TX -> Pin 9 Arduino

et

SoftwareSerial ss(8, 9);

Ce câblage est erronné puisqu'il n'est pas croisé mais relie en eux les Rx d'une part et les Tx d'autre part.
Il est impératif que la sortie Tx du GPS soit reliée à une entrée Rx Arduino et vice-versa.

-Le code exemple (utilisé tel quel) correspond à un modem dont le débit par défaut est 4800 bauds, (c'est écrit en commentaire et tête de programme) est-ce bien le cas pour la puce Neo-6M ?

Commencez par bien configurer la liaison série , câblage ET configuration avant de conclure sur la mort du module..... donnez lui une chance de pouvoir s'exprimer.. avant de l'enterrer.

Tutoriel de mise en route progressive du Neo-6M : Guide to NEO-6M GPS Module Arduino | Random Nerd Tutorials

Merci pour votre réponse.

J'ai déjà testé TX GPS au RX arduino mais cela ne change rien.

J'ai tout de même refait le test avec ma MEGA :
j'obtiens ceci dans le moniteur série :

Adafruit GPS logging data dump!
----------------------------------------------------
$GPTXT,01,01,01,PMTK inv format*3E
$GPRMC,,V,,,,,,,,,,N*53
$G$GPTXT,01,01,01,PMTK inv format*3E
$GPRMC,,V,,,,,,,,,,N*53
$GPVTG,,,,,,,,,N*30
$GPGGA,,,,,,0,00,99.99,,,,,,*48
$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
$GPGSV,1,1,00*79
$GPGLL,,,,,,V,N*64
$GPRMC,,V,,,,,,,,,,N*53
$GPVTG,,,,,,,,,N*30
$GPGGA,,,,,,0,00,99.99,,,,,,*48
$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
$GPGSV,1,1,00*79
$GPGLL,,,,,,V,N*64
$GPRMC,,V,,,,,,,,,,N*53
$GPVTG,,,,,,,,,N*30
$GPGGA,,,,,,0,00,99.99,,,,,,*48
$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
$GPGSV,1,1,00*79
$GPGLL,,,,,,V,N*64
$GPRMC,,V,,,,,,,,,,N*53
$GPVTG,,,,,,,,,N*30
$GPGGA,,,,,,0,00,99.99,,,,,,*48
$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
$GPGSV,1,1,00*79
$GPGLL,,,,,,V,N*64
$GPRMC,,V,,,,,,,,,,N*53
$GPVTG,,,,,,,,,N*30
$GPGGA,,,,,,0,00,99.99,,,,,,*48
$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30

Le code utilisé :

// Test code for Adafruit GPS modules using MTK3329/MTK3339 driver
//
// This code turns on the LOCUS built-in datalogger. The datalogger
// turns off when power is lost, so you MUST turn it on every time
// you want to use it!
//
// Tested and works great with the Adafruit GPS FeatherWing
// ------> https://www.adafruit.com/products/3133
// or Flora GPS
// ------> https://www.adafruit.com/products/1059
// but also works with the shield, breakout
// ------> https://www.adafruit.com/products/1272
// ------> https://www.adafruit.com/products/746
//
// Pick one up today at the Adafruit electronics shop
// and help support open source hardware & software! -ada


#include <Adafruit_GPS.h>

// what's the name of the hardware serial port?
#define GPSSerial Serial1

// Connect to the GPS on the hardware port
Adafruit_GPS GPS(&GPSSerial);

// Set GPSECHO to 'false' to turn off echoing the GPS data to the Serial console
// Set to 'true' if you want to debug and listen to the raw GPS sentences
#define GPSECHO  true

void setup()
{
  //while (!Serial);  // uncomment to have the sketch wait until Serial is ready

  // connect at 115200 so we can read the GPS fast enough and echo without dropping chars
  // also spit it out
  Serial.begin(115200);
  delay(1000);
  Serial.println("Adafruit GPS logging data dump!");

  // 9600 NMEA is the default baud rate for MTK - some use 4800
  GPS.begin(9600);

  GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_OFF);

  while (GPSSerial.available())
     GPSSerial.read();

  delay(1000);
  GPS.sendCommand("$PMTK622,1*29");
  Serial.println("----------------------------------------------------");
}

uint32_t updateTime = 1000;

void loop()                     // run over and over again
{
  if (Serial.available()) {
    char c = Serial.read();
    GPSSerial.write(c);
  }
  if (GPSSerial.available()) {
    char c = GPSSerial.read();
    Serial.write(c);
  }
}//loop

freyja9:
j'obtiens ceci dans le moniteur série :

Donc la com fonctionne par contre, il semblerait que le GPS ne capte rien.

Test code for Adafruit GPS modules using MTK3329/MTK3339 driver

-le code testé avec la carte MEGA est-il parfaitement adapté à la puce NEO-6M ?

-qualité de la (fragile) connection d'antenne ?

-test effectué en intérieur ou en extérieur ?

J'ai testé en intérieur mais également en extérieur sur le balcon.

Pour l'antenne, à première vue elle a l'air fonctionnelle.

J'ai testé un code plus simple

    char data;
     
    void setup() {
      //Initialize serial and wait for port to open:
      Serial1.begin(9600);
      Serial.begin(9600);
      while (!Serial) {
        ; // wait for serial port to connect. Needed for Leonardo only
      }
    }
     
    void loop() {
      while (Serial1.available()) {
        data = Serial1.read();
        Serial.print(data);
      }
    }

J'ai la même sortie dans le moniteur

$GPGSV,1,1,00*79
$GPGLL,,,,,,V,N*64
$GPRMC,,V,,,,,,,,,,N*53
$GPVTG,,,,,,,,,N*30
$GPGGA,,,,,,0,00,99.99,,,,,,*48
$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
$GPGSV,1,1,00*79
$GPGLL,,,,,,V,N*64
$GPRMC,,V,,,,,,,,,,N*53
$GPVTG,,,,,,,,,N*30
$GPGGA,,,,,,0,00,99.99,,,,,,*48
$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
$GPGSV,1,1,00*79
$GPGLL,,,,,,V,N*64
$GPRMC,,V,,,,,,,,,,N*53

En cherchant sur le site arduino (loupe en haut de la page) je trouve ce lien qui explique comment utiliser ce GPS.

Il indique notamment

Note:- The module supports baud rate from 4800bps to 230400bps with default baud of 9600.

Ta datasheet indique des vitesses entre 4800 et 115200 bauds.

Le problème peut venir de l'alimentation. Est-ce l'arduino qui alimente le GPS ? Si oui c'est peut-être trop demander à un UNO.

Here, I suggest you to use external power supply to power the GPS module because minimum power requirement for GPS module to work is 3.3 V and Arduino is not capable of providing that much voltage.

L'auteur indique aussi que l'antenne est un peu faible et ne capte rien en intérieur. Il a acheté une autre antenne.

Enfin, il donne un code qui utilise la bibliothèque TinyGPS.

J'ai déjà vu et testé ce lien.

J'ai testé avec une alimentation externe et là pour le coup, quelque soit le baud, j'obtiens toujours ceci

Pour l'antenne, malheureusement j'ai que celle-ci.

Essaye de changer les réglages de la console, avec les boutons en bas à droite.

Désolé je suis sur mon portable, je ne peux pas t'en dire plus.

Je me suis procuré une 2e antenne et toujours le même souci

Par contre j'ai réussi à obtenir ceci :

$GPTXT,01,01,02,u-blox ag - www.u-blox.com*50
$GPTXT,01,01,02,HW  UBX-G5xxx  00040005 FFF9FFFFp*14
$GPTXT,01,01,02,ROM CORE 5.00 (28483) Jun  6 2008 14:45:11*40
$GPTXT,01,01,02,ANTSUPERV=AC SD PDoS SR*20
$GPTXT,01,01,02,ANTSTATUS=DONTKNOW*33
$GPTXT,01,01,02,ANTSTATUS=OK*3B

Sinon rien de neuf :frowning:

Je reviens avec une bonne nouvelle :slight_smile: Le GPS fonctionne enfin !

Après plusieurs tentative infructueuse, je suis partie sur le logiciel u-center u-center afin de voir un peu plus les choses.

Malgré plusieurs tests, le logiciel me donnait exactement les mêmes résultats que l'arduino. (avec 2 antennes différentes)

Du coup, en fouillant un peu le logiciel j'ai vu qu'il était possible de reset le GPS avec les réglages d'usine donc allez :smiley: Mais m**** toujours pas bon !

Alors que je commençais à désespérer j'ai tenté de changer le baud du GPS je l'ai passé a 38400. U-center me détecté toujours rien.

Donc j'ai retesté sur l'arduino avec un baud 38400 et là miracle la petite LED du GPS à commencer à battre :smiley: et les données sont arrivés dans le moniteur série :slight_smile:

Faut jamais désespérer...

Bonjour,

J'ai la même puce Ublox NEO-6M-0-001 (sur un Shield GPS) et j'utilise les biblios TinyGPS sans problème. Les étoiles remplacent les données pas encore arrivées. Si vraiment rien n'arrive du GPS au bout de 5 secondes, le message d'erreur apparait sur le moniteur.
Tu peux voir mon code complet ici : [Non réglé] Interférences GPS et Servo - Français - Arduino Forum

lesept:
Faut jamais désespérer...

Yep, jamais on est d'accord :slight_smile:

malevthi:
Bonjour,

J'ai la même puce Ublox NEO-6M-0-001 (sur un Shield GPS)et j'utilise les biblios TinyGPS sans problème. Les étoiles remplacent les données pas encore arrivées. Si vraiment rien n'arrive du GPS au bout de 5 secondes, le message d'erreur apparait sur le moniteur.
Tu peux voir mon code complet ici : [Non réglé] Interférences GPS et Servo - Français - Arduino Forum

oui les Libs fonctionnent sans souci c'est juste que le GPS était mal configuré, après un petit réglage et un test, pouf ça fonctionne :slight_smile:
Je vais pouvoir continuer mon petit projet vu que c'était juste le GPS qui me posait souci : GPS + Shield GSM