date and timw is got from GPZDA, not all GPS get that NMEA. Lat and Lon is got from GPRMC, all the NMEA messages are the same in structure, it depends on the device, RMC should be obtainable on every device
@CAProjects we have an RTC inside the pi-top [4] but I’m not sure we’ve made it accessible yet - would it be useful to have that for your project?
not for GPS since GPS uses GPS sats to sync its RTC, it may come in handy for somehting else later down the line tho.
@duwudi does pi-topOS support PPS? if not, no worriesjust wanted to play around with it
@CAProjects remind me what PPS stands for? It’s our acronym for pi-top Production System internally so I’m blanking
PPS means pulse per second. It’s used to sync time mostly but can be used for a lot of things.
Can think of it like a sort of time code
Hi @CAProjects
Hope all is well.
I wanted to ask for your help if possible please with the following. Just bought a multiconstelation GPS unit and would love to make use of the code you share with us. Checking gpsmon outputs the following nmea list:
GNRMC
GNVTG
GNGGA
GNGSA
GPGSV
GLGSV
GNGLL
GNGST
GNZDA
GNGBS
Unfortunately for me, none of these are in the nmea decode portion of the code and don’t have any ideea how to write the code to decode these sentences. Would you be able to help me with a few from the above list so that I can display the same info as you?
Have posted a picture in case anyone else would want a similar gps unit on their pitop:
Many thanks,
Luis
‘$GPGGA’, ‘$GPGSA’, ‘$GPRMC’, ‘$GPZDA’ all get decoded but please note its coded to get the information I want. in the function def nmeaDecode(data):
is the code to extract the data from ‘$GPGGA’, ‘$GPGSA’, ‘$GPRMC’, ‘$GPZDA’. you also need to add the sentences you want to decode to this line nmea_list = ['$GPGGA', '$GPGSA', '$GPRMC', '$GPZDA']
otherwise it will ignore them
you need to add an elif there for what ever sentence you want to add to get the information along with the code puting the information in to nmea_dict so that it returns to display on the screen. you will also need to edit the code in def nmea_display(data): to display tin information you want. please note that this does not ise the miniscreen buttons as this code was just to get the GPS info and display it.
to understand NMEA i highly recommend looking at this
http://aprs.gids.nl/nmea/
This explains what all the NMEA data actually is.
I am not going to write the code for you as there is enough information in the example code i have provided along with the useful links in the GitHub repo to code what your needing
Many thanks for your reply and for the pointers on how to get this sorted. Much appreciated!
I am working on a Further Challenge for working with GPS and should hopefully finish it today and will get the pitop team to review it for making it public
The RTC for the pi-top would be nice eventually. After first starting it, if the pi-top takes longer than usual to update the time, when using some sites you get a clock out of sync warning and no site when using https.
got PPS working, was rather simple
Added dtoverlay=pps-gpio,gpiopin=4
to /boot/config.txt and installed pps-tools, connected adafruit Ultimate GPS v3 PPS pin to GPIO pin 4, rebooted and run the command sudo ppstest /dev/pps0
and got this response (its good)
(env3) pi@pi-top:~/Documents/gps_test $ sudo ppstest /dev/pps0
trying PPS source "/dev/pps0"
found PPS source "/dev/pps0"
ok, found 1 source(s), now start fetching data...
source 0 - assert 1614297142.992461566, sequence: 460 - clear 0.000000000, sequence: 0
source 0 - assert 1614297143.992469645, sequence: 461 - clear 0.000000000, sequence: 0
source 0 - assert 1614297144.992472627, sequence: 462 - clear 0.000000000, sequence: 0
source 0 - assert 1614297145.992469306, sequence: 463 - clear 0.000000000, sequence: 0
source 0 - assert 1614297146.992476382, sequence: 464 - clear 0.000000000, sequence: 0
source 0 - assert 1614297147.992472796, sequence: 465 - clear 0.000000000, sequence: 0
source 0 - assert 1614297148.992470637, sequence: 466 - clear 0.000000000, sequence: 0
source 0 - assert 1614297149.992471604, sequence: 467 - clear 0.000000000, sequence: 0
source 0 - assert 1614297150.992470638, sequence: 468 - clear 0.000000000, sequence: 0
i guess it was added to the Raspbery Pi OS kernal, from things i read before you had to modify the kernal or remake the kernal to enable it
Dude, nice! I guess it just needs to be implemented so the internal clock stays updated. Have you figured out how to apply it to the GPS without an RTC module?
yeah the adafruit has a battery to keep the RTC alive on the device so i have a battery on the board for that
Ok gotcha… I thought this was the internal RTC in the pi-top.