Browse Source

Merge branch 'master' of https://g-u-i.me/gogs/bachir/hehe-rover

Bachir Soussi Chiadmi 7 years ago
parent
commit
2ac716bbec
1 changed files with 26 additions and 42 deletions
  1. 26 42
      rpi/gps.py

+ 26 - 42
rpi/gps.py

@@ -1,64 +1,42 @@
-#!/bin/python
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
 # http://stackoverflow.com/questions/28867795/reading-i2c-data-from-gps/31010266
 
 import time
 import json
 import smbus
 import logging
+import pynmea2
 
 BUS = None
 address = 0x42
-gpsReadInterval = 0.1
+gpsReadInterval = 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):
+def parseResponse(gpsBytes):
     global lastLocation
-    gpsChars = ''.join(chr(c) for c in gpsLine)
-    if "*" not in gpsChars:
+    #gpsLine = "".join(map(chr, gpsBytes))
+    #gpsLine = "".join([chr(byte) for byte in gpsBytes])
+    gpsLine = "".join([chr(byte) for byte in gpsBytes])
+
+
+    if "*" not in gpsLine:
         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))
+    print(gpsLine)
+    gpsObject = pynmea2.parse(gpsLine)
+    print(gpsObject)
+
+    # logs
+    lt = time.asctime( time.localtime(time.time()) )
+    with open('/home/alarm/gps.log', 'a') as f:
+        f.write(lt+' : '+gpsLine+'\n')
 
 def readGPS():
     c = None
@@ -71,12 +49,17 @@ def readGPS():
             elif c == 10:
                 break
             else:
+                #print(c)
                 response.append(c)
+
         parseResponse(response)
+
     except IOError:
         time.sleep(0.5)
         connectBus()
+
     except (Exception) as e:
+        print("Exception")
         print(e)
         LOG.error(e)
 
@@ -84,3 +67,4 @@ connectBus()
 while True:
     readGPS()
     time.sleep(gpsReadInterval)
+#readGPS()