Lopy with pytrack, how connect/use GPS?



  • @zceld said in Lopy with pytrack, how connect/use GPS?:

    Thank you very much for the recommendation but using 'microGPS' gives me a lack of memory again.

    When and where do you create microGPS object instance?



  • @zceld LoRa is like a radio in citizen band. Anyone can send messages around and all have to listen to them. So you may receive data from other devices as well.

    Too solve your specific problem you shall set in your receiver blocking to true. This will wait until you reveived a message. If it is false it will not wait to receive a message in line `data = s.recv(64)
    So it will continue with an empty string, because it has not received a message.

    Setting blocking mode to false is useful, if you want to run your loop until you received a certain message. Setting it to true is useful if you want to start the loop after you received a message.

    If you have only nonblocking calls and you want to wait for a message, you have to call it in a loop until something receives. This will need a lot of battery power.

    If you want to run a loop until you receive a certain message and you have only blocking calls, you have to use multi threading to solve this problem. This will not consume much battery power, but it makes your code more complex.



  • @livius
    Thank you very much for the recommendation but using 'microGPS' gives me a lack of memory again.
    0_1516633835702_7.PNG

    On the other hand I do not know if to take advantage of this post or open another one. It is on the subject LoRa that I do not understand very well the programming examples. I am using this one.

    Using a board in sending mode, and another in receiver mode, I do not understand why there are messages sent by LoRa that are lost or not picked up by the receiver.
    This captur reciver:
    0_1516634446145_8.PNG

    transmitter:0_1516634503753_9.PNG
    print:
    identifier-identifier-counter-longitude-latitude

    As you can see in the image of the receiver, it goes from counter 7 to 10 and has lost message 8 and 9

    • issuer code:
    import machine
    import math
    import network
    import os
    import time
    import utime
    import pycom
    from machine import RTC
    from machine import SD
    from machine import Timer
    from L76GNSS import L76GNSS
    from pytrack import Pytrack
    
    from network import LoRa
    import socket                                                                 
    lora = LoRa(mode=LoRa.LORA)                                                  
    s = socket.socket(socket.AF_LORA, socket.SOCK_RAW)                   
    # setup as a station
    
    import gc
    
    time.sleep(2)
    gc.enable()
    
    # setup rtc
    rtc = machine.RTC()
    rtc.ntp_sync("pool.ntp.org")
    utime.sleep_ms(750)
    print('\nRTC Set from NTP to UTC:', rtc.now())
    utime.timezone(7200)
    print('Adjusted from UTC to EST timezone', utime.localtime(), '\n')
    py = Pytrack()
    l76 = L76GNSS(py, timeout=30)
    chrono = Timer.Chrono()
    chrono.start()
    j=0 #accountant
    while (True):
    
        coord = l76.coordinates()
    
        #Codigo Personalizado para enviar por LoRa Posicon:
        x = "witeklab-"+"12345678Z-"+str(j)+"-"+str(coord[0]) + "-"+str(coord[1])
        s.setblocking(True)
        s.send(x)
        print(x)
        time.sleep(2) #Pausa entre toma de coordenadas.
        j=1+j
    

    receiver code:

    from network import LoRa
    import socket
    import machine
    import time
    import pycom
    
    # initialize LoRa in LORA mode
    # more params can also be given, like frequency, tx power and spreading factor
    lora = LoRa(mode=LoRa.LORA)
    
    # create a raw LoRa socket
    s = socket.socket(socket.AF_LORA, socket.SOCK_RAW)
    
    while True:
        # send some data
        for x in range(5):
    
          s.setblocking(False)
          data = s.recv(64)
          time.sleep(0.1)
          print(data)


  • @crumble
    better use existing one
    https://github.com/livius2/micropyGPS
    and exctend it if needed



  • @zceld

    But and the altitude?
    The time can be updated?

    If you look into the code of the library you will see, that only the coordinates are read from the GPS. No altitude and no dateTime.

    The time information is read from WiFi. You will need access to an NTP server.

    The sentence which is used to get the coordinates contains the time as well, but not the date. If you need only the time, you can simply add this to the library.

    For date and time you have to add support for parsing additional NMEA sentences.



  • @zceld said in Lopy with pytrack, how connect/use GPS?:
    touple is not buffered
    you need bytes you can try to cast this as bytes() but for lora better is using pack.
    look at samples about lora in official docs https://docs.pycom.io/

    Time you can update from wifi connection
    by e.g.

    rtc.ntp_sync("pool.ntp.org")
    

    or retrive it from GPS
    or some external device for DCF or MSF



  • @livius
    Well, I have another doubt. I am trying to send the coordinates by LoRa and it gives me the following problem that I do not know how to solve.
    0_1516292916315_6.PNG

    Other questions more:

    print("{} - {} - {}".format(coord, rtc.now(), gc.mem_free()))
    

    This returns (latitude, longitude) - (Real time clock) - free ram
    But and the altitude?
    The time can be updated?



  • @zceld

    Is there anything I can do ?

    You can try to call the garbage collector before and after you read the coordinates.

    The better solution. Implement the GPS stuff by your own and share the code with us. You have to read the stream from the GPS chip into fix allocated buffers and parse them by your own. If you need only the coordinates, it is simple, you will need around 100 lines of code. I stuck with my version :-(. Had no time to work on it.



  • @livius

    Perfect!. working correctly again. I do not understand how a tabulation can give an error. XDD it shows that I am new? Thank you very much again, although I'll probably come back with something else. But good Thanks to your patience as always.





  • @livius said in Lopy with pytrack, how connect/use GPS?:

    @zceld
    Yes, but you have indentation problem
    remember that python work on proper indentation.
    nmea line must be indented

    I suppose you mean this:
    0_1516291578535_5.PNG
    But then how do I fix it?



  • @zceld
    Yes, but you have indentation problem
    remember that python work on proper indentation.
    nmea line must be indented



  • @livius said in Lopy with pytrack, how connect/use GPS?:

    use simple fix for this

    This solution and you told me about it and the thing is that you have to replace lines 74 and 75 with the lines that are in green, right?
    0_1516291101532_4.PNG



  • @zceld

    Apart from the memory issue, I do not know how to solve it

    use simple fix for this
    https://github.com/pycom/pycom-libraries/pull/43/files



  • @seb
    Apart from the memory issue, I do not know how to solve it. I have other doubts to see if you can help me:

    • Every time I run 'gc.mem_gree ()'. Am I occupying memory? More than anything because as you can see in the image is going down the amount of free memory, until I run 'gc.colletct ()' that seems to empty the cache. It is right ? Image:
      0_1516290411473_2.PNG

    -On the other hand, executing 'gc.collect ()' and then executing this code to obtain the coordinates, it seems that I avoid the full memory error, but instead it always stays that way and does not continue until I cancel. The doubt is that I do not know if it is because it does not find GPS today or what happens ...
    code:

    import machine
    import math
    import network
    import os
    import time
    import utime
    from machine import RTC
    from machine import SD
    from machine import Timer
    from L76GNSS import L76GNSS
    from pytrack import Pytrack
    # setup as a station
    
    import gc
    
    time.sleep(2)
    gc.enable()
    
    # setup rtc
    rtc = machine.RTC()
    rtc.ntp_sync("pool.ntp.org")
    utime.sleep_ms(750)
    print('\nRTC Set from NTP to UTC:', rtc.now())
    utime.timezone(7200)
    print('Adjusted from UTC to EST timezone', utime.localtime(), '\n')
    py = Pytrack()
    l76 = L76GNSS(py, timeout=30)
    chrono = Timer.Chrono()
    chrono.start()
    #sd = SD()
    #os.mount(sd, '/sd')
    #f = open('/sd/gps-record.txt', 'w')
      while (True):
         coord = l76.coordinates()
         #f.write("{} - {}\n".format(coord, rtc.now()))
         print("{} - {} - {}".format(coord, rtc.now(), gc.mem_free()))
    

    0_1516290424908_3.PNG



  • @seb
    Good afternoon, I just got back on.
    Seeing that happiness is not forever. Since today again I have not managed to obtain GPS coordinates. I'm back in Windows, I'll mention it, but I do not think the problem comes from here. The story is that he always runs out of memory.0_1516286186039_1.PNG

    Is there anything I can do ?



  • Hi,

    I'm glad you got it working! The out of memory issue is a known problem with the GPS library on our older devices that have less RAM. This is due to the large amount of string data that needs to be processed. The advice is to retry a few times and once it gets a lock it will start working. This library will need to be improved in the future to try fix this.

    It is very interesting that the update via windows didnt work but via mac it did, I will pass this on to the rest of the team.

    Thanks,
    Seb



  • @olliec good luck!



  • @zceld :( yeah I think my error is different.. I'll start a new thread. Thanks anyways!



  • @olliec said in Lopy with pytrack, how connect/use GPS?:

    was there anything else you did other than update PyTrack via your Mac?!

    hello, well, you'll see that the only thing I did was really update, I attached the screenshots of what I did. I honestly do not know why you can fail, surely you can get a hand those who really know. The teachers who have guided me.

    Screenshots:
    0_1516224146742_Captura de pantalla 2018-01-17 22.22.15.png

    0_1516224269789_Captura de pantalla 2018-01-17 22.24.16.png

    Greetings, I will be here attentive to your problem to know how it is solved. luck.


Log in to reply
 

Pycom on Twitter