Pytrack GPS API
-
From the GPS only longitude and latitude is available via the API. For production use many other data is required, like
- altitude
- date/time
- HDOP
- speed
- direction
- number of satellites visible /used for fix
- ...
Please add these to the API. Also, it would be good to make raw NMEA sentences available for user space with user filtering to select which sentences must be passed (callback?).
-
I have done more testing and the call is actually working, I'm just not able to catch the confirmation reply.
@jcaron Thanks for the suggestion with the PMTK353. I changed these around and discovered my antenna is not reading anything but GPS. When I turn on Glonass only, I get nothing returned, so I must have a hardware issue.
-
@Alex-Dew I believe that should work. You should also be able to use
_send_message
(which will add the$
,*
, checksum, and\r\n
) or even_query_pmtk
which will be able to tell you the return status of the command.To get more updates more quickly you need to increase the update rate.
An alternative is to use a different library like https://github.com/inmcm/micropyGPS which parses all data it receives and remembers it, so when you query you get the latest info. You'll need to add a loop to feed it the data from I2C, though.
-
@jcaron Thanks for the suggestion. I'll try those out.
Another thing I have been looking into is having the GPS only report RMC and GGA and not report the others (i thought that may give faster updates...).
I added the following to the init in the L76NSV4 and when I do debug, I'm still seeing other sentences. Is this how (and where) I would also run those commands you suggested?:
self.rmc = bytearray('$PMTK314,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*29\r\n') self.i2c.writeto(GPS_I2CADDR, self.rmc)
-
@Alex-Dew Don't own a Pytrack, but a few things you could explore:
-
Try changing the networks (GPS or Glonass) to use with:
$PMTK353,0,1*36
: search GLONASS satellites only$PMTK353,1,0*36
: search GPS satellites only$PMTK353,1,1*37
: search GLONASS and GPS satellites
The chip reports differently depending on which network(s) are locked, there may be other changes in behaviour due do that. It's possible that depending on the lock it obtained first it will report satellites differently (i.e. only report one set of satellites or the other).
-
Like all GNSS chips, it needs quite a bit of time when cold starting because it needs to wait for quite a bit of information from the satellites (which send it VERY slowly, and the less satellites are visible, the longer it takes) before it can find them or use them. GNSS chips can save some of the information for later "warm starts" or "hot starts", but many (and I believe it's the case of the L76) use RAM, not flash for this, which means the chip needs to be constantly powered (though it can be in a very low power mode). Some GPS boards include a small battery for this purpose, this is not the case of the Pytrack. I don't know which Adafruit GPS board you are using, but several of those have a battery.
-
-
I understand your issue, but I cannot be conclusive about what is causing this. There's both different hardware and software on the adafruit GPS (not sure which make and model you're talking about there) and the Pytrack that can have effect on the GPS reception and signal handling, next to that, they probably use a different antenna as well, making the direct comparison even more difficult.
There's plenty of GPS systems out there, all with different price points and capabilities and its hard to do a 1 on 1 comparison between different modules.
-
@Gijs Thanks for your reply. I have been following what @Neuromystix and @andrethemac have been doing and it looks like there is also a check in L76GNSV4.py for the 2nd character.
I feel like there is something missing, because one day, sitting at my desk inside, I got between 8 and 10 satellites (even 12 at one point) on the pytrack, just like I consistently do for the Adafruit gps, but then most of the time I struggle to get 3 satellites on the pytrack in the same spot and it takes forever to get data returned from the messages.
-
I had a short discussion with someone here: https://github.com/pycom/pycom-libraries/pull/143 where they used an undocumented message ID to improve fix time. I did not yet get around to testing that, but perhaps it can help you out
-
@Neuromystix Did you ever figure out a way to get faster fixes? Is it really just a hardware issue or is there some programming that can make it faster?
-
@bmarkus HDOP can be recalculated to meters. So, an accuracy is a function of HDOP.
-
@johncaipa said in Pytrack GPS API:
@bmarkus I am not an expert in this topic, I need to send the coordinate and accuracy as possible in my project, plus some way to detect when it is moving to send the message. If that parameter HDOP works for me, I'll keep it in mind.
There are no accuracy available in terms of meters. HDOP is a factor in determining the relative accuracy of a horizontal position. The smaller the DOP number, the better the geometry.
-
@bmarkus I am not an expert in this topic, I need to send the coordinate and accuracy as possible in my project, plus some way to detect when it is moving to send the message. If that parameter HDOP works for me, I'll keep it in mind.
-
@johncaipa said in Pytrack GPS API:
@andrethemac Hi, Is there any way to have the accuracy value of each GPS fix? when my pytrack is stationary the accuracy of each point is very different
Do you mean HDOP?
-
@andrethemac Hi, Is there any way to have the accuracy value of each GPS fix? when my pytrack is stationary the accuracy of each point is very different
-
This post is deleted!
-
@stefan85e I'm up to 5 minutes now (timeout=300)
when your outside you'll get a fix a lot faster
-
@andrethemac Okay thanks... what time are you using!?
-
@stefan85e yes.
maybe of interest. I have 2 pytrack board and testing them side by side I found out that 1 takes way longer to get a fix, almost double as long.
So you need to tweak the timeout parameter to get the best results for your module.
best regards
-
@andrethemac Like this?
-
some tweaks to my library https://github.com/andrethemac/L76GLNSV4
methods returning multiple values now return them as a dict;