from microbit import * def initGPS(): uart.init(baudrate=9600, bits=8, parity=None, stop=1, tx=pin14, rx=pin0) sleep(500) INIT_SEQUENCE_RMC = [ b"\xB5\x62\x06\x08\x06\x00\x20\x4E\x01\x00\x01\x00\x84\x00\xB5\x62\x06\x08\x00\x00\x0E\x30", # Frequence b"\x24\x45\x49\x47\x50\x51\x2c\x44\x54\x4d\x2a\x33\x42\x0d\x0a\xb5\x62\x06\x01\x03\x00\xf0\x0a\x00\x04\x23", # Disable GPDTM b"\x24\x45\x49\x47\x50\x51\x2c\x47\x42\x53\x2a\x33\x30\x0d\x0a\xb5\x62\x06\x01\x03\x00\xf0\x09\x00\x03\x21", # Disable GPGBS b"\x24\x45\x49\x47\x50\x51\x2c\x47\x47\x41\x2a\x32\x37\x0d\x0a\xb5\x62\x06\x01\x03\x00\xf0\x00\x00\xfa\x0f", # Disable GPGGA b"\x24\x45\x49\x47\x50\x51\x2c\x47\x52\x53\x2a\x32\x30\x0d\x0a\xb5\x62\x06\x01\x03\x00\xf0\x06\x00\x00\x1b", # Disable GPGRS b"\x24\x45\x49\x47\x50\x51\x2c\x47\x53\x41\x2a\x33\x33\x0d\x0a\xb5\x62\x06\x01\x03\x00\xf0\x02\x00\xfc\x13", # Disable GPGSA b"\x24\x45\x49\x47\x50\x51\x2c\x47\x53\x54\x2a\x32\x36\x0d\x0a\xb5\x62\x06\x01\x03\x00\xf0\x07\x00\x01\x1d", # Disable GPGST b"\x24\x45\x49\x47\x50\x51\x2c\x47\x53\x56\x2a\x32\x34\x0d\x0a\xb5\x62\x06\x01\x03\x00\xf0\x03\x00\xfd\x15", # Disable GPGSV b"\x24\x45\x49\x47\x50\x51\x2c\x47\x4c\x4c\x2a\x32\x31\x0d\x0a\xb5\x62\x06\x01\x03\x00\xf0\x01\x00\xfb\x11", # Disable GPGLL b"\x24\x45\x49\x47\x50\x51\x2c\x56\x54\x47\x2a\x32\x33\x0d\x0a\xb5\x62\x06\x01\x03\x00\xf0\x05\x00\xff\x19", # Disable GPVTG b"\x24\x45\x49\x47\x50\x51\x2c\x5a\x44\x41\x2a\x33\x39\x0d\x0a\xb5\x62\x06\x01\x03\x00\xf0\x08\x00\x02\x1f", # Disable GPZDA b"\x24\x45\x49\x47\x50\x51\x2c\x52\x4d\x43\x2a\x33\x41\x0d\x0a\xb5\x62\x06\x01\x03\x00\xf0\x04\x01\xff\x18" # Enable GPRMC ] INIT_SEQUENCE_ALL = [ b"\xB5\x62\x06\x08\x06\x00\x20\x4E\x01\x00\x01\x00\x84\x00\xB5\x62\x06\x08\x00\x00\x0E\x30", # Frequence b"\x24\x45\x49\x47\x50\x51\x2c\x44\x54\x4d\x2a\x33\x42\x0d\x0a\xb5\x62\x06\x01\x03\x00\xf0\x0a\x01\x05\x24",#Enable_GPDTM b"\x24\x45\x49\x47\x50\x51\x2c\x47\x42\x53\x2a\x33\x30\x0d\x0a\xb5\x62\x06\x01\x03\x00\xf0\x09\x01\x04\x22",#Enable_GPGBS b"\x24\x45\x49\x47\x50\x51\x2c\x47\x47\x41\x2a\x32\x37\x0d\x0a\xb5\x62\x06\x01\x03\x00\xf0\x00\x01\xfb\x10",#Enable_GPGGA b"\x24\x45\x49\x47\x50\x51\x2c\x47\x4c\x4c\x2a\x32\x31\x0d\x0a\xb5\x62\x06\x01\x03\x00\xf0\x01\x01\xfc\x12",#Enable_GPGLL b"\x24\x45\x49\x47\x50\x51\x2c\x47\x52\x53\x2a\x32\x30\x0d\x0a\xb5\x62\x06\x01\x03\x00\xf0\x06\x01\x01\x1c",#Enable_GPGRS b"\x24\x45\x49\x47\x50\x51\x2c\x47\x53\x41\x2a\x33\x33\x0d\x0a\xb5\x62\x06\x01\x03\x00\xf0\x02\x01\xfd\x14",#Enable_GPGSA b"\x24\x45\x49\x47\x50\x51\x2c\x47\x53\x54\x2a\x32\x36\x0d\x0a\xb5\x62\x06\x01\x03\x00\xf0\x07\x01\x02\x1e",#Enable_GPGST b"\x24\x45\x49\x47\x50\x51\x2c\x47\x53\x56\x2a\x32\x34\x0d\x0a\xb5\x62\x06\x01\x03\x00\xf0\x03\x01\xfe\x16",#Enable_GPGSV b"\x24\x45\x49\x47\x50\x51\x2c\x52\x4d\x43\x2a\x33\x41\x0d\x0a\xb5\x62\x06\x01\x03\x00\xf0\x04\x01\xff\x18",#Enable_GPRMC b"\x24\x45\x49\x47\x50\x51\x2c\x56\x54\x47\x2a\x32\x33\x0d\x0a\xb5\x62\x06\x01\x03\x00\xf0\x05\x01\x00\x1a",#Enable_GPVTG b"\x24\x45\x49\x47\x50\x51\x2c\x5a\x44\x41\x2a\x33\x39\x0d\x0a\xb5\x62\x06\x01\x03\x00\xf0\x08\x01\x03\x20",#Enable_GPZDA ] for i in INIT_SEQUENCE_RMC: uart.write(i) sleep(100) uart.init(115200) # on redonne la main pour la communication USB def saveFile(): global noFile noFile += 1 with open("gps{:02d}.csv".format(noFile),'wt') as myCSV : for m in listeNMEA: if m != "" and m[0] == '$': if m[-1] == "\n": myCSV.write(m) else: myCSV.write(m+"\n") myCSV.close() listeNMEA.clear() # Debut du programme initGPS() # Variables globales msg="" listeNMEA=[] captureMode=False display.show(Image.HAPPY) noFile=0 while True: if button_a.was_pressed(): # Bouton a : change le mode capture captureMode = not captureMode if captureMode: uart.init(baudrate=9600, bits=8, parity=None, stop=1, tx=pin14, rx=pin0) display.show(Image.TARGET) msg="" else: saveFile() uart.init(115200) display.show(Image.HAPPY) if button_b.was_pressed(): # Affiche l'etat display.show(len(listeNMEA)) sleep(1000) display.show(Image.TRIANGLE) sleep(500) display.show(noFile) sleep(1000) if captureMode: display.show(Image.TARGET) else: display.show(Image.HAPPY) if captureMode : if uart.any(): incoming = uart.readline().format("%s") sp=incoming.split("$") msg += sp[0] if len(sp)>1: for m in sp[1:]: listeNMEA.append(msg) msg="$"+m if len(listeNMEA)>20: saveFile()