L76X 精准定位
来自Waveshare Wiki
获取经纬度等位置信息
由于 GPS 室内搜星不稳定,请将模块或者天线放到阳台或窗户旁,或者直接在户外进行实验。
插上GPS天线,并将接收器标签面朝下置于空旷的室外,在正常情况下(户外,天气良好,没有大型建筑遮挡)上电需要等待约1分钟才能接收到定位信号;如果天气条件不好,可能需要更长的定位时间,甚至无法定位
配置串口
sudo raspi-config 选择Interfacing Options -> Serial,关闭shell访问,打开硬件串口
树莓派5/2B/zero,用户串口设备号为ttyAMA0;可以用以下命令行确认,serial0为选用的串口设备号,例如下图这样的是ttyS0为串口:
ls -l /dev/serial*
- 打开NEMA获取详细信息
sudo minicom -D /dev/ttyS0
- 单位转换
ddmm.mm--> dd.mm.ss: 度数不变,分数*100/60 ;如2232.448620--> 22.(32448620*100/60)= 22.54081033
- 代码注释
from socket import socket import sys import re import pynmea2 import serial import chardet import time import math import json # 全局变量 global Latitude global Longitude global line global line1 global ser2 # 圆周率及相关参数 x_pi = 3.14159265358979324 * 3000.0 / 180.0 pi = 3.1415926535897932384626 # π a = 6378245.0 # Semi-major axis ee = 0.00669342162296594323 # Eccentricity squared # 坐标转换函数 def _transformlng(longitude, latitude): # ... return ret def _transformlat(longitude, latitude): # ... return ret # 主循环 def loop(): global ser1 ser1 = serial.Serial("/dev/ttyS0", 9600) print("ttyDEV Open!!!") while True: line = str(ser1.readline(), encoding='utf-8') if line.startswith("$GNRMC"): global Longitude global Latitude rmc = pynmea2.parse(line) if re.match("^\d+?\.\d+?$", rmc.lat) is not None: print(rmc) latitude = rmc.latitude longitude = rmc.longitude # 坐标转换 # ... # 打印经纬度信息 print("longitude,latitude") print("" + str(mglng) + "," + str(mglat) + "") time.sleep(2) # 清理函数 def destroy(): ser1.close() print("ttydev Close!!!") try: loop() except KeyboardInterrupt: destroy()
运行示例程序程序后生成的坐标复制到高德地图API
sudo apt install python3-venv python3 -m venv myenv &&source myenv/bin/activate source myenv/bin/activate
现在你可以在虚拟环境中安装requests
pip3 install pyserial pip3 install pynmea2 pip3 install pynmeagps wget https://www.waveshare.net/w/upload/a/a5/LXXX-GNSS.zip python3 SIM7600X-GNSS.py
114.0832857092161,22.53842762954979
我的位置
在世界贸易贸易广场的南侧窗边定位,定位和小编所在位置有1-2米的误差;不同的测试环境和转换算法,可能误差有所差异。