#!/usr/bin/python3 #B. Vandeportaele 03/2020 import serial import os import math import time #premier paramètre pour le nom du port série, /dev/ttyUSB0 par défaut import sys if len(sys.argv)==2: serialport=sys.argv[1] else: serialport='/dev/ttyUSB0' print("using port: "+str(serialport)) #TODO: with pour permettre debug sans port série? ser = serial.Serial( port=serialport,\ baudrate=4800,\ parity=serial.PARITY_NONE,\ stopbits=serial.STOPBITS_ONE,\ bytesize=serial.EIGHTBITS,\ timeout=1) ####################################### def partie_fractionnaire(f, nbdigits): f=f-math.floor(f) while (nbdigits>0): f=f*10 nbdigits=nbdigits-1 return math.floor(f) ####################################### def partie_entiere( f): return math.floor(f) ####################################### def SendGPRMC( time, lat, lon): if (lat>0): NS='N'; else: NS='S'; lat=-lat; if (lon>0): EW='E'; else: EW='W'; lon=-lon; chaine="GPRMC,"+str(partie_entiere(time))+"."+str(partie_fractionnaire(time,2))+',A,'+str(partie_entiere(lat))+"."+str(partie_fractionnaire(lat,5))+","+str(NS)+","+str(partie_entiere(lon))+"."+str(partie_fractionnaire(lon,5))+","+str(EW)+",,,," # sprintf(chaine, "$GPRMC,%ld.%02ld,A,%ld.%05ld,%c,%ld.%05ld,%c,,,,,,*",partie_entiere(time),partie_fractionnaire(time,2),partie_entiere(lat),partie_fractionnaire(lat,5),NS,partie_entiere(lon),partie_fractionnaire(lon,5),EW); octets = bytearray() octets.extend(map(ord, chaine)) sum=0 for b in octets: #print(b) sum=sum^b #print("sum:"+str(sum)) chaine='$'+chaine+"*"+"{:02X}".format(ord(bytes([sum])))+"\n\r" #somme de controle sur 2 digits en majuscules octets = bytearray() octets.extend(map(ord, chaine)) return octets ####################################### while True: #a=3.14159 #print(str(partie_entiere(a))+','+str(partie_fractionnaire(a, 4))) currenttime=int(time.strftime("%H%M%S", time.localtime())) data=SendGPRMC(currenttime,4338.6124 ,00126.7337) print(data) ser.write(data) #"(line+"\r\n").encode("utf8")) #"serial.LF.write(data) time.sleep(0.1)