Comments: GPS Logger Shield Hookup Guide


Looking for answers to technical questions?

We welcome your comments and suggestions below. However, if you are looking for solutions to technical questions please see our Technical Assistance page.

  • -------------------- Tech Support Tips/Troubleshooting/Common Issues --------------------

    Power for the GPS Receiver

    By default, there is no solder jumper between the 3V3 and Batt jumper pads. If you are not using a coin cell battery and you are just running off the Arduino's 3.3V voltage regulator, you need to make sure that there is a solder jumper as stated in the Hardware Setup:Pre-Flight Checklist - Battery (VBAT) Power Supply [ ].

    Software Serial and SPI on the Arduino Mega 2560

    Not all the pins for the Arduino Mega 2560 are in the same location as the Arduino Uno. The software serial [ ] and SPI [ ] are in different pin locations for the Arduino Mega 2560. You will need to reroute pins and redefine the pin definitions in order to use any of the examples.

    A quick, temporary fix for the software serial pins is to bend the software serial header pins out of place and reroute them using jumper wires similar to this tutorial => [ ]. You do not need to modify the core Arduino library as explained in the NKC Electronics tutorial.

    Try to change these lines where it says:

    #define ARDUINO_GPS_RX 9 // GPS TX, Arduino RX pin
    #define ARDUINO_GPS_TX 8 // GPS RX, Arduino TX pin

    to these software serial pins:

    #define ARDUINO_GPS_RX A9 // GPS TX, Arduino RX pin
    #define ARDUINO_GPS_TX A8 // GPS RX, Arduino TX pin

    For the SPI pins, there are traces that you can cut on the back of the GPS Logger Shield [ ] so that you do not have to bend the shield's SPI pins out of place. You can then solder a female header pin to the GPS Logger Shield's 2x3 ICSP pins to the Arduino Mega's ICSP. Otherwise, you would need to bend the pins out of place and use jumper wires like the software serial pins.

    I recommend rerouting the software serial pins to a different location so that the SPI and software serial pins are not conflicting if you are trying to follow the µSD Card GPS Logging example [ ]. There was one case where the MISO (pin 50) and MOSI (pin 51) pins were conflicting with a customer's software serial defined pins on pins 50 and 51. This caused the Arduino Mega 2560 to not receive data from the GPS receiver through software serial due to the Arduino writing data to the microSD card via SPI. Since the Arduino is not receiving data, it believes that it is not seeing any satellites.

    Redefine CS on the Arduino Mega 2560

    If you rerouted the SPI CS pin to pin 53 on the Arduino Mega, make sure that you also redefine the CS pin too where it says:

    #define ARDUINO_USD_CS 10 // uSD card CS pin (pin 10 on SparkFun GPS Logger Shield)


    #define ARDUINO_USD_CS 53 // uSD card CS pin (pin 53 on SparkFun GPS Logger Shield)

    Low Power Standby Mode

    A customer was able to place the GPS into Low Power Standby Mode to conserve power. Try looking below for more information:

    Standby Mode: In this Mode the receiver stops navigation and internal processor enters standby state current drain at main supply VDD is reduced to 200 μA typ. Standby Mode is entered by sending NMEA command: $PMTK161,0*28. Host can wake up the module from Standby Mode to full Power Mode by sending any byte via host port.

    A tech support representative tested this mode out to verify that it works. The shield only draws about 7mA after the command is issued.

  • tzikis / about 8 years ago / 2

    awesome guide! I can't wait to try it out

  • Member #501652 / about 3 years ago / 1

    Hello I want to know if it is possible to obtain GPZDA from this GPS, what I want is to be able to read the time zones, please tell me if this product can do it or what other GPS I can use.

  • Member #346034 / about 6 years ago / 1

    I've set up a GPC Logger Shield with an Arduino Uno (incl. the cell battery) and I just can't get any results. I've tried the Basic_Passthrough_Software.ino sketch (and also other ones), the GPS Port is not sending anything back. There is also one thing bothering me: there is just the PWR-light turned on on the Logger Shield, all other ones are dark. What am I doing wrong?

  • Member #1265945 / about 6 years ago / 1

    Hello , I have a problem I can not connect the ports of my arduino to GPS when I open my monitor seriaI have 0, I copy a program above A have a sparkfun logger shield and a arduino UNO Thanks for the help and sorry for my spelling I'm french


    include <TinyGPS++.h> // Include the TinyGPS++ library

    define GPS_BAUD 9600 // GPS module baud rate. GP3906 defaults to 9600.

    // If you're using an Arduino Uno, RedBoard, or any board that uses the // 0/1 UART for programming/Serial monitor-ing, use SoftwareSerial:

    include <SoftwareSerial.h>

    define ARDUINO_GPS_RX 9 // GPS TX, Arduino RX pin

    define ARDUINO_GPS_TX 8 // GPS RX, Arduino TX pin

    SoftwareSerial Serial1(1,0); // Create a SoftwareSerial

    // Set gpsPort to either ssGPS if using SoftwareSerial or Serial1 if using an // Arduino with a dedicated hardware serial port

    define gpsPort Serial // Alternatively, use Serial1 on the Leonardo

    // Define the serial monitor port. On the Uno, and Leonardo this is 'Serial' // on other boards this may be 'SerialUSB'

    define SerialMonitor Serial

    void setup() { SerialMonitor.begin(9600); gpsPort.begin(GPS_BAUD); }

    void loop() { // print position, altitude, speed, time/date, and satellites: printGPSInfo();

    // "Smart delay" looks for GPS data while the Arduino's not doing anything else smartDelay(1000); }

    void printGPSInfo() { // Print latitude, longitude, altitude in feet, course, speed, date, time, // and the number of visible satellites. SerialMonitor.print("Lat: "); SerialMonitor.println(, 6); SerialMonitor.print("Long: "); SerialMonitor.println(tinyGPS.location.lng(), 6); SerialMonitor.print("Alt: "); SerialMonitor.println(tinyGPS.altitude.feet()); SerialMonitor.print("Course: "); SerialMonitor.println(tinyGPS.course.deg()); SerialMonitor.print("Speed: "); SerialMonitor.println(tinyGPS.speed.mph()); SerialMonitor.print("Date: "); printDate(); SerialMonitor.print("Time: "); printTime(); SerialMonitor.print("Sats: "); SerialMonitor.println(tinyGPS.satellites.value()); SerialMonitor.println(); }

    // This custom version of delay() ensures that the tinyGPS object // is being "fed". From the TinyGPS++ examples. static void smartDelay(unsigned long ms) { unsigned long start = millis(); do { // If data has come in from the GPS module while (gpsPort.available()) tinyGPS.encode(; // Send it to the encode function // tinyGPS.encode(char) continues to "load" the tinGPS object with new // data coming in from the GPS module. As full NMEA strings begin to come in // the tinyGPS library will be able to start parsing them for pertinent info } while (millis() - start < ms); }

    // printDate() formats the date into dd/mm/yy. void printDate() { SerialMonitor.print(; SerialMonitor.print("/"); SerialMonitor.print(; SerialMonitor.print("/"); SerialMonitor.println(; }

    // printTime() formats the time into "hh:mm:ss", and prints leading 0's // where they're called for. void printTime() { SerialMonitor.print(tinyGPS.time.hour()); SerialMonitor.print(":"); if (tinyGPS.time.minute() < 10) SerialMonitor.print('0'); SerialMonitor.print(tinyGPS.time.minute()); SerialMonitor.print(":"); if (tinyGPS.time.second() < 10) SerialMonitor.print('0'); SerialMonitor.println(tinyGPS.time.second()); }

If you've found an issue with this tutorial content, please send us your feedback!