Visserslatijn

29 november 2014

GPS track opslaan

Filed under: Geen categorie — visserslatijn @ 17:28

De hardware werkte al tijden en nu ook de code werkt,  werd het tijd om een professionele opstelling te maken en er mee naar buiten te gaan. De BeagleBoneBlack en de GPS module hebben 5V nodig en flink wat mA. Twee lipo batterijen parallel en een dc-dc convertor uit China regelen dat deel.

Nu nog een stabiele behuizing……. ok, elastiekjes werken ook.

IMG_4720

De laatste code:


#!/usr/bin/python3

import serial
import xml.etree.ElementTree as ET

# global varables
ser = 0

#init serialport
def init_serial():
	global ser
	ser = serial.Serial()
	ser.baudrate = 115200
	ser.port = '/dev/ttyUSB0'
	ser.timeout = 1
	ser.open()
	if ser.isOpen():
		print ("open: " + ser.name)

#setup
init_serial()

#main

tijd = ""
latitude = ""
longitude = ""
datum = ""
bestandsnaam = ""
gpsfix = 0
seconde = 0
opslaan = 0
nieuwefile = 1
sluitfile = 0

while 1:
	bytes = ser.readline()
	bytes = bytes.decode("utf-8")
	if '$GNGGA' in bytes:
		lijst = bytes.split(",")
		if lijst[6] == "1":		# gps fix
			gpsfix = 1
			tijd = lijst[1]
			seconde = int(tijd[4:6])
			tijd = datum + tijd[0:2] + ":" + tijd[2:4] + ":" + tijd[4:6] + "Z"

			latitude = lijst[2] + " " + lijst[3]
			latitude1 = int(latitude[0:2])
			latitude2 = latitude[2:10]
			latitude2 = float(latitude2)
			latitude2 = latitude2 / 60
			latitude = format((latitude1 + latitude2), '.6f')

			longitude = lijst[4] + " " + lijst[5]
			longitude1 = int(longitude[0:3])
			longitude2 = float(longitude[3:10]) / 60
			longitude = format((longitude1 + longitude2), '.6f')

#			print (seconde)
			if seconde == 0:
				nieuwefile = 1
			if seconde == 59:
				sluitfile = 1
			if (seconde % 2) == 0:
				opslaan = 1
		else:
			gpsfix = 0
			print ('no fix yet')

	if '$GNZDA' in bytes:
		lijst = bytes.split(",")
		datum = lijst[4] + "-" +  lijst[3] + "-" + lijst[2] + "T"

	if ((gpsfix == 1) and (opslaan == 1)):

		if sluitfile == 1:
			tree = ET.ElementTree(root)
			tree.write('/home/debian/' + tijd + '.gpx')
			sluitfile = 0

		if nieuwefile == 1:
			root = ET.Element('gpx')
			trk = ET.SubElement(root, 'trk')
			trkseg = ET.SubElement(trk, 'trkseg')
			nieuwefile =0

		trkpt = ET.SubElement(trkseg, 'trkpt')
		trkpt.set('lat', latitude)
		trkpt.set('lon', longitude)
		trkpt.text = ''
		time = ET.SubElement(trkpt, 'time')
		time.text = tijd
		opslaan = 0

#end

Dit stukje uit de code is alles dat nodig is voor het maken van de xml file (.gpx)

elementtree2-xml

En dan natuurlijk het eveneens professionele resultaat:

elementtree-track

Er worden steeds stukjes (gpx files) met één minuut track opgeslagen, die heb ik met de hand aan elkaar geplakt en het zou best kunnen dat het deel met de elkaar kruisende lijnen verkeerd om in elkaar is gezet. Maar verder is het exact zoals het uit de GPX logger is gekomen. Nooit geweten dat ik door huizen heen kon lopen….

EDIT: Het blijkt dat de HDMI interface van de BeagleBoneBlack flink kan storen in het frequentie gebied van GPS apparatuur. Eens zien of ik dat kan uitschakelen.

Advertisements

Geef een reactie »

Nog geen reacties

RSS feed for comments on this post. TrackBack URI

Geef een reactie

Vul je gegevens in of klik op een icoon om in te loggen.

WordPress.com logo

Je reageert onder je WordPress.com account. Log uit / Bijwerken )

Twitter-afbeelding

Je reageert onder je Twitter account. Log uit / Bijwerken )

Facebook foto

Je reageert onder je Facebook account. Log uit / Bijwerken )

Google+ photo

Je reageert onder je Google+ account. Log uit / Bijwerken )

Verbinden met %s

Maak een gratis website of blog op WordPress.com.

%d bloggers liken dit: