Interfacing GOKU GM10 Nano V3 GNSS Module with Arduino
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 & How to Interface u-blox NEO-6M GPS Module with Arduino
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.
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.
UBX-M10050-KB
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.
Feature | UBX-M10050-KB |
---|---|
GNSS | BeiDou, Galileo, GLONASS, GPS / QZSS |
Number of concurrent GNSS | 4 |
GNSS platform | Concurrent GNSS |
Oscillators | Crystal supported, TCXO supported |
UART | ✓ |
SPI | ✓ |
I2C | ✓ |
Maximum supply | 1.8 V |
Minimum supply | 1 V |
Maximum temperature | 85 °C |
Minimum temperature | -40 °C |
Antenna supervisor | ✓ |
RTC crystal | ✓ |
Time pulse output | ✓ |
Dimensions | 4.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.
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.
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.
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.
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.
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.
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 Module | RP2040 |
---|---|
V | 3.3V |
G | GND |
RX | GPIO0 |
TX | GPIO1 |
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 MonitorThe 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.
Links
- GOKU GM10 Nano V3 – Official Page FlyWoo
- Buy GOKU GM10 Nano V3 GNSS module – DRKStore
- QMC5883L Magnetometer Datasheet [PDF]
- UBX-M10050-KB – Official Product Page
- u-center 2 Application
- MITAYI Pico RP2040 – CIRCUITSTATE
- CSE_GNSS Arduino Library by CIRCUITSTATE – GitHub
- What is GPS/GNSS & How to Interface u-blox NEO-6M GPS Module with Arduino – CIRCUITSTATE
Short Link
- Short URL to this page – https://www.circuitstate.com/gokugm10nanov3