Interfacing GOKU GM10 Nano V3 GNSS Module with Arduino

Learn how to interface the FlyWoo GOKU GM10 Nano V3 multi-GNSS module with Arduino. The module is based on the u-Blox M10050 10th gen GNSS chip.
Interfacing GOKU GM10 Nano V3 GNSS Module with Arduino Featured Image CIRCUITSTATE Electronics

GPS/GNSS is not new to you. We have published a detailed tutorial on GPS/GNSS before and also have our own CSE_GNSS Arduino library that supports a wide range of GNSS modules with NMEA standard output. In this tutorial, we are going to see a small GNSS module called GOKU GM10 Nano V3 from FlyWoo. This small form-factor GNSS module is tailor designed for the FPV drone market. But it can be used for any other general purpose applications. The module is based on the UBX-M10050-KB multi-GNSS professional grade chip from u-blox. So you get the accuracy and reliability of u-blox products in a small size.

If you are new to GPS/GNSS modules, you can check out our NEO-6M GPS tutorial. The tutorial explains everything you need to know to start using GPS or other GNSS modules in your projects.

What is GPS/GNSS and How to Interface uBlox NEO-6M GPS Module with Arduino CIRCUITSTATE Electronics Feature Image

What is GPS/GNSS & How to Interface u-blox NEO-6M GPS Module with Arduino

Learn how GPS and other GNSS work, and interface the u-blox NEO-6M GY-NEO6MV2 module with Arduino boards using CSE_GNSS library and sample codes.

GOKU GM10 Nano V3

The GOKU GM10 Nano V3 is a small form-factor multi-GNSS module from FlyWoo. It is mainly aimed at the FPV drone market where size and performance are very important. You can buy this for around INR 2K from places like DRK Store. Following are the specifications of the module.

Specifications

  • Chipset: M10050 (Tenth Generation Chip)
  • Receiving Format: GPS, GLONASS, Galileo, BeiDou, QZSS and SBAS
  • Default Protocol: GPS, Galileo, BeiDou
  • Frequency: GPS L1, GLONASS L1, BeiDou B1, SBAS L1, Galileo E1
  • Channels: 72 Searching Channel
  • Sensitivity:
    • Tracking: -162dBm
    • Reacquisition: -160dBm
  • Data and Update Rate
    • Support Rate: 4800~921600 bps, Default 115200 bps
    • Data Level: TTL or RS-232, Default TTL level
    • Data Protocol: BF4.3.X(UBLOX) / BF4.2.X(NMEA)
    • Output frequency: 1~10 Hz, Default 10Hz
  • Operational Limits
    • Altitude: 50,000 m Max
    • Velocity: 500 m/s Max
    • Acceleration: Less than 4g
  • Power Consumption
    • Supply Voltage: 3.3~5V
    • Operating Temperature: -40 °C ~ +85°C
    • Storage Temperature: -40°C ~ +105°C
  • Indicators
    • PPS LED: Yellow. PPS LED not bright when GPS not fixed, flashing when fixed.
  • Dimensions: 12 x 17 x 5 mm
  • Weight: 2.6 g

The GM10 Nano V3 has a single 6-pin connector that breaks out the UART, I2C and power pins. In addition to the connector, there is a power LED, Lithium cell, and a ceramic patch antenna. The GNSS chip is shielded with a metal case. The compass functionality is provided by the on-board 3-axis magnetometer QMC5883L (marking HA5883).

Pinout

The GNSS module comes with a compatible wire harness with easy to identify wire colors.

GOKU GM10 Nano V3 FlyWoo UBlox M10050 GNSS Module Pinout Wiring CIRCUITSTATE Electronics
GOKU GM10 Nano V3 pin connections

Following is the pinout from FlyWoo which also indicates the compass orientation. Even though it shows a different GNSS module, the pinout is the same.

GOKU GM10 Nano V3 FlyWoo UBlox M10050 GNSS Module Pinout CIRCUITSTATE Electronics
GOKU GM10 Nano V3 pinout and compass orientations

UBX-M10050-KB

uBlox UBX-M10050-KB Multi-GNSS Chip CIRCUITSTATE Electronics

