Receptor de GPS Bluetooth (Python)

Posted by Miguel Lopes on Sun, Dec 26, 2010
In Programação, Python, Scripts,

Um dos projectos no qual estou actualmente a trabalhar requer que eu trabalhe com dispositivos GPS e coordenadas.

No processo de desenvolvimento do projecto necessitei de um programa/script que fosse capaz de obter algumas informações dadas por um receptor de GPS Bluetooth.

O dispositivo em questão utilizava o protocolo NMEA 0183, e neste caso a ligação bluetooth é gerida pelo SO, deixando o dispositivo ligado numa porta serial virtual, permitindo-nos conectar e recolher informações.

import time, serial

def main():
#variáveis para guardar as informações que nos interessam.
		lat=""
		lon=""
		ns=""
		ew=""
		nr_sats=""
		alti=""
		velocidade=""
		ser = serial.Serial(
			port='/dev/tty.CBTGPS32-SPPslave',# é o dispositivo que estou a usar muda de caso para caso
			baudrate=4800,
			parity=serial.PARITY_NONE,
			stopbits=serial.STOPBITS_ONE,
			bytesize=serial.EIGHTBITS
		)

		ser.open()#abrir a ligação com o dispositivo
		time.sleep(2)
		out = ""

		while 1 :
			out += ser.readline(1)# ler infos do dispositivo (ver informações sobre o protocolo)

			if out[:3] == '$GP' and out[len(out)-2:] == '\r\n':
				if(out[3:6] == 'RMC'):
					divs = out.split(',')

					lat = divs[3]
					lon = divs[5]
					ns = divs[4]
					ew = divs[6]
					time.sleep(5)				

				if(out[3:6] == 'VTG'):
					divs = out.split(',')
					velocidade = divs[7]
				if(out[3:6] == 'GGA'):
					divs = out.split(',')
					alti = divs[9]
					nr_sats = divs[7]
				out = ""
			if(lat!="" and lon!="" and ns!="" and ew!="" and nr_sats!="" and alti!="" and velocidade!=""):
				print lat
				print lon
				print nr_sats
				print alti
				print velocidade
				lat=""
				lon=""
				ns=""
				ew=""
				nr_sats=""
				alti=""
				velocidade=""

		ser.close()
		return true;	

if __name__ == "__main__":
    main()
 Referências

Protocolo NMEA



comments powered by Disqus