12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- #!/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 = 1
- LOG = logging.getLogger()
- def connectBus():
- global BUS
- BUS = smbus.SMBus(1)
- def parseResponse(gpsBytes):
- global lastLocation
- #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
- 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
- response = []
- try:
- while True: # Newline, or bad char.
- c = BUS.read_byte(address)
- if c == 255:
- return False
- 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)
- connectBus()
- while True:
- readGPS()
- time.sleep(gpsReadInterval)
- #readGPS()
|