The GOKU GM10 Nano V3 uses the u-Blox UBX-M10050-KB GNSS chipset. It is a professional grade multi-GNSS module with concurrent reception of four L1 GNSS constellations. Following are its features.

FeatureUBX-M10050-KB
GNSSBeiDou, Galileo, GLONASS, GPS / QZSS
Number of concurrent GNSS4
GNSS platformConcurrent GNSS
OscillatorsCrystal supported, TCXO supported
UART
SPI
I2C
Maximum supply1.8 V
Minimum supply1 V
Maximum temperature85 °C
Minimum temperature-40 °C
Antenna supervisor
RTC crystal
Time pulse output
Dimensions4.0 x 4.0 x 0.55 mm

u-center 2 Application

Before we interface the GNSS module with Arduino, we will connect the module to the computer and use the official u-center 2 application to read the data from the module. We have shown you the u-center application before. u-blox has released a new version of the u-center application called u-center 2. You need a u-blox account to use it. You can sign up for free and download it.

uBlox u-Center-2 Application GNSS Opening Window by CIRCUITSTATE Electronics
Opening window

You can connect the GM10 Nano V3 to the PC using an FT232L or similar USB-to-Serial adapters. We used the YELLOW (RX) and WHITE (TX) wires to connect to the serial converter. Just after connecting, you can launch the u-center 2 application and add a new device configuration.

uBlox u-Center-2 Application GNSS Default Window by CIRCUITSTATE Electronics
Default window

Click on the Add device button to connect to a new device. You can choose the COM port and the baud rate. The baud rate can be automatically detected. The default baud rate is 115200.

uBlox u-Center-2 Application GNSS Select Device by CIRCUITSTATE Electronics
Select device

If the device is connected correctly, the app will show “Receiving data” status. This means the communication is working. You can resize and rearrange the data windows according to your display size.

uBlox u-Center-2 Application GNSS Satellite Signal View by CIRCUITSTATE Electronics
Device connected

You can open the Console View to view the actual NMEA messages being received. Here, since I am inside my room and there is no sky visible, there are no satellites in view of the GNSS. Therefore, almost all data are empty.

uBlox u-Center-2 Application GNSS NMEA Data Log by CIRCUITSTATE Electronics
NMEA messages

In addition to the standard NMEA messages, the module also prints the UBX Protocol messages. Since the UBX protocol is not coded in ASCII, they will look like gibberish in ASCII view. But the 8-bit encoding makes the protocol compact and fast. The protocols are well explained in the u-blox Protocol Manual.

If you open the protocol inspector, you can see the decoded data from each line on the right side as shown below.

uBlox u-Center-2 Application GNSS NMEA Data Log Message Inspector by CIRCUITSTATE Electronics
NMEA and UBX messages. Clicking on any of the lines will show the decoded messages in the Message Inspector

Wiring

We are going to use a Mitayi Pico RP2040 microcontroller board to interface the GNSS module. We soldered a pin header to the other end of the wire harness and used a small breadboard to make the connections. You can use almost any other Arduino boards for interfacing. The code will have to be slightly changed.

GNSS ModuleRP2040
V3.3V
GGND
RXGPIO0
TXGPIO1
Wiring list

CSE_GNSS Library

The CSE_GNSS Arduino library from CIRCUITSTATE can be used to read any GPS/GNSS module with the standard NMEA output and decode the messages. While testing the GOKU GM10 Nano V3 module, we realized that there was a limitation to the library. The GM10 Nano V3 module, by default, prints both NMEA and the UBX protocol messages through the serial interface. The CSE_GNSS library was not designed to read such mixed protocol messages. So we improved the library by adding support for extracting NMEA data from any type of data mixing, as long as there are contiguous NMEA messages in the data. Following is the example Arduino code we are using to read and decode the GNRMC NMEA message from the GNSS module.


//======================================================================================//
/**
 * @file View_GNSS_Data.ino
 * @brief Reads the NMEA output from the GNSS module, extract the data and prints them on
 * the serial monitor as key-value pairs.
 * @date +05:30 09:26:31 PM 30-03-2024, Saturday
 * @version 0.1.2
 * @author Vishnu Mohanan (@vishnumaiea)
 * @par GitHub Repository: https://github.com/CIRCUITSTATE/CSE_GNSS
 * @par MIT License
 * 
 */
