Я пытаюсь добавить функцию GPS на уже доступный веб-сайт, который я не создал. Этот веб-сайт отображает карту, и я хотел бы, чтобы карта следовала GPS-координатам, предоставленным GPSD на Raspberry Pi. У меня GPSD работает на Raspberry Pi и веб-сайт обслуживается пи, который я могу получить доступ через локальную сеть. Так что мне просто нужно получить данные GPS от GPSD на Javascript веб-сайта. Я попытался написать python программу, которая читает GPSD, а затем, с Flask, выводит JSON. По отдельности я могу получить python, чтобы выкладывать информацию из GPSD, и я могу получить доступ к stati c JSON, используя Flask через локальную сеть, но когда я собираю все вместе, ничего не работает. Я не уверен в этом методе, если есть лучший способ сделать это, кроме python с Flask. Мой код ниже, спасибо:
#! /usr/bin/python
from flask import Flask, jsonify
from gps import *
from threading import Thread
from time import *
import time
import threading
mode = 0
gpsd = None #seting the global variable
app = Flask(__name__)
class GpsPoller(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
global gpsd #bring it in scope
gpsd = gps(mode=WATCH_ENABLE) #starting the stream of info
self.current_value = None
self.running = True #setting the thread running to true
def run(self):
global gpsd
while gpsp.running:
gpsd.next() #this will continue to loop and grab EACH set of gpsd info to clear the buffer
def update_GPSD():
gpsp = GpsPoller() # create the thread
gpsp.start() # start it up
while 1:
lat = gpsd.fix.latitude
lon = gpsd.fix.longitude
mode = gpsd.fix.mode
sat = len(gpsd.satellites)
utc = gpsd.fix.time
print 'latitude ' , lat
print 'longitude ' , lon
time.sleep(1)
@app.route('/')
def index():
if mode == 0:
message = {"mode" : mode}
return jsonify(message)
else:
message = {'mode': mode, 'lat': lat, 'lon': lon, 'sat': sat, }
return jsonify(message)
if __name__ == '__main__':
app.run(host='0.0.0.0', debug=True)
Thread(target = update_GPSD).start()
try:
while 1:
except (KeyboardInterrupt, SystemExit): #when you press ctrl+c
print "\nKilling Thread..."
gpsp.running = False
gpsp.join() # wait for the thread to finish what it's doing
print "Done.\nExiting."