私はGPS module、Python、MySQL databaseを使ってアプリケーションを作っています。Python GPSデータキャプチャ
GPSからデータをキャプチャしてデータベースに格納しようとすると、コードを記述しました。私は "pynmea2"というプラグインを使用して、データの一部(経度と緯度)を解析しています。しかし、私はそれ以上のデータを必要とするので、私はすでに別のものを試しましたが、私のプログラムはずっとクラッシュし続けています。誰かがこれで私を助けることができますか?
ほとんどの場合、私はシリアル接続からすべてのデータを取得しますが、データをそこから取り除きたいと思っています。ですから、例えば、私は何を得るの:[b'$GPGGA,093512.000,,,,,0,3,,,M,,M,,*47\r\n', b'$GPGLL,,,,,093512.000,V,N*76\r\n', b'$GPGSA,A,1,,,,,,,,,,,,,,,*1E\r\n', b'$GPGSV,3,1,11,15,72,214,,24,52,276,,13,48,141,,17,31,093,29*70\r\n', b'$GPGSV,3,2,11,18,28,292,,28,27,049,25,19,24,120,24,12,23,211,13*7E\r\n', b'$GPGSV,3
まあ、それはそれからデータを抽出することは簡単ではないのですが、それはpynmea2ライブラリとうまくうまくいく(のみライブラリI はが使用することを許可されてい
。今のところ速度と緯度と経度が必要ですが、速度は今私を悩ましています。データを見つけて「解析」する適切な方法がないため、ValueError: could not convert string to float: "22*49\\r\\n'"
が多くあります。
私が現在使用しているコードです。
from model.GPSParser import GPSParser
from model.DB import DB
import serial
import time
import datetime
import pynmea2
#########################################
# This is the main code to setup the
# serial connection with the GPS module.
# it needs to be OR runt as root OR as
# pi with all the root rights.
#########################################
port = "/dev/ttyAMA0"
ser = serial.Serial(port, 9600, timeout=0)
#########################################
# These are all the global variables
# to be used. All defined and set to
# zero or their standard 'Null' value.
#########################################
lat = 0.0
lon = 0.0
cur_speed = 0.0
while True:
try:
# Get the data from the serial monitor.
data = str(ser.readlines()).lstrip("b'")[:-3]
# print(data)
#########################################
# Find the speed, to check if we're
# standing still or not. Save it in a
# @var speed
#########################################
if data.find('$GPVTG') != -1:
cur_speed = data.split(",")[7]
#########################################
# Get the Latitude and Longitude
#########################################
if data.find('$GPGGA') != -1:
print(data)
# Check whether the data strings are empty or not.
if GPSParser.parseLatitude(data) != "" and GPSParser.parseLongitude(data) != "":
lat = GPSParser.parseLatitude(data)
lon = GPSParser.parseLongitude(data)
# Debug printing
# print("Latitude: " + GPSParser.parseLatitude(data))
# print("Longitude: " + GPSParser.parseLongitude(data))
# print("Speed: " + cur_speed)
#########################################
# Insert the coordinates into the database
# Be sure to check of we are really driving
# So when the speed is higher then 5 km/u
# Store everything into the database.
#########################################
if float(cur_speed) > 5.0:
db = DB()
db.insertCoordinates(lat, lon, datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
# Wait a bit to not overload the Serial port
time.sleep(0.5)
############################################################
# The error handling
############################################################
except serial.serialutil.SerialException:
ser.close()
port = "/dev/ttyAMA0"
ser = serial.Serial(port, 9600, timeout=0)
continue
except pynmea2.ParseError:
# print("Error on parsing object, continuing...")
continue
except BlockingIOError:
# print("Blocking I/O error, continuing...")
continue
except TypeError:
# print("Type error, continuing...")
continue
except IndexError:
# print("To catch an error...")
continue
except KeyboardInterrupt:
print("\nProgram stopped.")
exit()
モデルからのインポートではあまり効果がないので、データベース接続と "gpsパーサー"のみがデータ文字列を解析してから返すようになっています。
それでは、私がしたいことのようなものです:それは、それは$GP
変数で始まるチャックにそれをすべてを分割し、その後、私は検索することができ、それはそれは毎秒1回パルスのすべてのデータを取得します
第2の可変部分については、例えば、VTG
またはGGA
である。そして、その文字列を使用して、適切な値に変換して、必要に応じて速度、緯度、経度などのデータを抽出することができます。
皆さん、私をよく理解してくれて、助けてくれることを願っています。
pynmea2におけるシリアル読み出し[例](https://github.com/Knio/pynmea2/blob/master/examples/serial.py)が既に存在しrepo –
これは本当ですが、あなたが質問全体を読んでいた場合を除いて、あなたは速度を解析できないことが分かりました。 – Robin