//======================================================================================//

#include <Arduino.h>
#include <CSE_GNSS.h>

//======================================================================================//

#define   PORT_GPS_SERIAL       Serial1 // GPS serial port
#define   PORT_DEBUG_SERIAL     Serial // Debug serial port


// For RP2040
#define   PIN_GPS_SERIAL_TX      0
#define   PIN_GPS_SERIAL_RX      1

#define   VAL_GPS_BAUDRATE       115200
#define   VAL_DEBUG_BAUDRATE     115200

//======================================================================================//
// Forward declarations

void setup();
void loop();

//======================================================================================//

// Set the serial ports and the baudrate for the GNSS module.
// Both ports have to be manually initialized through begin() call.
CSE_GNSS GNSS_Module (&PORT_GPS_SERIAL, &PORT_DEBUG_SERIAL);

// Following is how we define the format of the GNRMC header (No Second Mode indicator).
String GNRMC_Sample = "$GNRMC,083559.00,A,4717.11437,N,00833.91522,E,0.004,77.52,091202,,,A,V*57"; // A sample reference line
String GNRMC_Data_Names [] = {"Header", "UTC", "Status", "Latitude", "Latitude Direction", "Longitude", "Longitude Direction", "Speed", "Course", "Date", "Mag Variation", "Mag Variation Direction", "Mode", "Navigation Status", "Checksum"}; // The palce keys
String GNRMC_Description = "Recommended Minimum Specific GNSS Data"; // A human readable description of the data.

// Format: Name, Description, Data Count, Data Names, Sample
NMEA_0183_Data NMEA_GNRMC ("GNRMC", GNRMC_Description, 15, GNRMC_Data_Names, GNRMC_Sample); // An object to save and handle the data.

//======================================================================================//
/**
 * @brief Setup the serial ports and pins.
 * 
 */
void setup() {
  PORT_DEBUG_SERIAL.begin (VAL_DEBUG_BAUDRATE);

  // // For ESP32 boards
  // PORT_GPS_SERIAL.begin (VAL_GPS_BAUDRATE, SERIAL_8N1, 17, 16);

  // For RP2040
  PORT_GPS_SERIAL.setTX (PIN_GPS_SERIAL_TX);
  PORT_GPS_SERIAL.setRX (PIN_GPS_SERIAL_RX);
  PORT_GPS_SERIAL.begin (VAL_GPS_BAUDRATE, SERIAL_8N1);

  // // For other boards.
  // PORT_GPS_SERIAL.begin (VAL_GPS_BAUDRATE);
  
  GNSS_Module.begin();
  GNSS_Module.addData (&NMEA_GNRMC); // Add the data object to the GNSS module.

  PORT_DEBUG_SERIAL.println();
  PORT_DEBUG_SERIAL.println ("--- CSE_GNSS Test ---");
  delay (1000);
}

//======================================================================================//
/**
 * @brief Runs indefinitely.
 * 
 */
void loop() {
  GNSS_Module.read (1024);
  GNSS_Module.extractNMEA();
  String GNSS_Data = GNSS_Module.getDataString();

  GNSS_Module.getDataRef ("GNRMC").find (GNSS_Data); // Find the GNRMC sentences in the read data
  GNSS_Module.getDataRef ("GNRMC").print(); // Printed the GNRMC sentences in preformatted format

  delay (500);
}

//======================================================================================//

C++

Since the RP2040 has multiple hardware serial ports, we are using Serial1 to talk to the GNSS module. The default Serial port will be used for debugging messages. Unlike the NEO-6M GY-NEO6MV2 module, the GNRMC sentence here has 15 fields instead of 14. This is because of the presence of the extra Second Mode Indicator. Because the CSE_GNSS library allows us to define the message formats and fields, we can easily change this in the code.

The logic of the code is very simple. In the loop() function, we will read a fixed number of bytes from the GNSS module. Here, we are reading 1024 bytes. You can change this to any other number depending on the RAM available or the number of data lines you want to read at a time. The read data is stored into an internal buffer. The extractNMEA() function then extracts the NMEA data from the buffer. This process removes any invalid characters such as the UBX protocol messages. Next, we can convert the data in the buffer to an Arduino String using getDataString() function. In the next two lines, we will search the line for the GNRMC header, decode the data and save them to the NMEA_GNRMC object.

