GPS协议标准目前常用到的是NMEA-0183,很显然,这是由NMEA发布的一个标准。

NMEA是National Marine Electronics Association ,即美国国家海洋电子协会的缩写,NMEA是GPS的管理者,为方便GPS的推广应用,发布了一系列GPS协议的标准格式。

NMEA-0183就是GPS协议标准的一个,它的早期版本为NMEA-0180和NMEA-0182。虽然它现在仍然用得很多,但时光的车轮在前进,它将会逐渐被最新的NMEA 2000所替代。

NMEA-183是一个基于ASCII的串行通信协议,它由一个个的语句组成,理解起来很简单。
下面对它的一些常用的语句进行举例说明,这些,是协议分析中会碰到的。
这些常用的NMEA-0183语句如下:
在这里插入图片描述
注:发送次序
$ PZDA、$ GPGGA、$ GPGLL、$ GPVTG、
$ GPGSA、$ GPGSV3、$ GPRMC
协议帧总说明:   
该协议采用ASCII码,其串行通信默认参数为:波特率=4800bps,数据位=8bit,开始位=1bit,停止位=1bit,无奇偶校验。   
帧格式形如:$aaccc,ddd,ddd,…,ddd
hh

1、“ $ ”——帧命令起始位   
2、aaccc——地址域,前两位为识别符,后三位为语句名   
3、ddd…ddd——数据  
4、“ * ”——校验和前缀   
5、hh——校验和(check sum),$与*之间所有字符ASCII码的校验和(各字节做异或运算,得到校验和后,再转换16进制格式的ASCII字符。)   
6、——CR(Carriage Return) + LF(Line Feed)帧结束,回车和换行

1.$GPGGA   
GPS固定数据输出语句,这是一帧GPS定位的主要数据,也是使用最广的数据。

$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>,<13>,<14>*<15>

<1> UTC时间,格式为hhmmss.sss。  
<2> 纬度,格式为ddmm.mmmm(前导位数不足则补0)。   
<3> 纬度半球,N或S(北纬或南纬)。   
<4> 经度,格式为dddmm.mmmm(前导位数不足则补0)。 
<5> 经度半球,E或W(东经或西经)。   
<6> 定位质量指示,0=定位无效,1=定位有效。   
<7> 使用卫星数量,从00到12(前导位数不足则补0)。   <8> 水平精确度,0.5到99.9。   
<9> 天线离海平面的高度,-9999.9到9999.9米   
<10> 高度单位,M表示单位米。   
<11> 大地椭球面相对海平面的高度(-999.9到999.9)。   <12> 高度单位,M表示单位米。   
<13> 差分GPS数据期限(RTCM SC-104),最后设立RTCM传送的秒数量。   
<14> 差分参考基站标号,从0000到1023(前导位数不足则补0)。   
<15> 校验和。

2 $GPGSA   
GPS DOP and Active Satellites(GSA)当前卫星信息

$GPGSA,<1>,<2>,<3>,<3>,<3>,<3>,<3>,<4>,<5>,<6>,<7>

<1>模式 :M = 手动, A = 自动。 
<2>定位型式 1 = 未定位, 2 = 二维定位, 3 = 三维定位。 
<3>PRN 数字:01 至 32 表天空使用中的卫星编号,最多可接收12颗卫星信息。   
<4> PDOP位置精度因子(0.5~99.9)   
<5> HDOP水平精度因子(0.5~99.9)   
<6> VDOP垂直精度因子(0.5~99.9)   
<7> Checksum.(检查位).

3 G P G S V ∗ ∗   可 视 卫 星 状 态 输 出 语 句       ∗ ∗ GPGSV**  可视卫星状态输出语句     ** GPGSVGPGSV, <1>,<2>,<3>,<4>,<5>,<6>,<7>,…,<4>,<5>,<6>,<7>*<8>

