Python如何获取GPS经纬度信息?
需求:
- 来了一个GPS设备: 获取GPS经纬度信息
解决:
- 用serial库
步骤:
第0步:GPS 协议介绍
- 这里简单介绍xxRMC,是推荐最小定位信息。【红色,是要找的字段】
-
$GPRMC
例:$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A*50
字段0:$GPRMC,语句ID,表明该语句为Recommended Minimum Specific GPS/TRANSIT Data(RMC)推荐最小定位信息
字段1:UTC时间,hhmmss.sss格式
字段2:状态,A=定位,V=未定位
字段3:纬度ddmm.mmmm,度分格式(前导位数不足则补0)
字段4:纬度N(北纬)或S(南纬)
字段5:经度dddmm.mmmm,度分格式(前导位数不足则补0)
字段6:经度E(东经)或W(西经)
字段7:速度,节,Knots
字段8:方位角,度
字段9:UTC日期,DDMMYY格式
字段10:磁偏角,(000 - 180)度(前导位数不足则补0)
字段11:磁偏角方向,E=东W=西
字段16:校验值
-----------------------------------
参考资料: GPS 0183协议GGA、GLL、GSA、GSV、RMC、VTG解释
第一步:插上GPS设备,检查能否正常获取:
- 用cat查看
cat /dev/ttyACM0
# 过滤查看 cat /dev/ttyACM0 | grep RMC
- 这里我们用RMC这个维度来获取。
第二步:编写Python代码利用serial库
-
# pip3 install pyserial # 记得安装 import serial import time ser = serial.Serial('/dev/ttyACM0', baudrate=4800, timeout=1) while True: data = ser.readline() # print(data) if data[0:6] == b'$GNRMC': # RMC数据 msg = data.decode('utf-8') # print(msg) # $GNRMC,095938.00,V,,,,,,,220923,,,N,V*1F res = msg.split(",") if res[2] == "V": print("未定位") # pass else: print("定位到了") # ['3028.84027', 'N', '11424.30721', 'E'] # print(res[3:7]) gps = "".join(res[3:7]) print(gps) time.sleep(0.5)
第三步:验证成功!