After flashing the code, you can open the serial monitor and get a similar output like below. You have to be an open space with clear sky. Make sure to direct the patch antenna to the open sky. It can take some time to find multiple satellites and synchronize the time on the module. For us, it took around 5 minutes to get a lock initially. After the initial lock, you will get the position faster from then onward.

CSE_GNSS read(): Read 1024 bytes from GNSS module.
CSE_GNSS extractNMEA(): Extracting NMEA lines.. GNSS data buffer length is 1024
CSE_GNSS extractNMEA(): Removing CR character..
CSE_GNSS extractNMEA(): Extracted 833 characters.
CSE_GNSS extractNMEA(): Removing non-printable characters..
CSE_GNSS extractNMEA(): Found 833 valid characters.
$GAGSV,1,1,00,0*74<LF>
$GBGSV,1,1,03,13,59,004,17,29,68,351,18,32,23,040,21,1*45<LF>
$GQGSV,1,1,01,03,26,096,14,1*59<LF>
$GNGLL,2831.61185,N,07708.03427,E,044503.20,A,A*7A<LF>
$GNRMC,044503.30,A,2831.61186,N,07708.03426,E,0.111,,040824,,,A,V*11<LF>
$GNVTG,,T,,M,0.111,N,0.206,K,A*38<LF>
$GNGGA,044503.30,2831.61186,N,07708.03426,E,1,09,1.23,273.4,M,-40.5,M,,*6B<LF>
$GNGSA,A,3,05,15,23,18,29,13,,,,,,,2.30,1.23,1.94,1*0C<LF>
$GNGSA,A,3,,,,,,,,,,,,,2.30,1.23,1.94,3*0E<LF>
$GNGSA,A,3,29,32,,,,,,,,,,,2.30,1.23,1.94,4*03<LF>
$GNGSA,A,3,03,,,,,,,,,,,,2.30,1.23,1.94,5*0B<LF>
$GPGSV,3,1,10,05,30,040,23,10,08,238,18,13,36,071,20,15,62,112,25,1*6B<LF>
$GPGSV,3,2,10,16,02,320,14,18,45,325,25,20,06,054,14,23,39,252,26,1*64<LF>
$GPGSV,3,3,10,25,,,17,29,80,151,25,1*55<LF>
$GPGSV,1,1,03,11,02,093,,12,00,174,,41,56,168,,0*56<LF>
$GAGSV,1,1,00,0*74<LF>
$GBGSV,1,1,03,13,59,004,17,29,68,351,18,32,23,040,2<LF>

NMEA_0183_Data find(): Lines to search = 17
NMEA_0183_Data find(): Found GNRMC line at position 4
NMEA_0183_Data set(): $GNRMC,044503.30,A,2831.61186,N,07708.03426,E,0.111,,040824,,,A,V*11
NMEA_0183_Data check(): $GNRMC,044503.30,A,2831.61186,N,07708.03426,E,0.111,,040824,,,A,V*11
NMEA_0183_Data check(): Valid GNRMC sentence.
NMEA_0183_Data parse(): $GNRMC,044503.30,A,2831.61186,N,07708.03426,E,0.111,,040824,,,A,V*11
NMEA_0183_Data parse(): Completed.
NMEA_0183_Data print(): 
GNRMC: Recommended Minimum Specific GNSS Data
  Header: $GNRMC
  UTC: 044503.30
  Status: A
  Latitude: 2831.61186
  Latitude Direction: N
  Longitude: 07708.03426
  Longitude Direction: E
  Speed: 0.111
  Course: 
  Date: 040824
  Mag Variation: 
  Mag Variation Direction: 
  Mode: A
  Navigation Status: V
  Checksum: 11
  
