树莓派(四):GPS连接并读取

0 准备

树莓派(四):GPS连接并读取_第1张图片
从左到右分别是GPS模块,USB转TTL串口,GPS天线
网上有一些文章是串口版的,直接将gps模块安装到树梅派上,不推荐那样做,因为那样做要更改许多文件,而且对树梅派使用也有一定影响,总之usb接口的是最简单的。

1 连线

杜邦线共使用4根线:
USB的TXD和GPS模块的RXD
USB的RXD和GPS模块的TXD
USB的GND和GPS模块的GND
USB的VCC和GPS模块的VCC
连好后将天线与GPS模块相连,放到窗外,USB串口插到树莓派的usb上

2 软件安装

首先查看一下这个usb串口是串口几,命令行输入:

ls -l /dev/tty*

树莓派(四):GPS连接并读取_第2张图片
安装minicom

sudo apt-get install minicom

安装好后使用minicom命令获取串口上的数据

minicom -b 9600 -o -D /dev/ttyUSB0

如果不出意外会出现如下数据树莓派(四):GPS连接并读取_第3张图片
按ctri+a,然后按x就可以退出minicom

3 实时读取数据

运行python
树莓派(四):GPS连接并读取_第4张图片

import serial #导入serial模块

ser = serial.Serial("/dev/ttyUSB0",9600)#打开串口,存放到ser中,/dev/ttyUSB0是端口名,9600是波特率

while True:
    line = str(str(ser.readline())[2:])  # readline()是用于读取整行
    # print(line)
    # 这里如果从头取的话,就会出现b‘,所以要从第三个字符进行读取
    if line.startswith('$GPGGA'):
    #我这里用的GPGGA,有的是GNGGA
        #print('接收的数据:' + str(line))
        line = str(line).split(',')  # 将line以“,”为分隔符
        jing = float(line[4][:3]) + float(line[4][3:])/60
        # 读取第5个字符串信息,从0-2为经度,即经度为116,再加上后面的一串除60将分转化为度
        wei = float(line[2][:2]) + float(line[2][2:])/60
        # 纬度同理
        print("经度:",jing)
        print("维度:",wei)

数据解析

GPS数据协议包以$开头,做解析的时候可以以此为标记,通常,GPRMC的数据比较全,可满足大部分应用,这里只简单说明GPGGA

$GPGGA,092204.999,4250.5589,S,14718.5084,E,1,04,24.4,19.7,M,0000*1F

字段0:$GPGGA,语句ID,表明该语句为Global Positioning System Fix Data(GGA)GPS定位信息

字段1:UTC 时间,hhmmss.sss,时分秒格式

字段2:纬度ddmm.mmmm,度分格式(d代表单位度,m代表单位分)

字段3:纬度N(北纬)或S(南纬)

字段4:经度dddmm.mmmm,度分格式(前导位数不足则补0)

字段5:经度E(东经)或W(西经)

字段6:GPS状态,0=未定位,1=非差分定位,2=差分定位,3=无效PPS,6=正在估算

字段7:正在使用的卫星数量(00 - 12)(前导位数不足则补0)

字段8:HDOP水平精度因子(0.5 - 99.9)

字段9:海拔高度(-9999.9 - 99999.9)

字段10:地球椭球面相对大地水准面的高度

字段11:差分时间(从最近一次接收到差分信号开始的秒数,如果不是差分定位将为空)

字段12:差分站ID号0000 - 1023(前导位数不足则补0,如果不是差分定位将为空)

字段13:校验值

你可能感兴趣的:(树梅派)