UBLOX Neo-6M GPS Module not working / not powering on

Hi all,

I'm using the Neo 6M GPS module, and for some reason it does not power on when I plug it into either 3.3V or 5V on the Arduino Nano.

I tried to upload the example sketch from the library as well, there is still not light. Is there any way to tell if its powering on but not fixing onto a satellite?

This is the schematic I'm using:

VCC - 3.3 / 5V
GND - GND
RX - A3
TX - A4

make up your mind where is RX connected ? :slight_smile:

there are tons of Neo 6M GPS modules. which one do you have?
which code and library did you use?

do yourself a favour and please read How to get the best out of this forum to understand what's useful info to provide when you raise a question

changed it, my bad had put RX both places.

this is the unit I bought^, and the library is the TinyGPS++ library, the sample code is here:

#include <TinyGPS++.h>
/* 
   This sample sketch should be the first you try out when you are testing a TinyGPS++
   (TinyGPSPlus) installation.  In normal use, you feed TinyGPS++ objects characters from
   a serial NMEA GPS device, but this example uses static strings for simplicity.
*/

// A sample NMEA stream.
const char *gpsStream =
  "$GPRMC,045103.000,A,3014.1984,N,09749.2872,W,0.67,161.46,030913,,,A*7C\r\n"
  "$GPGGA,045104.000,3014.1985,N,09749.2873,W,1,09,1.2,211.6,M,-22.5,M,,0000*62\r\n"
  "$GPRMC,045200.000,A,3014.3820,N,09748.9514,W,36.88,65.02,030913,,,A*77\r\n"
  "$GPGGA,045201.000,3014.3864,N,09748.9411,W,1,10,1.2,200.8,M,-22.5,M,,0000*6C\r\n"
  "$GPRMC,045251.000,A,3014.4275,N,09749.0626,W,0.51,217.94,030913,,,A*7D\r\n"
  "$GPGGA,045252.000,3014.4273,N,09749.0628,W,1,09,1.3,206.9,M,-22.5,M,,0000*6F\r\n";

// The TinyGPS++ object
TinyGPSPlus gps;

void setup()
{
  Serial.begin(115200);

  Serial.println(F("BasicExample.ino"));
  Serial.println(F("Basic demonstration of TinyGPS++ (no device needed)"));
  Serial.print(F("Testing TinyGPS++ library v. ")); Serial.println(TinyGPSPlus::libraryVersion());
  Serial.println(F("by Mikal Hart"));
  Serial.println();

  while (*gpsStream)
    if (gps.encode(*gpsStream++))
      displayInfo();

  Serial.println();
  Serial.println(F("Done."));
}

void loop()
{
}

void displayInfo()
{
  Serial.print(F("Location: ")); 
  if (gps.location.isValid())
  {
    Serial.print(gps.location.lat(), 6);
    Serial.print(F(","));
    Serial.print(gps.location.lng(), 6);
  }
  else
  {
    Serial.print(F("INVALID"));
  }

  Serial.print(F("  Date/Time: "));
  if (gps.date.isValid())
  {
    Serial.print(gps.date.month());
    Serial.print(F("/"));
    Serial.print(gps.date.day());
    Serial.print(F("/"));
    Serial.print(gps.date.year());
  }
  else
  {
    Serial.print(F("INVALID"));
  }

  Serial.print(F(" "));
  if (gps.time.isValid())
  {
    if (gps.time.hour() < 10) Serial.print(F("0"));
    Serial.print(gps.time.hour());
    Serial.print(F(":"));
    if (gps.time.minute() < 10) Serial.print(F("0"));
    Serial.print(gps.time.minute());
    Serial.print(F(":"));
    if (gps.time.second() < 10) Serial.print(F("0"));
    Serial.print(gps.time.second());
    Serial.print(F("."));
    if (gps.time.centisecond() < 10) Serial.print(F("0"));
    Serial.print(gps.time.centisecond());
  }
  else
  {
    Serial.print(F("INVALID"));
  }

  Serial.println();
}

The 'sample code' does not read a GPS.

test with this example

change in the code those 2 lines

static const int RXPin = 4, TXPin = 3;
static const uint32_t GPSBaud = 4800;

to match your setup so

static const int RXPin = A4, TXPin = A3;
static const uint32_t GPSBaud = 9600; // this is the default

Just made that change and checked the serial monitor. This is what it shows me:

20:47:52.194 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:52.194 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:53.044 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:53.077 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:53.115 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:53.150 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:53.188 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:53.188 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:54.037 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:54.075 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:54.113 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:54.147 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:54.181 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:54.181 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:55.040 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:55.073 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:55.110 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:55.182 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:55.182 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:55.182 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:56.059 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:56.093 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:56.127 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:56.162 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:56.201 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:56.201 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:57.048 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:57.081 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:57.119 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:57.152 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:57.190 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:57.190 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:58.061 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:58.096 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:58.130 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:58.165 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:58.165 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:58.203 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:59.044 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:59.077 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:59.115 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:59.149 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:59.182 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:47:59.182 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:00.054 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:00.092 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:00.125 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:00.163 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:00.201 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:00.201 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:01.068 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:01.102 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:01.136 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:01.174 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:01.174 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:01.174 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:02.072 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:02.072 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:02.110 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:02.144 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:02.182 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:02.182 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:03.045 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:03.080 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:03.118 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:03.152 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:03.189 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:03.189 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:04.045 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:04.083 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:04.121 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:04.155 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:04.193 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:04.193 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:05.045 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:05.081 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:05.119 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:05.153 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:05.191 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:05.191 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:06.042 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:06.075 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:06.109 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:06.147 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:06.185 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:06.185 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:07.060 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:07.097 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:07.132 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:07.170 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:07.170 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:07.170 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:08.046 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:08.083 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:08.116 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:08.154 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:08.193 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:08.193 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:09.071 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:09.071 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:09.109 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:09.175 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:09.175 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:09.213 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
20:48:10.070 -> Location: INVALID  Date/Time: 0/0/2000 00:00:00.00

Does this mean the antenna is bad? or is the entire unit bad?

regards,
Taran

Try this program, it copies the GPS output to the serial monitor, assuming the RX pin is correct;

#define RXpin A3             //this is the pin that the Arduino will use to receive data from the GPS
#define TXpin A4              //this is the pin that the Arduino can use to send data (commands) to the GPS - not used


#include <SoftwareSerial.h>
SoftwareSerial GPS(RXpin, TXpin);

void loop()
{
  while (GPS.available())
  {
    Serial.write(GPS.read());
  }
}

void setup()
{
  GPS.begin(9600);
  Serial.begin(115200);
  Serial.println("GPS_Echo Starting");
}

And if the GPS is working correctly, with a working antenna, is outside and has a good view of the sky, it should get a fix in 60 seconds or less, regardless of the state of the battery.

make sure the antenna is solidly attached and pointing at the sky
wait for 30 minutes to 1h, sometimes the on-board battery is dead

as in I should keep the module powered on for 30 mins to an hour?

No need, the GPS should work well enough without the battery. Lots of GPS dont have batteries, and the work just fine.

When I uploaded your code it only showed me "GPS Starting".

What other modules dont have a battery? So that I don't have to wait for the battery to charge up.

I guess I'll keep it powered on for an hour or so and then see what happens.

That has NOT been my experience with those.

I've a few modules that require some time before they start working and getting a fix and it's not just the time to acquire the first fix.

So YES I would say let the module be powered and plugged in for a while.

Ok, I'll keep it plugged in for an hour or so.

Is there an LED to indicate that it is powered on or will I have to check with a multimeter?

I don't think so but I don't have the module at hand to check

You don't need to connect Rx for the module t work (I think it's only 3.3V compatible)

You might want to grab srnet's more simple code that echoes what the GPS is sending to the serial monitor.

Also, don't forget that your module won't work well (or perhaps at all) indoors.

Did you try swapping the RX and TX pins ?

I have seen that lots of times too.

And in every case you can see the output of the GPS reporting signal strengths at or close to the -26dB threshold.

after a while not touching them they work... and if you disconnect and reconnect they get a fix instantly. So that's why I'm tempted to incriminate the battery

will I have to keep it plugged in outdoors? or indoors to charge the battery and then take it outdoors will work?

How can I remove the battery to get rid of this "lag" of sorts and get an instant sat fix?

I have kept them powered for some time under a roof top window and then they were fine. if they don't "see" the sky, you won't get a fix.

I think there is a battery backed RAM (BBR). The battery helps retain clock data, latest position data (GNSS orbit data), module configuration in RAM. This allows much faster position locks. Without the battery the GPS always cold-start and needs to acquire information from the satellites, so the initial GPS lock takes more time.

I think the battery has enough power for a couple weeks only so if you use your module only from time to time, you'll have to cold start and this takes time.