CSE_GNSS read(): Read 1024 bytes from GNSS module.
CSE_GNSS extractNMEA(): Extracting NMEA lines.. GNSS data buffer length is 1024
CSE_GNSS extractNMEA(): Removing CR character..
CSE_GNSS extractNMEA(): Extracted 828 characters.
CSE_GNSS extractNMEA(): Removing non-printable characters..
CSE_GNSS extractNMEA(): Found 748 valid characters.
$GQGSV,1,1,01,03,26,096,b\lB-7<5--5HhM?\@V/<LF>
<LF>
$GNVTG,316.15,T,,M,0.433,N,0.802,K,A*2D<LF>
$GNGGA,044503.90,2831.61191,N,07708.03420,E,1,09,1.23,273.7,M,-40.5,M,,*62<LF>
$GNGSA,A,3,05,15,23,18,29,13,,,,,,,2.30,1.23,1.94,1*0C<LF>
$GNGSA,A,3,,,,,,,,,,,,,2.30,1.23,1.94,3*0E<LF>
$GNGSA,A,3,29,32,,,,,,,,,,,2.30,1.23,1.94,4*03<LF>
$GNGSA,A,3,03,,,,,,,,,,,,2.30,1.23,1.94,5*0B<LF>
$GPGSV,3,1,10,05,30,040,22,10,08,238,18,13,36,071,20,15,62,112,25,1*6A<LF>
$GPGSV,3,2,10,16,02,320,14,18,45,325,25,20,06,054,14,23,39,252,26,1*64<LF>
$GPGSV,3,3,10,25,,,17,29,80,151,25,1*55<LF>
$GPGSV,1,1,03,11,02,093,,12,00,174,,41,56,168,,0*56<LF>
$GAGSV,1,1,00,0*74<LF>
$GBGSV,1,1,03,13,59,004,17,29,68,351,18,32,23,040,20,1*44<LF>
$GQGSV,1,1,01,03,26,096,14,1*59<LF>
$GNGLL,2831.61191,N,07708.03420,E,044503.90,A,A*73<LF>
$GN<LF>

NMEA_0183_Data find(): Lines to search = 17
NMEA_0183_Data find(): Not enough lines to find the required occurence.
NMEA_0183_Data find(): occurrenceCount: 0
NMEA_0183_Data print(): 
GNRMC: Recommended Minimum Specific GNSS Data
  Header: $GNRMC
  UTC: 044503.30
  Status: A
  Latitude: 2831.61186
  Latitude Direction: N
  Longitude: 07708.03426
  Longitude Direction: E
  Speed: 0.111
  Course: 
  Date: 040824
  Mag Variation: 
  Mag Variation Direction: 
  Mode: A
  Navigation Status: V
  Checksum: 11
  
CSE_GNSS read(): Read 1024 bytes from GNSS module.
CSE_GNSS extractNMEA(): Extracting NMEA lines.. GNSS data buffer length is 1024
CSE_GNSS extractNMEA(): Removing CR character..
CSE_GNSS extractNMEA(): Extracted 835 characters.
CSE_GNSS extractNMEA(): Removing non-printable characters..
CSE_GNSS extractNMEA(): Found 835 valid characters.
$GPGSV,3,3,10,25,,,16,29,80,151,24,1*55<LF>
$GPGSV,1,1,03,11,02,093,,12,00,174,,41,56,168,,0*56<LF>
$GAGSV,1,1,00,0*74<LF>
$GBGSV,1,1,03,13,59,004,17,29,68,351,18,32,23,040,20,1*44<LF>
$GQGSV,1,1,01,03,26,096,15,1*58<LF>
$GNGLL,2831.61193,N,07708.03420,E,044504.50,A,A*7A<LF>
$GNRMC,044504.60,A,2831.61193,N,07708.03419,E,0.164,,040824,,,A,V*19<LF>
$GNVTG,,T,,M,0.164,N,0.304,K,A*39<LF>
$GNGGA,044504.60,2831.61193,N,07708.03419,E,1,09,1.23,273.8,M,-40.5,M,,*6D<LF>
$GNGSA,A,3,05,15,23,18,29,13,,,,,,,2.30,1.23,1.94,1*0C<LF>
$GNGSA,A,3,,,,,,,,,,,,,2.30,1.23,1.94,3*0E<LF>
$GNGSA,A,3,29,32,,,,,,,,,,,2.30,1.23,1.94,4*03<LF>
$GNGSA,A,3,03,,,,,,,,,,,,2.30,1.23,1.94,5*0B<LF>
$GPGSV,3,1,10,05,30,040,21,10,08,238,17,13,36,071,18,15,62,112,23,1*6B<LF>
$GPGSV,3,2,10,16,02,320,14,18,45,325,24,20,06,054,13,23,39,252,25,1*61<LF>
$GPGSV,3,3,10,25,,,16,29,80,151,24,1*55<LF>
$GPGSV,1,1,03,11,02,093,,12,00,1<LF>