<1> 总的GSV语句电文数。   
<2> 当前GSV语句号。   
<3> 可视卫星总数,00至12。   
<4> 卫星编号,01至32。   
<5> 卫星仰角,00至90度。   
<6> 卫星方位角,000至359度。实际值。   
<7> 信噪比(C/No),00至99dB;无表未接收到讯号。   <8> 校验和。

注:每条语句最多包括四颗卫星的信息,每颗卫星的信息有四个数据项,即:卫星编号、卫星仰角、卫星方位角、信噪比。
   
4 $GPRMC   
推荐最小数据量的GPS信息(Recommended Minimum Specific GPS/TRANSIT Data)

$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*<13>

<1> UTC(Coordinated Universal Time)时间,hhmmss(时分秒)格式   
<2> 定位状态,A=有效定位,V=无效定位   
<3> Latitude,纬度ddmm.mmmm(度分)格式(前导位数不足则补0)   
<4> 纬度半球N(北半球)或S(南半球)   
<5> Longitude,经度dddmm.mmmm(度分)格式(前导位数不足则补0)   
<6> 经度半球E(东经)或W(西经)   
<7> 地面速率(000.0~999.9节,Knot,前导位数不足则补0)   
<8> 地面航向(000.0~359.9度,以真北为参考基准,前导位数不足则补0)   
<9> UTC日期,ddmmyy(日月年)格式   
<10> Magnetic Variation,磁偏角(000.0~180.0度,前导位数不足则补0)   
<11> Declination,磁偏角方向,E(东)或W(西)   
<12> Mode Indicator,模式指示(仅NMEA0183 3.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)   
<13> 校验和。

5. $GPVTG 地面速度信息

G P V T G , < 1 > , < 2 > , < 3 > , < 4 > , < 5 > , < 6 > , < 7 > , < 8 > , < 9 > ∗ < 10 >       例 : GPVTG,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>*<10>    例: GPVTG,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9><10>GPVTG,89.68,T,M,0.00,N,0.0,K*5F

 字段0:$GPVTG,语句ID,表明该语句为Track Made Good and Ground Speed(VTG)地面速度信息 
 字段1:运动角度,000 - 359,(前导位数不足则补0) 
 字段2:T=真北参照系 
 字段3:运动角度,000 - 359,(前导位数不足则补0) 
 字段4:M=磁北参照系 
 字段5:水平运动速度(0.00)(前导位数不足则补0) 
 字段6:N=节,Knots 
 字段7:水平运动速度(0.00)(前导位数不足则补0) 
 字段8:K=公里/时,km/h 
 字段9:校验值

6. $ GPGLL 大地坐标信息
地理定位信息$ GPGLL的标准格式如下:
*$GPGLL,<1>,<2>,<3>,<4>,<5>,<6>hh

例:$GPGLL,4250.5589,S,14718.5084,E,092204.999,A*2D

字段0:$GPGLL,语句ID,表明该语句为Geographic Position(GLL)地理定位信息 
字段1:纬度ddmm.mmmm,度分格式(前导位数不足则补0) 
字段2:纬度N(北纬)或S(南纬) 
字段3:经度dddmm.mmmm,度分格式(前导位数不足则补0) 
字段4:经度E(东经)或W(西经) 
字段5:UTC时间,hhmmss.sss格式 
字段6:状态,A=定位,V=未定位 
字段7:校验值
7 $ GPZDA 当前时间信息
*$GPZDA,<1>,<2>,<3>,<4>,<5>,<6>hh

例如: $GPZDA,105001,25,02,2008,-08,00*67
字段1: UTC时间 ,hhmmss(时分秒)
字段2: 日
字段3:月
字段4:年
字段5:本地区域小时(NEO-6M未用到,为00-正负13)
字段6:本地区域分钟(NEO-6M未用到,为00-59)
字段7: 校验和
每一帧最后都有一个hh的校验和,该校验和是通过计算 $与 * 之间所有字符ASCII码的异或运算得到, 将得到的结果以ASCII字符表示就是该校验了。

附带解析链接
NMEA数据解析方法

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