SlashDevin / NeoGPS

NMEA and ublox GPS parser for Arduino, configurable to use as few as 10 bytes of RAM
GNU General Public License v3.0
707 stars 195 forks source link

Issue with gps.satellies[i] #81

Closed mabbotts9797 closed 6 years ago

mabbotts9797 commented 6 years ago

According to the docs you may access more detailed information regarding satellites with the gps.satellies[] array. I have tried to loop through the elements of the array but this fails with:

class NMEAGPS' has no member named 'satellies'

I also tried gps.satellites but this also fails.

Is there a specific way I am supposed to be going about this?

SlashDevin commented 6 years ago

You must enable these members with several configuration items. In NMEAGPS_cfg.h:

#define NMEAGPS_PARSE_GSV

#define NMEAGPS_PARSE_SATELLITES
#define NMEAGPS_PARSE_SATELLITE_INFO

The GSV sentences provide this information, so they must be parsed. The two SATELLITES defines enable the satellites array in the gps object.

You must also configure the GPS device to send the GSV sentences. Different brands have different commands that you send to them.

Try the NMEAGSV.ino example program for the exact techniques. It will not build until you have the configuration correct.

mabbotts9797 commented 6 years ago

Thanks! Managed to get it working. Much appreciated. As for the satellite ID's... How do I go about looking those up? Is the ID a standard identifier in some sort of lookup system? For example a NORAD ID?

SlashDevin commented 6 years ago

There is no "standard" ID that applies to all Global Navigation Satellite Systems (GNSS's). Each system has its own list of satellite IDs (start here).

However, GPS device manufacturers have their own way of reporting which satellites are being used. You would have to look at the device spec to see if (1) your device supports multiple GNSS's, and (2) how satellites are numbered in the GSV sentences.

Complicating the issue is the NMEA "Talker ID". Most applications expect to receive sentences like GPRMC, GPGGA or GPGSV. The first two characters actually identify which GNSS is "talking". For those sentences, GPS is the talker. The device could have sent GLRMC for information derived from the GLONASS satellites. It may even send GNRMC, which means "multiple GNSS's" were used to produce the RMC information. There are ways to distinguish this in NeoGPS.

If your device can produce GNGSV sentences, it must have a way of numbering the satellites distinctly. This is specified by the device manufacturer.

Which GPS device are you using?

mabbotts9797 commented 6 years ago

Thanks for the information. I guess it was naive to assume there would be some common standard. I am using the ublox NEO-6M-0-001 GPS module. I have just downloaded the datasheet so hopefully, it can shed some light on the issue at hand.

mabbotts9797 commented 6 years ago

Page 60 on this datasheet states the identifier used is SV(N). The exact quote:

The SV Numbers (Fields 'Sv') are in the range of 1 to 32 for GPS satellites, and 33 to 64 for SBAS satellites (33 = SBAS PRN 120, 34 = SBAS PRN 121, and so on)

I think this means I can look up the IDs using the SVN column here.