備忘錄_20160105(定位)
修改
回首頁
程式 2026-04-08 17:22:08 1775640128 100
neo-6m (gps) + raspberry pi 4/5
neo-6m (gps) + raspberry pi 4/5
# 記得打開樹莓派4/樹莓派5的 Serial Port
# NEO-6M的 VCC -- 樹莓派的 3.3V
# NEO-6M的 RX -- 樹莓派的 TX
# NEO-6M的 TX -- 樹莓派的 RX
# NEO-6M的 GND -- 樹莓派的 GND
# 白面朝天空
import serial
from datetime import datetime, timedelta
def getFRealDeg(strVal, strDir):
if strDir in ['N','S']:
iDegLen=2
else:
iDegLen=3
iDeg=int(strVal[:iDegLen])
fMin=float(strVal[iDegLen:])
fFinalDeg=iDeg+fMin/60
if strDir in ['S','W']:
fFinalDeg=-fFinalDeg
return fFinalDeg
oSerial=serial.Serial("/dev/serial0", 9600, timeout=1)
while True:
strLine=oSerial.readline().decode('ascii', errors='ignore')
if strLine.startswith('$GPRMC') or strLine.startswith('$GNRMC'):
lstPart=strLine.split(',')
strMessageType=lstPart[0]
strUTCTime=lstPart[1]
iHour=int(strUTCTime[0:2])
iMin=int(strUTCTime[2:4])
fSec=float(strUTCTime[4:])
strStatus=lstPart[2] # Void/Active
strLatVal=lstPart[3] #
strLatDir=lstPart[4] # North/South
strLonVal=lstPart[5] #
strLonDir=lstPart[6] # East/West
fLat=getFRealDeg(strLatVal, strLatDir)
fLon=getFRealDeg(strLonVal, strLonDir)
strSpeedOverGround=lstPart[7] # knots
strTrackAngle=lstPart[8]
strDDMMYY=lstPart[9]
iYear=2000+int(strDDMMYY[4:6])
iMonth=int(strDDMMYY[2:4])
iDay=int(strDDMMYY[0:2])
strMagneticVariationVal=lstPart[10]
strMagneticVariationDir=lstPart[11]
strMode=lstPart[12] # Autonomous/Differential/Estimated
strChecksum=strMode[1:]
strMode=strMode[0:1]
oDT=datetime.strptime(strDDMMYY+strUTCTime, "%d%m%y%H%M%S.%f")
oDTAsiaTaipei=oDT+timedelta(hours=8)
print("----------------------------")
print("strMessageType", strMessageType)
print("oDTAsiaTaipei", oDTAsiaTaipei)
print("date", iYear, iMonth, iDay)
print("strUTCTime", strUTCTime)
print("strStatus", strStatus)
print("fLat", fLat)
print("fLon", fLon)
print("strSpeedOverGround", strSpeedOverGround)
print("strTrackAngle", strTrackAngle)
print("strMagneticVariationVal", strMagneticVariationVal)
print("strMagneticVariationDir", strMagneticVariationDir)
print("strMode", strMode)
print("strChecksum", strChecksum)
print("")