Skip to content

Commit e8dc6a2

Browse files
authored
Merge pull request #208 from sparkfun/release_candidate
v2.2.25
2 parents 8a33fb9 + 1c1c866 commit e8dc6a2

File tree

6 files changed

+299
-33
lines changed

6 files changed

+299
-33
lines changed

Diff for: .github/workflows/compile-sketch.yml

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ name: Compile Sketch
22

33
on:
44
# - push
5-
- pull_request
6-
5+
pull_request:
6+
workflow_dispatch:
77

88
jobs:
99
compile-sketch:
@@ -100,6 +100,7 @@ jobs:
100100
- source-path: ./
101101
sketch-paths: |
102102
- examples/Example20_SendCustomCommand
103+
# - examples/NEO-M8P-2/Example2_StartRTCMBase_virtual/Example2_StartRTCMBase_virtual
103104
enable-warnings-report: true
104105
enable-deltas-report: true
105106
# verbose: true
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
1+
/*
2+
Note: compiles OK with v2.0 but is currently untested
3+
4+
Send UBX binary commands to enable RTCM sentences on u-blox NEO-M8P-2 module
5+
By: Nathan Seidle
6+
SparkFun Electronics
7+
Date: September 7th, 2018
8+
License: MIT. See license file for more information but you can
9+
basically do whatever you want with this code.
10+
11+
This example does all steps to configure and enable a NEO-M8P-2 as a base station:
12+
Begin Survey-In
13+
Once we've achieved 2m accuracy and 300s have passed, survey is complete
14+
Enable four RTCM messages
15+
Begin outputting RTCM bytes
16+
17+
Feel like supporting open source hardware?
18+
Buy a board from SparkFun!
19+
ZED-F9P RTK2: https://www.sparkfun.com/products/15136
20+
NEO-M8P RTK: https://www.sparkfun.com/products/15005
21+
SAM-M8Q: https://www.sparkfun.com/products/15106
22+
23+
Hardware Connections:
24+
Plug a Qwiic cable into the GNSS and a BlackBoard
25+
If you don't have a platform with a Qwiic connection use the SparkFun Qwiic Breadboard Jumper (https://www.sparkfun.com/products/14425)
26+
Open the serial monitor at 115200 baud to see the output
27+
*/
28+
29+
#include <Wire.h> //Needed for I2C to GNSS
30+
31+
#include <SparkFun_u-blox_GNSS_Arduino_Library.h> //http://librarymanager/All#SparkFun_u-blox_GNSS
32+
33+
class MY_SFE_UBLOX_GNSS : public SFE_UBLOX_GNSS
34+
{
35+
//This function gets called from the SparkFun u-blox Arduino Library.
36+
//As each RTCM byte comes in you can specify what to do with it
37+
//Useful for passing the RTCM correction data to a radio, Ntrip broadcaster, etc.
38+
virtual void processRTCM_v(uint8_t incoming)
39+
{
40+
//Let's just pretty-print the HEX values for now
41+
if (rtcmFrameCounter % 16 == 0) Serial.println();
42+
Serial.print(F(" "));
43+
if (incoming < 0x10) Serial.print(F("0"));
44+
Serial.print(incoming, HEX);
45+
}
46+
};
47+
48+
MY_SFE_UBLOX_GNSS myGNSS;
49+
50+
void setup()
51+
{
52+
Serial.begin(115200);
53+
while (!Serial); //Wait for user to open terminal
54+
Serial.println(F("u-blox NEO-M8P-2 base station example"));
55+
56+
Wire.begin();
57+
Wire.setClock(400000); //Increase I2C clock speed to 400kHz
58+
59+
if (myGNSS.begin() == false) //Connect to the u-blox module using Wire port
60+
{
61+
Serial.println(F("u-blox GNSS not detected at default I2C address. Please check wiring. Freezing."));
62+
while (1);
63+
}
64+
65+
myGNSS.setI2COutput(COM_TYPE_UBX | COM_TYPE_NMEA | COM_TYPE_RTCM3); // Ensure RTCM3 is enabled
66+
myGNSS.saveConfiguration(); //Save the current settings to flash and BBR
67+
68+
while (Serial.available()) Serial.read(); //Clear any latent chars in serial buffer
69+
Serial.println(F("Press any key to send commands to begin Survey-In"));
70+
while (Serial.available() == 0) ; //Wait for user to press a key
71+
72+
bool response;
73+
74+
//Check if Survey is in Progress before initiating one
75+
// From v2.0, the data from getSurveyStatus (UBX-NAV-SVIN) is returned in UBX_NAV_SVIN_t packetUBXNAVSVIN
76+
// Please see u-blox_structs.h for the full definition of UBX_NAV_SVIN_t
77+
// You can either read the data from packetUBXNAVSVIN directly
78+
// or can use the helper functions: getSurveyInActive; getSurveyInValid; getSurveyInObservationTime; and getSurveyInMeanAccuracy
79+
response = myGNSS.getSurveyStatus(2000); //Query module for SVIN status with 2000ms timeout (request can take a long time)
80+
81+
if (response == false) // Check if fresh data was received
82+
{
83+
Serial.println(F("Failed to get Survey In status. Freezing..."));
84+
while (1); //Freeze
85+
}
86+
87+
if (myGNSS.getSurveyInActive() == true) // Use the helper function
88+
{
89+
Serial.print(F("Survey already in progress."));
90+
}
91+
else
92+
{
93+
//Start survey
94+
response = myGNSS.enableSurveyMode(300, 2.000); //Enable Survey in, 300 seconds, 2.0m
95+
if (response == false)
96+
{
97+
Serial.println(F("Survey start failed. Freezing..."));
98+
while (1);
99+
}
100+
Serial.println(F("Survey started. This will run until 300s has passed and less than 2m accuracy is achieved."));
101+
}
102+
103+
while(Serial.available()) Serial.read(); //Clear buffer
104+
105+
//Begin waiting for survey to complete
106+
while (myGNSS.getSurveyInValid() == false) // Call the helper function
107+
{
108+
if(Serial.available())
109+
{
110+
byte incoming = Serial.read();
111+
if(incoming == 'x')
112+
{
113+
//Stop survey mode
114+
response = myGNSS.disableSurveyMode(); //Disable survey
115+
Serial.println(F("Survey stopped"));
116+
break;
117+
}
118+
}
119+
120+
// From v2.0, the data from getSurveyStatus (UBX-NAV-SVIN) is returned in UBX_NAV_SVIN_t packetUBXNAVSVIN
121+
// Please see u-blox_structs.h for the full definition of UBX_NAV_SVIN_t
122+
// You can either read the data from packetUBXNAVSVIN directly
123+
// or can use the helper functions: getSurveyInActive; getSurveyInValid; getSurveyInObservationTime; and getSurveyInMeanAccuracy
124+
response = myGNSS.getSurveyStatus(2000); //Query module for SVIN status with 2000ms timeout (req can take a long time)
125+
if (response == true) // Check if fresh data was received
126+
{
127+
Serial.print(F("Press x to end survey - "));
128+
Serial.print(F("Time elapsed: "));
129+
Serial.print((String)myGNSS.getSurveyInObservationTime());
130+
131+
Serial.print(F(" Accuracy: "));
132+
Serial.print((String)myGNSS.getSurveyInMeanAccuracy());
133+
Serial.println();
134+
}
135+
else
136+
{
137+
Serial.println(F("SVIN request failed"));
138+
}
139+
140+
delay(1000);
141+
}
142+
Serial.println(F("Survey valid!"));
143+
144+
response = true;
145+
response &= myGNSS.enableRTCMmessage(UBX_RTCM_1005, COM_PORT_I2C, 1); //Enable message 1005 to output through I2C port, message every second
146+
response &= myGNSS.enableRTCMmessage(UBX_RTCM_1077, COM_PORT_I2C, 1);
147+
response &= myGNSS.enableRTCMmessage(UBX_RTCM_1087, COM_PORT_I2C, 1);
148+
response &= myGNSS.enableRTCMmessage(UBX_RTCM_1230, COM_PORT_I2C, 10); //Enable message every 10 seconds
149+
150+
if (response == true)
151+
{
152+
Serial.println(F("RTCM messages enabled"));
153+
}
154+
else
155+
{
156+
Serial.println(F("RTCM failed to enable. Are you sure you have an NEO-M8P?"));
157+
while (1); //Freeze
158+
}
159+
160+
Serial.println(F("Base survey complete! RTCM now broadcasting."));
161+
}
162+
163+
void loop()
164+
{
165+
myGNSS.checkUblox(); //See if new data is available. Process bytes as they come in.
166+
167+
delay(250); //Don't pound too hard on the I2C bus
168+
}

