gps is working
This commit is contained in:
Executable
+86
@@ -0,0 +1,86 @@
|
|||||||
|
#!/bin/python
|
||||||
|
# http://stackoverflow.com/questions/28867795/reading-i2c-data-from-gps/31010266
|
||||||
|
|
||||||
|
import time
|
||||||
|
import json
|
||||||
|
import smbus
|
||||||
|
import logging
|
||||||
|
|
||||||
|
BUS = None
|
||||||
|
address = 0x42
|
||||||
|
gpsReadInterval = 0.1
|
||||||
|
LOG = logging.getLogger()
|
||||||
|
|
||||||
|
# GUIDE
|
||||||
|
# http://ava.upuaut.net/?p=768
|
||||||
|
|
||||||
|
GPSDAT = {
|
||||||
|
'strType': None,
|
||||||
|
'fixTime': None,
|
||||||
|
'lat': None,
|
||||||
|
'latDir': None,
|
||||||
|
'lon': None,
|
||||||
|
'lonDir': None,
|
||||||
|
'fixQual': None,
|
||||||
|
'numSat': None,
|
||||||
|
'horDil': None,
|
||||||
|
'alt': None,
|
||||||
|
'altUnit': None,
|
||||||
|
'galt': None,
|
||||||
|
'galtUnit': None,
|
||||||
|
'DPGS_updt': None,
|
||||||
|
'DPGS_ID': None
|
||||||
|
}
|
||||||
|
|
||||||
|
def connectBus():
|
||||||
|
global BUS
|
||||||
|
BUS = smbus.SMBus(1)
|
||||||
|
|
||||||
|
def parseResponse(gpsLine):
|
||||||
|
global lastLocation
|
||||||
|
gpsChars = ''.join(chr(c) for c in gpsLine)
|
||||||
|
if "*" not in gpsChars:
|
||||||
|
return False
|
||||||
|
|
||||||
|
gpsStr, chkSum = gpsChars.split('*')
|
||||||
|
gpsComponents = gpsStr.split(',')
|
||||||
|
gpsStart = gpsComponents[0]
|
||||||
|
if (gpsStart == "$GNGGA"):
|
||||||
|
chkVal = 0
|
||||||
|
for ch in gpsStr[1:]: # Remove the $
|
||||||
|
chkVal ^= ord(ch)
|
||||||
|
if (chkVal == int(chkSum, 16)):
|
||||||
|
for i, k in enumerate(
|
||||||
|
['strType', 'fixTime',
|
||||||
|
'lat', 'latDir', 'lon', 'lonDir',
|
||||||
|
'fixQual', 'numSat', 'horDil',
|
||||||
|
'alt', 'altUnit', 'galt', 'galtUnit',
|
||||||
|
'DPGS_updt', 'DPGS_ID']):
|
||||||
|
GPSDAT[k] = gpsComponents[i]
|
||||||
|
print(gpsChars)
|
||||||
|
print(json.dumps(GPSDAT, indent=2))
|
||||||
|
|
||||||
|
def readGPS():
|
||||||
|
c = None
|
||||||
|
response = []
|
||||||
|
try:
|
||||||
|
while True: # Newline, or bad char.
|
||||||
|
c = BUS.read_byte(address)
|
||||||
|
if c == 255:
|
||||||
|
return False
|
||||||
|
elif c == 10:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
response.append(c)
|
||||||
|
parseResponse(response)
|
||||||
|
except IOError:
|
||||||
|
time.sleep(0.5)
|
||||||
|
connectBus()
|
||||||
|
except (Exception) as e:
|
||||||
|
print(e)
|
||||||
|
LOG.error(e)
|
||||||
|
|
||||||
|
connectBus()
|
||||||
|
while True:
|
||||||
|
readGPS()
|
||||||
|
time.sleep(gpsReadInterval)
|
||||||
Reference in New Issue
Block a user