0

I'm trying to get Neo-6M module to work with Arduino Uno, but it just isn't transmitting any data. It is getting 3.3V.
I've tried measuring the Amps and I got zero, so I'm afraid that the module could be broken.

Neo-6M wiring:
gps module wiring
Arduino wiring (power):
arduino power wiring
Arduino wiring (data):
arduino data wiring

Arduino code:

#include <TinyGPS++.h>
#include <SoftwareSerial.h>
/*
   This sample sketch demonstrates the normal use of a TinyGPS++ (TinyGPSPlus) 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).
*/
static const int RXPin = 4, TXPin = 3;
static const uint32_t GPSBaud = 9600;

// The TinyGPS++ object
TinyGPSPlus gps;

// The serial connection to the GPS device
SoftwareSerial ss(RXPin, TXPin);

void setup()
{
  Serial.begin(9600);
  ss.begin(GPSBaud);

  Serial.println(F("DeviceExample.ino"));
  Serial.println(F("A simple demonstration of TinyGPS++ with an attached GPS module"));
  Serial.print(F("Testing TinyGPS++ library v. "));     Serial.println(TinyGPSPlus::libraryVersion());
  Serial.println(F("by Mikal Hart"));
  Serial.println();
}

void loop()
{
  // This sketch displays information every time a new sentence is correctly encoded.
  while (ss.available() > 0)
    if (gps.encode(ss.read()))
      displayInfo();

  if (millis() > 5000 && gps.charsProcessed() < 10)
  {
    Serial.println(F("No GPS detected: check wiring."));
    while(true);
  }
}

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();
}
  • I have tried several Ardiuno GPS sample data and could not get any data, but I just used this 10lines software, and got data. – user50549 Oct 22 '18 at 14:40
0

I run my board from the 5v Arduino tap as it has a 3.3v low drop off voltage regulator on board. So my belief is that you should also tap off the Arduino boards 5v supply.

Neo-6 Arduino board components

Mine draws about 60ma from the Arduino board. The device should get a fix, then start transmitting over the tx line. Indicated by the 'Position Fixed' led indicator on board, flashing once a second (at 9600 baud.)

Good luck, keep in mind that these boards are only about $7.50 on Amazon, order a couple for peace of mind. :)

| improve this answer | |
2

It isn't enough to power the module with 3.3V. You also have to level-shift the Arduino's 5V TX signal to 3.3V that is acceptable by the GPS module's RX pin, using a 1:2 voltage divider.

Converter

You should also know that the Arduino's 3.3 V pin can't source more than 50 mA; your module's current draw may sometimes exceed this limit (max is 67 mA). Instead, connect the Arduino's 5 V pin (which can source up to 500 mA) to the VCC of the GPS module through an LM1117T 3.3 V regulator:

Regulator

The input goes the Arduino 5V pin and the output goes to the NEO-6M VCC. Connect all GNDs together.

Then run a basic sketch like this:

#include "SoftwareSerial.h"

SoftwareSerial gps(4,3);

void setup(){
  Serial.begin(9600);
  gps.begin(9600);
}

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

This will basically make the Arduino grab any NMEA data sent by the NEO-6M and forward it to your PC's serial monitor. If you receive legible data, it means you've established comms with the module. You can then upload your original sketch.

| improve this answer | |
  • Acording to all those tutorials out there on this module it IS enough to use 3.3V from Arduino. The problem is it isn't drawing any current from the Arduino. And I don't need to transmit any data to the module. – freemanovec Aug 5 '16 at 9:54
  • @freemanovec It doesnt matter if you need to transmit; as long as you connected the module RX to the Arduino TX, the IDLE voltage of the line is 5V going into the module. You can simply disconnect the wire since you feel you dont need it. Also, unless you've studied the library code, you don't know how it performs its task; perhaps it is transmitting data even if its only to initialize the module. – SoreDakeNoKoto Aug 6 '16 at 1:29
  • The factory default for a ublox module is to output NMEA at 1Hz, you should get something even with no GPS signal. Assuming no one has changed the defaults on the module. If you have some way to connect the module to a PC (e.g. TTL-232RG-VREG3V3-WE ) then trying to connect with the ublox U-Center software is a good idea, that makes it easy to change the power up default behavior. – Andrew Oct 4 '16 at 8:21

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.