Diff for: keywords.txt

+18
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,11 @@ checkUbloxSPI KEYWORD2
107107

108108
process KEYWORD2
109109
processNMEA KEYWORD2
110+
processNMEA_v KEYWORD2
110111
processRTCMframe KEYWORD2
112+
processRTCMframe_v KEYWORD2
111113
processRTCM KEYWORD2
114+
processRTCM_v KEYWORD2
112115
processUBX KEYWORD2
113116
processUBXpacket KEYWORD2
114117

@@ -563,6 +566,7 @@ getConfirmedDate KEYWORD2
563566
getConfirmedTime KEYWORD2
564567
getFixType KEYWORD2
565568
getGnssFixOk KEYWORD2
569+
getNAVPVTPSMMode KEYWORD2
566570
getDiffSoln KEYWORD2
567571
getHeadVehValid KEYWORD2
568572
getCarrierSolutionType KEYWORD2
@@ -677,6 +681,9 @@ getLatestNMEAGNZDA KEYWORD2
677681
setNMEAGNZDAcallback KEYWORD2
678682
setNMEAGNZDAcallbackPtr KEYWORD2
679683

684+
setupPowerMode KEYWORD2
685+
setPowerManagement KEYWORD2
686+
680687
extractLong KEYWORD2
681688
extractSignedLong KEYWORD2
682689
extractInt KEYWORD2
@@ -889,3 +896,14 @@ SFE_UBLOX_MAIN_TALKER_ID_GQ LITERAL1
889896

890897
SFE_UBLOX_DGNSS_MODE_FLOAT LITERAL1
891898
SFE_UBLOX_DGNSS_MODE_FIXED LITERAL1
899+
900+
SFE_UBLOX_PMS_MODE_FULLPOWER LITERAL1
901+
SFE_UBLOX_PMS_MODE_BALANCED LITERAL1
902+
SFE_UBLOX_PMS_MODE_INTERVAL LITERAL1
903+
SFE_UBLOX_PMS_MODE_AGGRESSIVE_1HZ LITERAL1
904+
SFE_UBLOX_PMS_MODE_AGGRESSIVE_2HZ LITERAL1
905+
SFE_UBLOX_PMS_MODE_AGGRESSIVE_4HZ LITERAL1
906+
SFE_UBLOX_PMS_MODE_INVALID LITERAL1
907+
908+
SFE_UBLOX_CFG_RXM_CONTINUOUS LITERAL1
909+
SFE_UBLOX_CFG_RXM_POWERSAVE LITERAL1

Diff for: library.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name=SparkFun u-blox GNSS Arduino Library
2-
version=2.2.24
2+
version=2.2.25
33
author=SparkFun Electronics <[email protected]>
44
maintainer=SparkFun Electronics <sparkfun.com>
55
sentence=Library for I2C, Serial and SPI Communication with u-blox GNSS modules<br/><br/>

0 commit comments

Comments
 (0)