GNSS Receiver Breakout - MAX-M10S (Qwiic) Hookup Guide

Contributors: bboyho
Favorited Favorite 1


The SparkFun u-blox MAX-M10S breakout is an ultra-low-power, high performance, miniaturized GNSS board that is perfect for battery operated applications that don't possess a lot of space, such as asset trackers and wearable devices. In this tutorial, we will quickly get you set up using the Qwiic ecosystem and Arduino so that you can start reading the output!

SparkFun GNSS Receiver Breakout - MAX-M10S (Qwiic)

SparkFun GNSS Receiver Breakout - MAX-M10S (Qwiic)


Required Materials

To follow along with this tutorial, you will need the following materials. You may not need everything though depending on what you have. Add it to your cart, read through the guide, and adjust the cart as necessary.

SparkFun GNSS Receiver Breakout - MAX-M10S (Qwiic)

SparkFun GNSS Receiver Breakout - MAX-M10S (Qwiic)

GPS/GNSS Magnetic Mount Antenna - 3m (SMA)

GPS/GNSS Magnetic Mount Antenna - 3m (SMA)

Qwiic Cable - 50mm

Qwiic Cable - 50mm

SparkFun RedBoard Plus

SparkFun RedBoard Plus

Reversible USB A to C Cable - 2m

Reversible USB A to C Cable - 2m


Additional GPS Antenna Options

Below are some other GPS antenna options.

GPS Embedded Antenna SMA

GPS Embedded Antenna SMA

GPS/GNSS Embedded Antenna - 1m (SMA)

GPS/GNSS Embedded Antenna - 1m (SMA)


Suggested Reading

If you aren't familiar with the Qwiic system, we recommend reading here for an overview.

Qwiic Connect System
Qwiic Connect System

If you aren’t familiar with the following concepts, we also recommend checking out a few of these tutorials before continuing.

GPS Basics

The Global Positioning System (GPS) is an engineering marvel that we all have access to for a relatively low cost and no subscription fee. With the correct hardware and minimal effort, you can determine your position and time almost anywhere on the globe.


An introduction to I2C, one of the main embedded communications protocols in use today.

Serial Basic Hookup Guide

Get connected quickly with this Serial to USB adapter.

RedBoard Plus Hookup Guide

This tutorial covers the basic functionality of the RedBoard Plus. This tutorial also covers how to get started blinking an LED and using the Qwiic system.

Hardware Overview

We've broken out the u-blox MAX-M10S module to a breakout. This section highlights the relevant features of the board. For more information about the IC, check out the Resources and Going Further.

Top View of GNSS Receiver Breakout


Power for this board should be 3.3V. There is a 3.3V pin on the PTH header along the side of the board, but you can also provide power through the Qwiic connector.

Top View of Power Nets Bottom View of Power Nets
Top View Bottom View

Communication Ports

Back of Board I2C and UART Ports, but no SPI

Qwiic and I2C (a.k.a. DDC)

There are two PTHs labeled SDA and SCL which indicates the I2C data lines. Similarly, you can just use the Qwiic connector to provide power and connect to the I2C pins. The Qwiic ecosystem is made for fast prototyping by removing the need for soldering. All you need to do is plug a Qwiic cable into the Qwiic connector and voila!

Top View of I2C Bottom View of I2C
Top View Bottom View


For users that prefer to communicate over UART, we made sure to configure the UART pin grouping to an industry standard to ensure that it easily connects to a Serial Basic. Extra UART pins are also broken out on another edge of the board as well. The port is set to 38400 baud as the default.

Top View of UART Bottom View of UART
Top View Bottom View

Control Pins

These pins are used for various extra control of the MAX-M10S. The control pins are highlighted below.

Top View of Control Pins Bottom View of Control Pins
Top View Bottom View
  • PPS: Pulse-per-second output pin. Begins blinking at 1Hz when module gets basic GPS/GNSS position lock.
  • RST: Reset input pin. Pull this line low to reset the module.
  • SAFE: Safeboot input pin. This is required for firmware updates to the module and generally should not be used or connected. To save on space, the silkscreen is labeled on the bottom of the board.
  • EINT: Interrupt input/output pin. Can be configured using U-Center to bring the module out of deep sleep or to output an interrupt for various module states.

SMA Connector for Antenna

The board is populated with an SMA connector for a secure connection to a patch antenna.

SMA Antenna


The board includes two status LEDs as indicated in the image below.


  • PPS: The pulse per second LED will illuminate each second once a position lock has been achieved.
  • PWR: The power LED will illuminate when 3.3V is provided either over the Qwiic bus or any of the 3.3V PTH pins.


There are four jumpers on the back of the board. For more information, check out our tutorial on working with jumper pads and PCB traces should you decide to cut the traces with a hobby knife.


  • PWR: This is connected to the PWR LED on the top of the board. Cutting this disables the LED.
  • MEAS: Short for current measurement. By default, the MEAs is closed. Cutting the jumper and soldering to the PTH pads will allows you to insert a current meter and precisely monitor the how much current your application is consuming.
  • PPS: This is connected to the PPS LED on the top of the board. Cutting this disables the LED.
  • I2C: The I2C jumpers are open by default. By adding solder to the jumpers, it will connect to the 2.2kΩ pull-up resistors for the I2C bus. Most of the time you can leave these alone unless your project requires you to connect the pull-up resistors.

Backup Battery

The MS621FE rechargeable battery maintains the battery backed RAM (BBR) on the GNSS module. This allows for much faster position locks (a.k.a. hot start). The BBR is also used for module configuration retention. The battery is automatically trickle charged when power is applied and should maintain settings and GNSS orbit data for up to two weeks without power.

