Pytrack GPS library
-
Hi there!
Can you recommend me a library for pytrack?
What's in the documentation is very basic.
It would be nice to get information some additional information like, time, altitude, speed, Visible satelites, etc?
What library did you used and what was the project?
(I am working on a weather ballon)Thanks! :)
-
@tttadam Hi. Looks like you might have found my
L76micropyGPS.py
useful. Any feedback welcome! I just updated the doco as the issue has been resolved, and I had not updated the README.
-
I found the issue.
I gave my I2C object an ID = 1, and that solved the issue.
-
This post is deleted!
-
@jcaron Fair enough, sorry. :)
This is how my boot.py looks like,
the GPS set up is from line 50 to 60. This part is run alright, expect some rare cases minor issues with the rtc setup:# # this runs first # #TODO: CLEAN IT up, SD Class(inprogress), import pycom import os import math import machine from machine import SD, Pin, UART from pytrack import Pytrack import utime import time import _thread import gc from L76micropyGPS import L76micropyGPS from micropyGPS import MicropyGPS #my classes from rgbsignal import RGBSignal from sdlogger import SDLogger uart = UART(0, baudrate=115200) os.dupterm(uart) #TODO:test it, outsource it runcount = pycom.nvs_get('runcount') print("The current value of the run counter is: "+str(runcount)) pycom.nvs_set('runcount', runcount+1) # this is the led notification class fb = RGBSignal() #the main file will be called machine.main('main.py') #buttonpin = Pin('G17', mode= Pin.IN, pull=Pin.PULL_UP) #button pin on expansion board buttonpin = Pin('G4', mode= Pin.IN, pull=Pin.PULL_UP) #button pin on pytrack board start = True print("Push the button for start booting") #def message(self, color="cyan", interval=0.5, iteration=3): _thread.start_new_thread(fb.message, ["cyan",0.1,0.3]) while start: utime.sleep_ms(10) if buttonpin() == 0: start = False _thread.start_new_thread(fb.startup, []) print("Boot file process is started.") gc.enable() print("GC is enabled") print("Free Mem: {}".format(gc.mem_free())) #Setting up the gps: py = Pytrack() my_gps = MicropyGPS(local_offset=1,location_formatting='dd') L76micropyGPS = L76micropyGPS(my_gps, py) gpsThread = L76micropyGPS.startGPSThread() print("Waiting for gps signal") counter = 0 while (my_gps.timestamp == (0, 0, 0)): print("Waiting for gps signal: "+str(counter)+" "+str(my_gps.date)+" "+str(my_gps.timestamp)) counter +=1 time.sleep(2) time.sleep(4) print("Date: "+str(my_gps.date)) print("GPS signal is found") print("Time: "+str(my_gps.timestamp)) time.sleep(2) print(my_gps.date[0]) print(my_gps.date[1]) print(my_gps.date[2]) print("Setting up the RTC") rtc = machine.RTC() print("RTC before init: {}".format(rtc.now())) dateYear = int(str(20) + str(my_gps.date[2])) rtc.init((dateYear, my_gps.date[1], my_gps.date[0], my_gps.timestamp[0], my_gps.timestamp[1], int(my_gps.timestamp[2]), 0, 0)) #seting up the rtc print("RTC is set : {}".format(rtc.now())) #Create logstructure after GPS initalizaed dataLogger = SDLogger(uart) dataLogger.sdFormat() foldername = str("Flight_"+ str(runcount)+"_"+ str(dateYear)+"-"+ str(my_gps.date[1])+"-"+ str(my_gps.date[0])+"_"+ str(my_gps.timestamp[0])+"-"+ str(my_gps.timestamp[1])+"-"+ str(int(my_gps.timestamp[2]))) dataLogger.createFolder(foldername) logfilename = str("LogOfRun"+"_"+ str(runcount)+"_"+ str(dateYear)+"-"+ str(my_gps.date[1])+"-"+ str(my_gps.date[0])+"_"+ str(my_gps.timestamp[0])+"-"+ str(my_gps.timestamp[1])+"-"+ str(int(my_gps.timestamp[2]))) logheader = "TimeStamp;GPSTimeStamp;Sensor;Value;Location" dataLogger.creatLogFile(logheader,logfilename) # #TODO: Create separate log for sytemlog, telemetry, and sensor data
After the boot.py main.py is next, This fails at line 30, when I create the I2C object. With an OSError: I2C bus error in L76micropyGPS.py at line 54.
from machine import I2C, Pin, UART import machine from SI7021 import SI7021 import gc import _thread #my classes from rgbsignal import RGBSignal from sdlogger import SDLogger start = True buttonpin = Pin('G4', mode= Pin.IN, pull=Pin.PULL_UP) #button pin on pytrack board _thread.start_new_thread(fb.message, ["yellow",0.1,3]) print("Push the button for start main") while start: time.sleep_ms(10) if buttonpin() == 0: start = False _thread.start_new_thread(fb.startup, []) print("Main has started") print("Free Mem: {}".format(gc.mem_free())) i2c=I2C(0, I2C.MASTER) print(i2c.scan())
-
@tttadam unless you provide the full code you are using and full details of what is connected where there’s very little chance anybody is going to be able to help you.
-
I am having some issues with L76micropyGPS.py library, if I want to use the I2C.
When I create an I2C object in the main.pyi2c=I2C(0, I2C.MASTER)
I got an OSError: I2C bus error in L76micropyGPS.py at line 54.
I think it because me and the library both want to use I2C. But I would like to work with a temperature sensor wich communicates in I2C, and later I would like to chain other envirement sensors (as far as I know I can use multiple external sensor on the same pins. )
-
@jcaron Thank you.
-
@tttadam micropyGPS does not handle the I/O, it's up to you to feed it the data using the
update
function.You'll find an example here: https://github.com/gregcope/L76micropyGPS
The core of it is really just:
while True: # get some NMEA data someNmeaData = str(self.i2c.readfrom(GPS_I2CADDR, 128)) # Pass NMEA data to micropyGPS object for x in someNmeaData: self.my_gps.update(str(x)) time.sleep(0.25)
-
@jcaron Yes you are right, I wasn't profound enough.
micropyGPS looks really powerful. However, It's not clear for me how to use it.
Because this library for uart, but pytrack use I2c am I missing something?
Is there a sample code where I can start? micropyGPS use predifined gps sentences.
Thanks in advance.
-
You may want to get a look at:
- https://github.com/inmcm/micropyGPS
- https://github.com/andrethemac/L76GLNSV4/blob/master/L76GNSV4.py
Note that both are linked to in the Pytrack examples page.