Visserslatijn

23 november 2014

Bitbanging een XML document

Filed under: Geen categorie — visserslatijn @ 21:18

Zoals een GPIO-port door bitbanging kan veranderen in een seriele port, zo heb ik een xml document in elkaar geknutseld door strings achter elkaar te plakken en in een bestand op te slaan. Het werkt, maar fraai is het niet.

bitbang-xml

ElementTree is een betere oplossing denk ik, maar ik snap het (nog) niet.

Het resultaat:

gpx-manual

20 november 2014

Beter voorbeeld

Filed under: Geen categorie — visserslatijn @ 21:04

Dit is wat Google Earth minimaal nodig heeft om nog een track weer te geven.

gpx-minimaal

18 november 2014

Dit moet veranderen in dat.

Filed under: Geen categorie — visserslatijn @ 23:06

Het loggen werkt betrouwbaar en op de achtergrond, de code:

 


import serial

# 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
word1 = "$GNGGA"
word2 = "$GNZDA"

tijd = ""
latitude = ""
longitude = ""
datum = ""

gpsfix = 0
seconde = 0
opslaan = 0

while 1:
	bytes = ser.readline()
	bytes = bytes.decode("utf-8")
	if word1 in bytes:
		lijst = bytes.split(",")
		if lijst[6] == "1":		# gps fix
			gpsfix = 1
			tijd = lijst[1]
			latitude = lijst[2] + " " + lijst[3]
			longitude = lijst[4] + " " + lijst[5]
			satelliet = lijst[7]
			
			seconde = int(tijd[4:6])
			if seconde == 0:
				opslaan = 1

			tijd = tijd[0:2] + ":" + tijd[2:4] + ":" + tijd[4:6]
			latitude = latitude[0:2] + chr(176) + latitude[2:]
			longitude = longitude[0:3] + chr(176) + longitude[3:]
		else:
			gpsfix = 0

	if gpsfix == 1:
		if word2 in bytes:
			lijst = bytes.split(",")
			datum = lijst[4] + "-" +  lijst[3] + "-" + lijst[2]

	if gpsfix == 1 and opslaan == 1:
		opslaan = 0
		with open ("/media/sdcard/output.txt", "a", encoding='utf8') as bestand:
			bestand.write(datum)
			bestand.write(", ")
			bestand.write(tijd)
			bestand.write(", ")
			bestand.write(latitude)
			bestand.write(", ")
			bestand.write(longitude)
			bestand.write("\n") 
#end

De output ziet er zo uit:

2014-11-18, 19:34:00, 52°13.1973 N, 004°30.3781 E
2014-11-18, 19:35:00, 52°13.1973 N, 004°30.3781 E
2014-11-18, 19:36:00, 52°13.1973 N, 004°30.3781 E
2014-11-18, 19:37:00, 52°13.1973 N, 004°30.3781 E
2014-11-18, 19:38:00, 52°13.1973 N, 004°30.3781 E
2014-11-18, 19:39:00, 52°13.1973 N, 004°30.3781 E
2014-11-18, 19:40:00, 52°13.1973 N, 004°30.3781 E
2014-11-18, 19:41:00, 52°13.1973 N, 004°30.3781 E
2014-11-18, 19:42:00, 52°13.1973 N, 004°30.3781 E
2014-11-18, 19:43:00, 52°13.1973 N, 004°30.3781 E
2014-11-18, 19:44:00, 52°13.1973 N, 004°30.3781 E
2014-11-18, 19:45:00, 52°13.1973 N, 004°30.3781 E
2014-11-18, 19:46:00, 52°13.1973 N, 004°30.3781 E
2014-11-18, 19:47:00, 52°13.1973 N, 004°30.3781 E
2014-11-18, 19:48:00, 52°13.1973 N, 004°30.3781 E
2014-11-18, 19:49:00, 52°13.1973 N, 004°30.3781 E
2014-11-18, 19:50:00, 52°13.1973 N, 004°30.3781 E

Maar ik wil er iets zoals dit van maken:

gpxcode

(het lukte niet om het als tekst hier in te plakken)

16 november 2014

Python script dat NMEA data verwerkt

Filed under: Geen categorie — visserslatijn @ 09:58

Python3 op een Beaglebone Black met GPS module

bbb+gps

Dit is de data die elke seconde uit de GPS module komt:

$GNGGA,210535.000,5213.1998,N,00430.3858,E,1,12,0.9,-1.9,M,44.5,M,,0000*65
$GNGLL,5213.1998,N,00430.3858,E,210535.000,A,A*4A
$GNGSA,A,3,21,13,26,30,05,28,15,,,,,,1.7,0.9,1.4*2B
$GNGSA,A,3,77,69,67,85,68,,,,,,,,1.7,0.9,1.4*2B
$GNRMC,210535.000,A,5213.1998,N,00430.3858,E,000.0,000.0,151114,,,A*7C
$GNVTG,000.0,T,,M,000.0,N,000.0,K,A*13
$GNZDA,210535.000,15,11,2014,00,00*4B
$GNGGA,210536.000,5213.1998,N,00430.3858,E,1,12,0.9,-1.9,M,44.5,M,,0000*66
$GNGLL,5213.1998,N,00430.3858,E,210536.000,A,A*49
$GNGSA,A,3,21,13,26,30,05,28,15,,,,,,1.7,0.9,1.4*2B
$GNGSA,A,3,77,69,67,85,68,,,,,,,,1.7,0.9,1.4*2B
$GNRMC,210536.000,A,5213.1998,N,00430.3858,E,000.0,000.0,151114,,,A*7F
$GNVTG,000.0,T,,M,000.0,N,000.0,K,A*13
$GNZDA,210536.000,15,11,2014,00,00*48

Daarvan ben ik alleen (nog) geinteresseerd in de regel die start met $GNGGA omdat daar voor mij de meest interessante data zit. Tijd, latitude en longitude, GPS-lock, aantal zichtbare satellieten.


import serial

# 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()
	#print if port is open or closed
	if ser.isOpen():
		print ("open: " + ser.name)

#setup
init_serial()

#main
word = "$GNGGA"
while 1:
	bytes = ser.readline()
	bytes = bytes.decode("utf-8")
#	print (len (bytes))
	if word in bytes:
#		print (bytes)
		lijst = bytes.split(",")
		if lijst[6] == "1":		# gps fix
#			print (lijst)
			tijd = lijst[1]
			latitude = lijst[2] + " " + lijst[3]
			longitude = lijst[4] + " " + lijst[5]
			satelliet = lijst[7]

			print ("time =      ", tijd)
			print ("latitude =  ", latitude)
			print ("longitude = ", longitude)
			print ("satelliet = ", satelliet)
#end

debian-bbb-gps-01

Het Rubric thema. Maak een gratis website of blog op WordPress.com.

Volg

Ontvang elk nieuw bericht direct in je inbox.