cannot see ,attachment did not work…
†` ” M >†qL œ„dÆ$GNGGA,030454.000,3448.08795003,N,11405.00860481,W,4,34,0.28,645.481,M,-29.887,M,2.0,002062
$GNRMC,030454.000,A,3448.08795003,N,11405.00860481,W,0.010,247.22,160625,R,V32
$GNGLL,3448.08795003,N,11405.00860481,W,030454.000,A,D5F
$GNVTG,247.22,T,M,0.010,N,0.018,K,D2F
$GNGSA,A,3,01,02,03,04,09,16,28,31,32,0.50,0.28,0.41,108
$GNGSA,A,3,67,68,69,77,78,79,83,84,0.50,0.28,0.41,20E
$GNGSA,A,3,04,05,09,10,11,24,31,34,36,0.50,0.28,0.41,306
$GNGSA,A,3,12,19,20,22,35,36,44,45,0.50,0.28,0.41,405
$GNGSA,A,3,0.50,0.28,0.41,50F
$GNGSA,A,3,0.50,0.28,0.41,60C
$GPGSV,4,1,13,01,37,233,46,02,19,208,42,03,67,319,49,04,36,294,43,16D
$GPGSV,4,2,13,09,05,280,35,16,23,152,43,26,46,28,29,044,41,155
$GPGSV,4,3,13,31,58,043,48,32,09,083,38,44,46,46,47,16E
$GPGSV,4,4,13,48,38,161
$GPGSV,2,1,08,01,37,233,46,03,67,319,47,04,36,294,45,09,05,280,35,668
$GPGSV,2,2,08,26,45,28,29,044,44,31,58,043,46,32,09,083,36,653
$GPGSV,2,1,07,01,37,233,47,03,67,319,51,04,36,294,47,09,05,280,36,86E
$GPGSV,2,2,07,26,48,28,29,044,46,32,09,083,36,867
$GLGSV,3,1,09,67,42,069,51,68,49,351,53,69,14,307,45,77,33,039,44,178
$GLGSV,3,2,09,78,61,132,53,79,20,182,49,82,43,83,20,253,47,147
$GLGSV,3,3,09,84,18,309,35,148
$GLGSV,2,1,08,67,42,069,48,68,49,351,50,69,14,307,40,78,61,132,52,371
$GLGSV,2,2,08,79,20,182,45,82,40,83,20,253,45,84,18,309,45,348
$GAGSV,3,1,09,04,45,055,45,05,16,277,39,09,59,321,48,10,14,185,40,773
$GAGSV,3,2,09,11,32,207,40,24,04,178,35,31,30,133,43,34,13,321,38,778
$GAGSV,3,3,09,36,42,272,45,74F
$GAGSV,3,1,09,04,45,055,50,05,16,277,43,09,59,321,51,10,14,185,43,274
$GAGSV,3,2,09,11,32,207,45,24,04,178,38,31,30,133,47,34,13,321,42,27C
$GAGSV,3,3,09,36,42,272,49,246
$GAGSV,3,1,09,04,45,055,46,05,16,277,40,09,59,321,48,10,14,185,40,178
$GAGSV,3,2,09,11,32,207,42,24,04,178,34,31,30,133,44,34,13,321,38,17A
$GAGSV,3,3,09,36,42,272,46,14A
I changed parser settings in QGNSS to RTCM only
and this it what the log file looks like
$GNGGA,043231.000,3448.08794316,N,11405.00859504,W,4,26,0.35,645.470,M,-29.887,M,4.0,002064
$GNRMC,043231.000,A,3448.08794316,N,11405.00859504,W,0.003,247.22,160625,R,V31
$GNGLL,3448.08794316,N,11405.00859504,W,043231.000,A,D5E
$GNVTG,247.22,T,M,0.003,N,0.006,K,D22
$GNGSA,A,3,01,03,04,06,07,09,16,31,0.67,0.35,0.57,10F
$GNGSA,A,3,67,68,69,78,79,80,0.67,0.35,0.57,20E
$GNGSA,A,3,04,05,09,24,31,34,36,0.67,0.35,0.57,308
$GNGSA,A,3,19,21,22,36,45,0.67,0.35,0.57,40E
$GNGSA,A,3,0.67,0.35,0.57,500
$GNGSA,A,3,0.67,0.35,0.57,603
$GPGSV,4,1,13,01,07,204,39,03,62,188,49,04,62,343,46,06,10,301,37,165
$GPGSV,4,2,13,07,19,248,42,09,31,307,42,16,54,110,47,26,45,15E
$GPGSV,4,3,13,27,34,31,21,051,44,44,45,46,48,159
$GPGSV,4,4,13,48,35,16C
$GPGSV,3,1,09,01,07,204,41,03,62,188,47,04,62,343,49,06,10,301,40,660
$GPGSV,3,2,09,07,19,248,38,09,31,307,43,26,44,27,26,66C
$GPGSV,3,3,09,31,21,051,42,659
$GPGSV,2,1,07,01,07,204,43,03,62,188,51,04,62,343,50,06,10,301,42,86E
$GPGSV,2,2,07,09,31,307,47,26,48,27,33,85B
$GLGSV,2,1,08,67,17,119,49,68,59,080,54,69,47,341,52,78,50,035,54,17B
$GLGSV,2,2,08,79,70,192,54,80,16,206,47,84,34,85,43,17B
$GLGSV,2,1,08,67,17,119,45,68,59,080,51,69,47,341,49,78,50,035,49,376
$GLGSV,2,2,08,79,70,192,51,80,16,206,43,84,40,85,36,379
$GAGSV,3,1,09,04,27,089,42,05,35,305,42,09,65,029,50,11,29,742
$GAGSV,3,2,09,14,30,24,35,170,44,31,52,094,47,34,19,291,39,74F
$GAGSV,3,3,09,36,21,237,42,74C
$GAGSV,3,1,09,04,27,089,47,05,35,305,49,09,65,029,52,11,34,247
$GAGSV,3,2,09,14,41,24,35,170,49,31,52,094,51,34,19,291,45,24D
$GAGSV,3,3,09,36,21,237,44,24F
$GAGSV,3,1,09,04,27,089,44,05,35,305,46,09,65,029,49,11,32,144
$GAGSV,3,2,09,14,36,24,35,170,45,31,52,094,48,34,19,291,42,14D
$GAGSV,3,3,09,36,21,237,41,149
$GAGSV,3,1,09,04,27,089,42,05,35,305,45,09,65,029,48,11,29,5*4E
No, there are only nmea sentences, the module is in rover_mode; later I will post
commands to enable only rtcm…
i sent it base command, i dunno if it took, doesn’t show sat info but still data stream, looks like this
$GNGGA,051124.500,3448.08795334,N,11405.00857334,W,4,29,0.35,645.454,M,-29.887,M,1.5,002066
$GNRMC,051124.500,A,3448.08795334,N,11405.00857334,W,0.019,247.22,160625,R,V31
$GNGLL,3448.08795334,N,11405.00857334,W,051124.500,A,D55
$GNVTG,247.22,T,M,0.019,N,0.035,K,D29
$PQTMVERNO,LG290P03AANR01A03S,2024/05/22,18:09:061C
$PQTMUNIQID,OK,8,00001C023EBBD64670
$GNGGA,051125.000,3448.08795451,N,11405.00857167,W,4,29,0.35,645.448,M,-29.887,M,2.0,002069
$GNRMC,051125.000,A,3448.08795451,N,11405.00857167,W,0.012,247.22,160625,R,V3E
$GNGLL,3448.08795451,N,11405.00857167,W,051125.000,A,D51
$GNVTG,247.22,T,M,0.012,N,0.022,K,D24
$GNGSA,A,3,03,04,06,07,08,09,16,27,31,0.57,0.35,0.46,100
$GNGSA,A,3,68,69,70,78,79,80,0.57,0.35,0.46,20B
$GNGSA,A,3,04,05,09,24,25,31,34,36,0.57,0.35,0.46,30C
$GNGSA,A,3,19,21,22,26,36,45,0.57,0.35,0.46,409
$GNGSA,A,3,0.57,0.35,0.46,503
$GNGSA,A,3,0.57,0.35,0.46,600
$GPGSV,4,1,13,03,42,183,47,04,70,024,48,06,07,285,37,07,30,263,44,16F
$GPGSV,4,2,13,08,05,153,39,09,45,318,47,16,55,074,47,26,42,154
$GPGSV,4,3,13,27,13,121,41,31,08,060,39,44,44,46,48,169
$GPGSV,4,4,13,48,35,16C
$GPGSV,3,1,09,03,42,183,45,04,70,024,51,06,07,285,37,07,30,263,41,66B
$GPGSV,3,2,09,08,05,153,34,09,45,318,45,26,44,27,13,121,40,650
$GPGSV,3,3,09,31,08,060,40,652
$GPGSV,2,1,07,03,42,183,48,04,70,024,52,06,07,285,40,08,05,153,40,86C
$GPGSV,2,2,07,09,45,318,48,26,46,27,13,121,43,860
$GLGSV,2,1,07,67,40,68,48,116,53,69,66,001,54,70,07,323,35,140
$GLGSV,2,2,07,78,30,031,52,79,84,349,52,80,35,217,50,142
$GLGSV,2,1,06,67,36,68,48,116,51,69,66,001,52,78,30,031,46,34E
$GLGSV,2,2,06,79,84,349,50,80,35,217,50,3*7A
no, rtcm sentences looks like glibberish into tex mode, U can see if there are into hex or parsed rtcm…
module support only one command at a time and nedd reboot after save each time…
I can’t even get it to take commands on the data line, i pasted the base command in there and clicked on the arrow and I saw the red TX stream by but nothing happened.
Hi @steve1428 ,
What firmware version is your LG290P running? It was probably shipped with 0103 installed, but 0105 is now available.
Here are message settings tested on a LG290P running 0103, using PyGPSClient 1.5.9 (latest):
Select your serial port, set the baud rate to 460800 and click the “USB/UART” icon to open the port. If your LG290P is in the default Rover mode, you should see NMEA messages streaming up the console. The default rate is 10Hz.
Click the “NMEA Config” icon.
In the NMEA Command list at the right side of the window, select:
QTMRESTOREPAR
and click the green arrow to the right of the command list.
This restores the parameters. I.e. a “factory reset”.
To ensure the parameters are saved, select each of these and click the green arrow each time:
QTMSAVEPAR
QTMSRR
These save the parameters and then reboot the receiver.
After the receiver reboots, you should be in Rover mode, outputting NMEA at 10Hz.
First, drop the FIXRATE to an interval of 1000ms:
QTMCFGFIXRATE
status W
fixinterval 1000
Green arrow
QTMSAVEPAR
Green arrow
QTMSRR
Green arrow
We don’t need those NMEA messages, so let’s disable all but GPGGA. Select each of these and click the green arrow each time. You need the “QTMCFGMSGRATE_NOVER” command, not “QTMCFGMSGRATE”.
QTMCFGMSGRATE,W,RMC,0
QTMCFGMSGRATE,W,GSV,0
QTMCFGMSGRATE,W,GSA,0
QTMCFGMSGRATE,W,VTG,0
QTMCFGMSGRATE,W,GLL,0
You should be left with only GPGGA at 1Hz.
Now we’ll enable RTCM Ephemeris every 5 seconds:
QTMCFGRTCM,W,4,0,20,07,06,2,5
Green arrow
You won’t see any RTCM output yet.
OPUS will accept satellite elevations down to 10 degrees. So replace the 20 with 10 as needed.
Now enable the individual RTCM ephemeris messages:
Using QTMCFGMSGRATE_NOVER:
QTMCFGMSGRATE,W,RTCM3-1019,1
QTMCFGMSGRATE,W,RTCM3-1020,1
QTMCFGMSGRATE,W,RTCM3-1042,1
QTMCFGMSGRATE,W,RTCM3-1046,1
You won’t see any RTCM output yet.
OPUS only accepts GPS ephemeris, so, strictly, you only need 1019. But RTKCONV can strip out data from the other constellations.
Finally:
QTMSAVEPAR
QTMSRR
When the LG290P reboots, you should see GPGGA every 1 second and a big block of RTCM every 5 seconds.
OPUS likes data sampled every 30 seconds. You can “decimate” the data in RTKCONV as needed. Or, you can use:
QTMCFGRTCM,W,4,0,20,07,06,2,30
QTMSAVEPAR
QTMSRR
I’m logging data now and will check it with RTKCONV tomorrow.
I gave the “Data Input” option a try in QGNSS (V2.0). I got it to work once I:
- Included the
$P
at the beginning *
at the end- Selected Checksum Type NMEA
- Suffix CRLF
I will still write up a full tutorial on this, but I thought you would appreciate the essentials now.
I hope this helps,
Paul
Also, if you want to save yourself some time, you can create “Preset” NMEA Commands to do this:
In PyGPSClient:
Close / Stop the port
Select File \ Save Configuration
Save pygpsclient.json somewhere where you can find it again
Edit pygpsclient.json. Ideally do this with an editor like Visual Studio Code. It has a “Format Document” option which will convert the single line of JSON data into multiple lines. (Open the file in VSC, right-click in the file editor, select “Format Document”).
Replace the "nmeapresets_l": [],
with:
"nmeapresets_l": [
"RESTORE FACTORY DEFAULTS; P; QTMRESTOREPAR; ; 1",
"Set Fix Rate to 1 Hz, Save Configuration and Reboot; P; QTMCFGFIXRATE; W,1000; 1; P; QTMSAVEPAR; ; 1; P; QTMSRR; ; 1",
"Set NMEA rates to 0; P; QTMCFGMSGRATE; W,RMC,0; 1; P; QTMCFGMSGRATE; W,GSV,0; 1; P; QTMCFGMSGRATE; W,GSA,0; 1; P; QTMCFGMSGRATE; W,VTG,0; 1; P; QTMCFGMSGRATE; W,GLL,0; 1; P; QTMCFGMSGRATE; W,GGA,0; 1",
"Check Firmware Version; P; QTMVERNO; ; 2",
"Set NMEA GGA rate to 1; P; QTMCFGMSGRATE; W,GGA,1; 1",
"Set NMEA rates to 1; P; QTMCFGMSGRATE; W,RMC,1; 1; P; QTMCFGMSGRATE; W,GSV,1; 1; P; QTMCFGMSGRATE; W,GSA,1; 1; P; QTMCFGMSGRATE; W,VTG,1; 1; P; QTMCFGMSGRATE; W,GLL,1; 1; P; QTMCFGMSGRATE; W,GGA,1; 1",
"Configure RTCM MSM4 Ephemeris 5s; P; QTMCFGRTCM; W,4,0,20,07,06,2,5; 1",
"Set RTCM Ephemeris rate; P; QTMCFGMSGRATE; W,RTCM3-1019,1; 1; P; QTMCFGMSGRATE; W,RTCM3-1020,1; 1; P; QTMCFGMSGRATE; W,RTCM3-1042,1; 1; P; QTMCFGMSGRATE; W,RTCM3-1046,1; 1",
"Save configuration and Reboot; P; QTMSAVEPAR; ; 1; P; QTMSRR; ; 1"
],
Save the JSON file with VSC and load it in PyGPSClient. The custom commands appear:
@PaulZC , outstanding guide !
OPUS decimates to 30-seconds, but NOAA suggests : Record data at intervals of 1, 2, 3, 5, 10, 15, or 30 seconds.
I’ve wondered what the best workflow would be when using these inexpensive GNSS devices without High $ Software.
IE: Is it better to go ahead and log RAW at 1, 5, or 15 seconds - to give RTKconv more wiggle room for the required Top Of Second time rounding function when generating the RINEX?
I’m thinking that since SD cards are cheap and LARGE, storing more observations than needed is the best approach ? Obviously there could be a hardware limit to the throughput when storing observations from all constellations at 1-sec (IDK) ?
But there’s also a benefit to storing all constellations for later use (such as PPP) in addition to the OPUS solution.
I have no idea what the perfect balance is
But I “think” the answer is : Store as much data from as many sources as the hardware allows, and decimate/reduce later in the Office to give yourself the most options.
SparkPNT GNSS Flex & Pygpsclient together do a great job…
if the module gets cranky to take commands sometimes helps $PQTMGNSSSTOP*09
in
before input other commands.
Thank you for the tutorial.
Thank you, others will appreciate too no doubt.
I connected my postcard lg290p to QGNSS to make observations too.
Is there a reason no CH340 on phat for flex modules, I cant talk to my flex lg290p via QGNSS
Thank you Ryan (@rftop ),
I’m not sure where I got 60s from. Maybe that’s a number from a few years ago? No matter. It looks like both OPUS and CSRS-PPP prefer 30s. I’ll update the posts above to match. I’ll also change the satellite elevation to 10 degrees since that is what OPUS will accept.
Cheers!
Paul
Hi @steve1428 ,
We thought hard about this when designing the pHAT. Adding a CH342 and the option to provide power through USB would have over-complicated the design. The board itself is designed to meet the Raspberry Pi HAT+ specification; being able to provide power via USB and still be able to meet the HAT+ sleep requirements would have been challenging. We decided to keep the design clean and make it “just a pHAT”.
The good news is that we do have a GNSS Flex Breakout in the works, which does have a CH342, can be powered via USB, and has multiple COM port connection options. You’ll be able to take your LG290P Flex module off the pHAT, mount it on the Breakout, and be up and running with QGNSS. Coming soon!
Cheers,
Paul
I guess I can connect a serial/usb thingy to the serial pinouts tho right?
I think I have some in tge closet
Is that while the LG290P Flex module is mounted on the pHAT, and while the pHAT is mounted on a Raspberry Pi? That probably won’t work as the serial/usb thingy pins will fight the RPi GPIO pins…
You could attempt to use the pHAT stand-alone, not mounted on a Pi. You would need to provide 5V power to power the pHAT regulators, and a pull-up to enable the main regulator. Then you’d have clear access to the UART pins to attach serial/usb. Remember that the UART pins are all 3.3V.
The story continues…
I’ve been using rtklibexplorer’s version of RTKLIB (b34L is the latest version). RTKCONV was able to process the combined log file from PyGPSClient using the above settings. BUT it was only able to produce a NAV file, not an OBS file. I tried uploading the NAV file to both OPUS and CSRS-PPP and both rejected it.
To create an OBS file, we also need to log the standard RTCM MSM messages.
The LG290P does not need to be in Base mode, Rover mode is OK.
To enable the MSM(4) messages:
Use QTMCFGMSGRATE (not the QTMCFGMSGRATE_NOVER version):
QTMCFGMSGRATE,W,RTCM3-107X,1,0
QTMCFGMSGRATE,W,RTCM3-108X,1,0
QTMCFGMSGRATE,W,RTCM3-109X,1,0
QTMCFGMSGRATE,W,RTCM3-112X,1,0
QTMSAVEPAR
QTMSRR
You should now see RTCM 1074, 1084, 1094 and 1124 every 1 second, plus the 1019, 1020, 1042 and 1046 every 5 seconds.
Use DataLogging in Binary format. PyGPSClient keeps the log file sizes sensible, opening a new log file every 6 minutes (~760KB).
If you are working on Windows, you can use copy /b
to combine the individual files together. If my first file is called pygpsdata-20250617091657.log
, this command will combine them:
copy /b pygpsdata-*.log 20250617091657.log
One of the services doesn’t like minus signs in the file name. Hence my removing the pygpsdata-
for the output file.
In RTKCONV:
- I selected 20250617091657.log as the input file
- I set “Interval” to 30s
- I set “Format” to RTCM3
- I left the other settings alone
- You can use the Options to discard constellations if you want to
- Click Convert
- I set the approximate start time to: 2025/06/17 08:16:57
- I am in the UK, current one hour ahead of GMT / GPST
- The PyGPSClient log file names are in local time
- I need to deduct one hour to get to GPST
- Convert then produced both NAV and OBS files
I uploaded the OBS file to both OPUS and CSRS-PPP.
CSRS-PPP needs the file zipped first.
OPUS thought the OBS file was valid, but didn’t produce a solution because “After the single baseline analysis, fewer than 3 useable reference stations remain”. I.e. it hasn’t (yet) got any reference data for here in the UK.
CSRS-PPP came back with a detailed report. The 95% sigmas were: 2.4cm Lat and 1.3cm Lon. That doesn’t seem bad for two hours of data and the ultra-rapid service. Plus my antenna is getting buffeted by the wind. I’ll try submitting again next week once the Final reference station data is available.
The combined PyGPSClient Preset MSM command is:
"Set RTCM MSM rate; P; QTMCFGMSGRATE; W,RTCM3-107X,1,0; 1; P; QTMCFGMSGRATE; W,RTCM3-108X,1,0; 1; P; QTMCFGMSGRATE; W,RTCM3-109X,1,0; 1; P; QTMCFGMSGRATE; W,RTCM3-112X,1,0; 1",
Hope this helps!
Paul
aahahhh, I see, even the experts are challenged by this
I thought i was getting alzheimers
if you lay this all out every offgrid homesteader will wanna get one of these setups
@PaulZC: Have you ever seen OPUS return a solution for any location in the UK? My expectation is that it would not.
Hi @wjc ,
I haven’t used either OPUS or CSRS-PPP for quite a while. I remember trying OPUS previously and giving up on it in favour of CSRS-PPP. But I can’t remember exactly why… Maybe it just doesn’t cover the UK? I’ll submit again in a few days and will report back.
Cheers,
Paul