NMEA_0183_Data find(): Lines to search = 17
NMEA_0183_Data find(): Found GNRMC line at position 6
NMEA_0183_Data set(): $GNRMC,044504.60,A,2831.61193,N,07708.03419,E,0.164,,040824,,,A,V*19
NMEA_0183_Data check(): $GNRMC,044504.60,A,2831.61193,N,07708.03419,E,0.164,,040824,,,A,V*19
NMEA_0183_Data check(): Valid GNRMC sentence.
NMEA_0183_Data parse(): $GNRMC,044504.60,A,2831.61193,N,07708.03419,E,0.164,,040824,,,A,V*19
NMEA_0183_Data parse(): Completed.
NMEA_0183_Data print(): 
GNRMC: Recommended Minimum Specific GNSS Data
  Header: $GNRMC
  UTC: 044504.60
  Status: A
  Latitude: 2831.61193
  Latitude Direction: N
  Longitude: 07708.03419
  Longitude Direction: E
  Speed: 0.164
  Course: 
  Date: 040824
  Mag Variation: 
  Mag Variation Direction: 
  Mode: A
  Navigation Status: V
  Checksum: 19
  
CSE_GNSS read(): Read 1024 bytes from GNSS module.
CSE_GNSS extractNMEA(): Extracting NMEA lines.. GNSS data buffer length is 1024
CSE_GNSS extractNMEA(): Removing CR character..
CSE_GNSS extractNMEA(): Extracted 821 characters.
CSE_GNSS extractNMEA(): Removing non-printable characters..
CSE_GNSS extractNMEA(): Found 739 valid characters.
$GAGSV,1,1,b\G-7U--&`Hh=?\@V/<LF>
$GNVTG,,T,,M,0.012,N,0.023,K,A*3F<LF>
$GNGGA,044505.20,2831.61195,N,07708.03417,E,1,09,1.23,273.9,M,-40.5,M,,*61<LF>
$GNGSA,A,3,05,15,23,18,29,13,,,,,,,2.30,1.23,1.94,1*0C<LF>
$GNGSA,A,3,,,,,,,,,,,,,2.30,1.23,1.94,3*0E<LF>
$GNGSA,A,3,29,32,,,,,,,,,,,2.30,1.23,1.94,4*03<LF>
$GNGSA,A,3,03,,,,,,,,,,,,2.30,1.23,1.94,5*0B<LF>
$GPGSV,3,1,10,05,30,040,21,10,08,238,16,13,36,071,18,15,62,112,22,1*6B<LF>
$GPGSV,3,2,10,16,02,320,14,18,45,325,23,20,06,054,13,23,39,252,24,1*67<LF>
$GPGSV,3,3,10,25,,,17,29,80,151,23,1*53<LF>
$GPGSV,1,1,03,11,02,093,,12,00,174,,41,56,168,,0*56<LF>
$GAGSV,1,1,00,0*74<LF>
$GBGSV,1,1,03,13,59,004,17,29,68,351,18,32,23,040,20,1*44<LF>
$GQGSV,1,1,01,03,26,096,15,1*58<LF>
$GNGLL,2831.61195,N,07708.03417,E,044505.20,A,A*7E<LF>
$GNRMC,044505.3<LF>

NMEA_0183_Data find(): Lines to search = 16
NMEA_0183_Data find(): Found GNRMC line at position 15
NMEA_0183_Data set(): $GNRMC,044505.3
NMEA_0183_Data check(): $GNRMC,044505.3
NMEA_0183_Data check(): Invalid comma count.
NMEA_0183_Data parse(): Invalid NMEA sentence.
NMEA_0183_Data print(): 
GNRMC: Recommended Minimum Specific GNSS Data
  Header: $GNRMC
  UTC: 044504.60
  Status: A
  Latitude: 2831.61193
  Latitude Direction: N
  Longitude: 07708.03419
  Longitude Direction: E
  Speed: 0.164
  Course: 
  Date: 040824
  Mag Variation: 
  Mag Variation Direction: 
  Mode: A
  Navigation Status: V
  Checksum: 19
  
CSE_GNSS read(): Read 1024 bytes from GNSS module.
CSE_GNSS extractNMEA(): Extracting NMEA lines.. GNSS data buffer length is 1024
CSE_GNSS extractNMEA(): Removing CR character..
CSE_GNSS extractNMEA(): Extracted 855 characters.
CSE_GNSS extractNMEA(): Removing non-printable characters..
CSE_GNSS extractNMEA(): Found 855 valid characters.
$GNGSA,A,3,,,,,,,,,,,,,2.30,1.23,1.94,3*0E<LF>
$GNGSA,A,3,29,32,,,,,,,,,,,2.30,1.23,1.94,4*03<LF>
$GNGSA,A,3,03,,,,,,,,,,,,2.30,1.23,1.94,5*0B<LF>
$GPGSV,3,1,09,05,30,040,21,10,08,238,15,13,36,071,17,15,62,112,22,1*6F<LF>
$GPGSV,3,2,09,16,02,320,14,18,45,325,23,23,39,252,23,25,,,16,1*5F<LF>
$GPGSV,3,3,09,29,80,151,22,1*5B<LF>
$GPGSV,1,1,04,11,02,093,,12,00,174,,20,06,054,,41,56,168,,0*64<LF>
$GAGSV,1,1,00,0*74<LF>
$GBGSV,1,1,03,13,59,004,16,29,68,351,18,32,23,040,19,1*4F<LF>
$GQGSV,1,1,01,03,26,096,15,1*58<LF>
$GNGLL,2831.61174,N,07708.03424,E,044505.80,A,A*7B<LF>
$GNRMC,044505.90,A,2831.61163,N,07708.03429,E,2.870,172.29,040824,,,A,V*04<LF>
$GNVTG,172.29,T,,M,2.870,N,5.316,K,A*20<LF>
$GNGGA,044505.90,2831.61163,N,07708.03429,E,1,09,1.23,273.6,M,-40.5,M,,*61<LF>
$GNGSA,A,3,05,15,23,18,29,13,,,,,,,2.30,1.23,1.94,1*0C<LF>
$GNGSA,A,3,,,,,,,,,,,,,2.30,1.23,1.94,3*0E<LF>
$GNGSA,A,3,29,32,,,,,,,,,,,2.30,1.23,1.9
NMEA_0183_Data find(): Lines to search = 17
NMEA_0183_Data find(): Found GNRMC line at position 11
NMEA_0183_Data set(): $GNRMC,044505.90,A,2831.61163,N,07708.03429,E,2.870,172.29,040824,,,A,V*04
NMEA_0183_Data check(): $GNRMC,044505.90,A,2831.61163,N,07708.03429,E,2.870,172.29,040824,,,A,V*04
NMEA_0183_Data check(): Valid GNRMC sentence.
NMEA_0183_Data parse(): $GNRMC,044505.90,A,2831.61163,N,07708.03429,E,2.870,172.29,040824,,,A,V*04
NMEA_0183_Data parse(): Completed.
NMEA_0183_Data print(): 
GNRMC: Recommended Minimum Specific GNSS Data
  Header: $GNRMC
  UTC: 044505.90
  Status: A
  Latitude: 2831.61163
  Latitude Direction: N
  Longitude: 07708.03429
  Longitude Direction: E
  Speed: 2.870
  Course: 172.29
  Date: 040824
  Mag Variation: 
  Mag Variation Direction: 
  Mode: A
  Navigation Status: V
  Checksum: 04
  
CSE_GNSS read(): Read 1024 bytes from GNSS module.
CSE_GNSS extractNMEA(): Extracting NMEA lines.. GNSS data buffer length is 1024
CSE_GNSS extractNMEA(): Removing CR character..
CSE_GNSS extractNMEA(): Extracted 899 characters.
CSE_GNSS extractNMEA(): Removing non-printable characters..
CSE_GNSS extractNMEA(): Found 899 valid characters.
$GNGSA,A,3,03,,,,,,,,,,,0,174,,20,06,054,,41,56,168,,0*64<LF>
$GAGSV,1,1,00,0*74<LF>
$GBGSV,1,1,03,13,59,004,15,29,68,351,17,32,23,040,18,1*42<LF>
$GQGSV,1,1,01,03,26,096,15,1*58<LF>
$GNGLL,2831.61160,N,07708.03430,E,044506.40,A,A*74<LF>
$GNRMC,044506.50,A,2831.61160,N,07708.03430,E,0.245,,040824,,,A,V*1F<LF>
$GNVTG,,T,,M,0.245,N,0.454,K,A*3B<LF>
$GNGGA,044506.50,2831.61160,N,07708.03430,E,1,09,1.23,273.6,M,-40.5,M,,*65<LF>
$GNGSA,A,3,05,15,23,18,29,13,,,,,,,2.30,1.23,1.94,1*0C<LF>
$GNGSA,A,3,,,,,,,,,,,,,2.30,1.23,1.94,3*0E<LF>
$GNGSA,A,3,29,32,,,,,,,,,,,2.30,1.23,1.94,4*03<LF>
$GNGSA,A,3,03,,,,,,,,,,,,2.30,1.23,1.94,5*0B<LF>
$GPGSV,3,1,09,05,30,040,20,10,08,238,15,13,36,071,16,15,62,112,21,1*6C<LF>
$GPGSV,3,2,09,16,02,320,14,18,45,325,23,23,39,252,23,25,,,16,1*5F<LF>
$GPGSV,3,3,09,29,80,151,22,1*5B<LF>
$GPGSV,1,1,04,11,02,093,,12,00,174,,20,06,054,,41,56,168,,0*64<LF>
$GAGSV,1,1,00,0*74<LF>
$GBGSV,1,1,03,13,59,004,15,29,68,351,17,32,23,040,19,1*43<LF>
$GQ<LF>

NMEA_0183_Data find(): Lines to search = 19
NMEA_0183_Data find(): Found GNRMC line at position 5
NMEA_0183_Data set(): $GNRMC,044506.50,A,2831.61160,N,07708.03430,E,0.245,,040824,,,A,V*1F
NMEA_0183_Data check(): $GNRMC,044506.50,A,2831.61160,N,07708.03430,E,0.245,,040824,,,A,V*1F
NMEA_0183_Data check(): Valid GNRMC sentence.
NMEA_0183_Data parse(): $GNRMC,044506.50,A,2831.61160,N,07708.03430,E,0.245,,040824,,,A,V*1F
NMEA_0183_Data parse(): Completed.
NMEA_0183_Data print(): 
GNRMC: Recommended Minimum Specific GNSS Data
  Header: $GNRMC
  UTC: 044506.50
  Status: A
  Latitude: 2831.61160
  Latitude Direction: N
  Longitude: 07708.03430
  Longitude Direction: E
  Speed: 0.245
  Course: 
  Date: 040824
  Mag Variation: 
  Mag Variation Direction: 
  Mode: A
  Navigation Status: V
  Checksum: 1F
Serial Monitor

The new updates to the CSE_GNSS library bring in breaking changes. So make sure you update your projects to utilize the new functions in the version 1.0.1 and up. If your GNSS module does not output mixed protocol messages, you can continue using the version 0.1.2 without any issues.

  1. GOKU GM10 Nano V3 – Official Page FlyWoo
  2. Buy GOKU GM10 Nano V3 GNSS module – DRKStore
  3. QMC5883L Magnetometer Datasheet [PDF]
  4. UBX-M10050-KB – Official Product Page
  5. u-center 2 Application
  6. MITAYI Pico RP2040 – CIRCUITSTATE
  7. CSE_GNSS Arduino Library by CIRCUITSTATE – GitHub
  8. What is GPS/GNSS & How to Interface u-blox NEO-6M GPS Module with Arduino – CIRCUITSTATE

Share to your friends
Vishnu Mohanan

Vishnu Mohanan

Founder and CEO at CIRCUITSTATE Electronics

Articles: 91

Leave a Reply

Your email address will not be published. Required fields are marked *

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

The reCAPTCHA verification period has expired. Please reload the page.