The Freetronics GPS Module provides a simple serial interface that can be connected directly to 3.3V and 5V Arduino-compatible boards and other microcontrollers.

Module Connections

From left to right:

3V3: 3.3V output provided by the onboard voltage regulator.

ENA: Enable input. Connects to the active-low RESET pin on the GPS receiver. Leave disconnected for normal use. Pull LOW to hold the receiver in a reset state and disable it.

BAT: Battery input. Allows you to provide an external backup power source. Normally the module uses an onboard CR1632 coin cell, but you can remove the coin cell and use an external battery if you prefer. Nominally 3V, must be between 2V and 4.3Vdc. You can run the GPS without a battery, but it will take longer to achieve a fix after each startup because it will need to download almanac and ephemeris data from the GPS satellites each time.

FIX: Active-low location fix status output. Pulses at 1Hz when no fix has been achieved. Goes constantly LOW when a fix is achieved.

TXD: Transmit data output. Default 9600bps.

RXD: Receive data input. Default 9600bps. Nominally 3.3V, but safe with up to 5V.

GND: Ground connection.

VIN: Power input. 3.5 to 6Vdc, about 20mA.

PPS: 1 Pulse Per Second output. A 1Hz square wave output with 10ns accuracy based on GPS data. Available after a 3D fix has been achieved.

Cold Start Time

When a GPS receiver starts up for the first time and does a full "cold start", it can take a very long time to give a location. Don't be surprised if it takes 15 minutes or more before you get sensible data from it.

This is because the receiver needs to download a list of reference data (called the "almanac") from the GPS satellites before it can get a fix on its own position. The almanac is transmitted repeatedly over a period of approximately 12.5 minutes by all GPS satellites.

Once the almanac has been downloaded and stored in the memory of the GPS receiver, its startup time will be much less: usually only a few seconds. This is called a "warm start". Most of the time, your receiver will do a warm start so it will start giving you data almost immediately.

The coin cell on the receiver module is required to maintain the memory which stores the almanac. If you remove all power from the module and also remove the coin cell, the memory may be lost and the receiver may do a full cold start again, including downloading the almanac. This can also happen if the almanac has become out of date and a new version needs to be downloaded.

Insert Backup Battery

The GPS module includes a coin cell holder, which provides power for the almanac memory. The module will operate just fine without the coin cell, but that will cause it to do a full cold start every time it loses power. That can be frustrating because you then have to wait up to 15 minutes before it will be ready to start giving you location data again.

Insert the provided coin cell into the holder, oriented so that the positive (+) side of the cell matches the mark stamped into the holder.

The coin cell will last for several years in normal use. You can carefully remove the cell and replace it while the GPS is running, provided you do not short circuit the connections! Slide it out carefully using something non-conductive.

Connect Module To Computer

The simplest way to test the module is to use a USB-to-serial converter to connect it to your computer, and use the Arduino IDE as a serial console to receive messages from it.

You can use a dedicated USB-to-serial converter, or you can use an Arduino board as the converter.

For a minimal test you only need three connections:

  • Module GND to the GND pin on your serial converter or Arduino board.
  • Mobule VIN to the 5V pin on your serial converter or Arduino board.
  • Module TX to the RX (receive) pin on your serial converter or Arduino board.

Note that module TX does not connect to serial converter TX. That's because data has to flow out of the TX (transmit) pin on the module and then into the RX (receive) pin on the serial converter. That can be confusing at first because you cross over the TX and RX lines, but it makes sense when you think about it from the point of view of the individual modules.

The connections using a dedicated USB-to-Serial converter look like this:

The connections using an Arduino-compatible board as a converter look like this:

Note: there are two special changes when using an Arduino as a serial converter. Firstly, the TX pin on the module connects to the TX pin on the Arduino. That's because the Arduino pin is labelled from the point of view of the main MCU, but what we're doing is bypassing that and accessing the onboard USB-serial chip. Secondly, the extra connection on the Arduino that connects RESET to GND. This holds the main MCU in a reset state to prevent it running, while leaving the onboard USB-serial converter functioning as usual.

Open Serial Connection

Once you have your module connected to either a dedicated USB-to-Serial converter or an Arduino, you can configure the software:

1. Launch the Arduino IDE.

2. Select "Tools -> Port" and select the serial port for your USB connection.

3. Click the "Serial Console" icon in the top right corner of the sketch window. The serial console will open.

4. Set the baud rate to 9600 using the drop-down in the bottom right of the window.

You should now see a stream of data appearing in the serial console, as the GPS module reports values back to your computer.

Getting A Fix

When the GPS Module starts up for the very first time (or if it has been turned off for a long time) it will take a while to achieve a "fix" or position lock. This is because it has to receive a certain amount of data from the GPS satellites before it can determine its own location.

The module also needs a good signal, so make sure it has a clear view of the sky by placing it in a window or outside if it never seems to achieve a fix.

Understanding GPS Messages

The GPS Module sends messages in a format called "NMEA sentences". A sentence is a series of values representing different data reported by the GPS receiver.

Each sentence is prepended with a label that signifies the particular format of that sentence. By default, the GPS module transmits a series of sentences containing different data. Your software can listen for the sentences it cares about and ignore the rest, or you can configure the module to only send specific sentences.

There is a great tutorial on reading the NMEA sentences produced by this module at www.toptechboy.com/arduino/lesson-24-understanding-gps-nmea-sentences/.

Two-Way Communication

So far we've only received messages from the module. You can also send commands to the module, for example to reconfigure the NMEA sentences that it reports.

In addition to the three basic connections shown above, you will also need to connect the GPS module's "RX" pin to the "TX" pin on your USB-to-Serial Converter. If you're using an Arduino as a USB to serial converter, you'll need to connect to its RX pin instead.

Commands you send using the Serial Terminal in the Arduino IDE will now be sent to the GPS module.

Connection To Arduino

You don't need a computer to interact with the module. Your Arduino can communicate with it directly, processing the GPS data for whatever purposes you like.

Open the Arduino IDE, and select "Sketch -> Include Library -> Manage Libraries...".

Type "GPS" into the search box to reveal several libraries that are compatible with the Freetronics GPS Module, including the Adafruit GPS Library and the MicroNMEA Library. Install one of these libraries, and follow the examples included with them.

Additional Information

The full datasheet for the GPS chipset is available as a PDF: GlobalTop PA6 Datasheet