Backup Battery

Board Dimensions

The overall length and width with the antenna connector is about 1.74" x 1.20". There are four mounting holes by each corner of the board.

Board Dimensions

Hardware Assembly

At a minimum, you will need to attach an external antenna to the MAX-M10S, supply 3.3V power, and connect to one of the board's peripherals.

Attaching an External Antenna

Plug in one of our patch antennas with SMA connector to the GPS board. Secure the connection using the hex nut until it is finger-tight.

Finger Tightening the SMA GPS Antenna to the MAX-M10S


One method to communicate with the MAX-M10S is through I2C. The Qwiic connect system makes it quick and easy to connect the board to your system using a polarized cable. For embedded projects, you can use a Qwiic-enabled Arduino development board like the RedBoard Plus and its associated USB cable. Then plug a Qwiic cable between the RedBoard Plus and the SparkFun MAX-M10S.

RedBoard Plus Connected to the MAX-M10S via Qwiic Cable

If you're going to be soldering to the through hole pins for I2C functionality, then just attach the following lines between your chosen microcontroller's I2C and the MAX-M10S:

  • SDA to SDA
  • SCL to SCL
  • 3.3V to 3.3V
  • GND to GND


A second method to communicate with the MAX-M10S is through its serial UART. You can directly connect the GPS to the computer by connecting a USB-to-serial converter to the industry standard serial connection (aka the 'FTDI' pinout). In this case, we used an CH340 but you can use another USB-to-serial converter like an FTDI. Just make sure to match the silkscreen (GRN to GRN and BLK to BLK). For a secure connection, you'll need to solder male header pins or wires to the MAX-M10S.

USB-to-Serial Converter to MAX-M10S

You could also connect the pins to a microcontroller like the RedBoard Plus as long as the switch for the logic levels are flipped to the 3.3V side before powering the board up. You'll need to do a little bit more work as opposed to using Qwiic connect system. You'll need to attach the following lines between your chosen microcontroller's UART and the MAX-M10S:

  • Tx to Rx
  • Rx to Tx
  • 3.3V to 3.3V
  • GND to GND

Software Setup and Programming

Note: This example assumes you are using the latest version of the Arduino IDE on your desktop. If this is your first time using Arduino, please review our tutorial on installing the Arduino IDE. If you have not previously installed an Arduino library, please check out our installation guide.

If you've never connected an FTDI or CH340 to your computer before, you may need to install drivers for the USB-to-serial converter. Check out our How to Install FTDI Drivers or How to Install CH340 Drivers tutorial for help with the installation.
Note: We support two versions of the SparkFun u-blox GNSS library. Version 2 and Version 3. Version 3 uses the u-blox Configuration Interface (VALSET and VALGET) to configure the module, instead of the deprecated UBX-CFG messages. For modules like the F9 and M10, we recommend upgrading to Version 3. However, older modules like the M8 do not support the Configuration Interface. For those you will need to keep using Version 2 of the library. We will continue to support both.

The SparkFun u-blox Arduino library can be downloaded with the Arduino library manager by searching 'SparkFun u-blox GNSS v3' or you can grab the zip here from the GitHub repository to manually install.

There are several example sketches provided that utilize the I2C bus to get you up and receiving messages from space. We'll go over one of the examples in this tutorial.

Example Code

We're just going to look at Basics Example Two (i.e. "Example2_NMEAParsing.ino") which in my opinion, makes it clear the awesomeness of these GPS receivers. That is to say, talking to satellites and finding out where in the world you are.

#include <Wire.h> //Needed for I2C to GPS

#include "SparkFun_u-blox_GNSS_v3.h" //Click here to get the library: http://librarymanager/All#SparkFun_u-blox_GNSS_v3

void setup()
  Serial.println("SparkFun u-blox Example");


  if (myGNSS.begin() == false)
    Serial.println(F("u-blox GNSS module not detected at default I2C address. Please check wiring. Freezing."));
    while (1);

  //This will pipe all NMEA sentences to the serial port so we can see them

void loop()
  myGNSS.checkUblox(); //See if new data is available. Process bytes as they come in.

  delay(250); //Don't pound too hard on the I2C bus

When you upload this code you'll have to wait ~24s to get a lock onto any satellites. After that first lock, the backup battery on the board will provide power to some internal systems that will allow for a hot start the next time you turn on the board. The hot start only lasts four hours, but allows you to get a lock within one second. After you get a lock the serial terminal will start listing longitude and latitude coordinates, as seen below. Make sure to set the serial monitor to 115200 baud.

This image shows a screenshot of the Arduino Serial terminal spitting out latitude and longitude data.

These are the coordinates for SparkFun HQ


Resources and Going Further

Now that you've successfully got your MAX-M10S up and running, it's time to incorporate it into your own project! For more information, check out the resources below:

Or check out other tutorials related to GPS and GNSS:

GPS Logger Shield Hookup Guide

How to assemble and hookup the SparkFun GPS Logger Shield. Never lose track of your Arduino again!

MicroMod Update Tool Hookup Guide

Follow this guide to learn how to use the MicroMod Update Tool to interact directly with the UART on the MicroMod Asset Tracker's SARA-R5. Using this board you can talk directly to the module using u-blox's m-center software as well as update the firmware using EasyFlash.

SparkFun RTK Express Hookup Guide

Learn how to use the enclosed RTK Express product to achieve millimeter level geospatial coordinates.

Getting Started with u-blox Thingstream and PointPerfect

Interested in high precision GNSS without setting up a base station?