NMEA 0183是美国国家海洋电子协会(National Marine Electronics Association)为海用电子设备制定的标准格式。现在已经成为GPS导航设备统一的RTCM(Radio Technical Commission for Maritime services)标准协议。

下图一款GPS芯片,是深圳一家公司生产的。基本上接上天线,供电引脚电压正常的话,就可以通过串口读取GPS数据了。所以GPS编程最主要的是解析数据,要解析数据就得了解协议格式。

下面一组数据,是我在室内且芯片没接天线的情况下读一次串口所获取的数据(GPS芯片会源源不断的输出数据)。这组数据里面没有读到经纬度等信息(全部为0),但可以看到NMEA0183的六种输出协议:$GPGGA、$GPGLL、$GPGSA、$GPGSV、$GPRMC、$GPVTG。

  1. $GPGGA,235949.042,0000.0000,N,00000.0000,E,0,00,,0.0,M,0.0,M,,0000*45
  2. $GPGLL,0000.0000,N,00000.0000,E,235949.042,V,N*47
  3. $GPGSA,A,1,,,,,,,,,,,,,,,*1E
  4. $GPGSV,1,1,00*79
  5. $GPRMC,235949.042,V,0000.0000,N,00000.0000,E,,,140209,,,N*7E
  6. $GPVTG,,T,,M,,N,,K,N*2C

下面详细学习这六种不同的输出协议的数据格式。

(1) $GPGGA (GPS定位信息)

协议格式:

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

样例数据:

  1. $GPGGA,161229.487,3723.2475,N,12158.3416,W,1,07,1.0,9.0,M, , ,,0000*18

协议格式详细分析:

(2) $GPGLL (地理定位信息)

协议格式:

  1. $GPGLL,<1>,<2>,<3>,<4>,<5>,<6>*hh<CR><LF>

样例数据:

  1. $GPGLL,3723.2475,N,12158.3416,W,161229.487,A*2C

协议格式详细分析:

(3) $GPGSA (当前卫星信息)

协议格式:

  1. $GPGSA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>,<13>,<14>,<15>,<16>,<17>*hh<CR><LF>

样例数据:

  1. $GPGSA,A,3,07,02,26,27,09,04,15, , , , , ,1.8,1.0,1.5*33

协议格式详细分析:

(4) $GPGSV(可见卫星信息)

协议格式:

  1. $GPGSV, <1>,<2>,<3>,<4>,<5>,<6>,<7>,...,<4>,<5>,<6>,<7>*hh<CR><LF>

样例数据:

  1. $GPGSV,2,1,07,07,79,048,42,02,51,062,43,26,36,256,42,27,27,138,42*71
  2. $GPGSV,2,2,07,09,23,313,42,04,19,159,41,15,12,041,42*41

需要注意的是这里的样例数据有2条,这是因为当前可见卫星一共有7个,但是每条语句最多包括四颗卫星的信息,所以分成了2条语句。每颗卫星的信息有四个数据项,即:<4>(卫星编号)、<5>(卫星仰角)、<6>(卫星方位角)、<7>(信噪比)。

协议格式详细分析(只分析第1条样例数据语句):

(5) $GPRMC(最简定位信息)

协议格式:

  1. $GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>*hh<CR><LF>

样例数据:

  1. $GPRMC,161229.487,A,3723.2475,N,12158.3416,W,0.13,309.62,120598,,*10

协议格式详细分析:

(6) $GPVTG(地面速度信息)

协议格式:

  1. $GPVTG,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>*hh<CR><LF>

样例数据:

  1. $GPVTG,309.62,T, ,M,0.13,N,0.2,K*6E

协议格式详细分析:

有了上面对NMEA0183协议的详细学习,剩下的就是串口编程了。无论是通过单片机,还是Windows/WinCE/Linux系统,编写串口程序把这些数据读取到都是比较容易的,剩下就是通过c++那些查找算法函数,或者MFC CString字符串的相关函数进行解析就OK了。

GPS之NMEA协议20160526的更多相关文章

  1. MTK MT33xx型GPS的NMEA协议解析实例

    1)解析实现 gps_main.c #include <nmea/nmea.h> #include <string.h> #include <stdio.h> #i ...

  2. nmea协议

    NMEA协议 信息类型为: GPGSV:可见卫星信息 GPGLL:地理定位信息 GPRMC:推荐最小定位信息 GPVTG:地面速度信息 GPGGA:GPS定位信息 GPGSA:当前卫星信息 1. Gl ...

  3. NMEA协议 上位机 C# (转)

    源:NMEA协议 上位机 c# 前些时间写做了两款用NMEA协议的上位机,在这里做一个总结和记录.和大家分享,也为了以后不会忘记. NMEA协议总体来说,相对简单,是气象上比较成熟的协议. 主要有以下 ...

  4. GPS NEMA 0183协议

    转自:http://www.cnblogs.com/xidongs/archive/2011/02/01/1948689.html 一. NMEA0183标准语句(GPS常用语句)$GPGGA例:$G ...

  5. Delphi获取Android下GPS的NMEA 0183数据

    下面的程序,可以实现Android下获取GNSS的NMEA0183数据: unit utAndroidNmea; interface uses Androidapi.JNIBridge, Androi ...

  6. [转]GPS NEMA 0183协议

    一. NMEA0183标准语句(GPS常用语句) $GPGGA例:$GPGGA,092204.999,4250.5589,S,14718.5084,E,1,04,24.4,19.7,M,,,,0000 ...

  7. 4.4 使用STM32控制MC20进行GPS帧数据解析

    需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ...

  8. 3.6.使用STC89C52控制MC20解析GPS的经纬度数据上传到指定服务器

    需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ...

  9. 3.4 使用STC89C52控制MC20解析GPS的经纬度数据在LCD1602上显示

    需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ...

随机推荐

  1. H264的句法和语法总结(一)分层结构

    在H.264 中,句法元素共被组织成  序列.图像.片.宏块.子宏块五个层次.在这样的结构中,每一层的头部和它的数据部分形成管理与被管理的强依赖关系,头部的句法元素是该层数据的核心,而一旦头部丢失,数 ...

  2. 欧几里得算法与扩展欧几里得算法_C++

    先感谢参考文献:http://www.cnblogs.com/frog112111/archive/2012/08/19/2646012.html 注:以下讨论的数均为整数 一.欧几里得算法(重点是证 ...

  3. 【Robot Framework】robot framework 学习以及selenium、appnium、requests实践(二)

    之前简单的介绍了如何使用RF,在这一节里,主要介绍下Selenium2Library的API, 在线的地址是http://robotframework.org/Selenium2Library/Sel ...

  4. jmeter随笔(11)--上传文件接口出错

    点击标题下「飞测」可快速关注 坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注.转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是我们期 ...

  5. 华为OJ平台——放苹果(典型整数划分问题)

    题目描述: 输入m,n,分别表示苹果数与盘子的总数,要求输出苹果放在n个盘子的方法总数(注意511和151是一种情况),例如输入 7 3 输出8((7),(6,1),(5,2),(4,3),(5,1, ...

  6. 关于oracle中传过来的一个多id需要插入到数据库用,分格的存储过程

    create or replace procedure test ( jf_Id in nvarchar2, yf_id in nvarchar2 ) as v_length NUMBER := LE ...

  7. qemu-img convert -c -O qcow2 source.raw aim.qcow2

    qemu-img convert -c -O qcow2 source.raw aim.qcow2 qemu-img create -f qcow2 -o preallocation=metadata ...

  8. 【转】怎样提高VR渲染速度

    怎样提高VR渲染速度分析!<经验之谈>!!!VR的基本渲染方法掌握起来并不难,但是最迫切需要解决的问题是VR的出图速度问题.动则需要数小时的渲染时间真的是很难以接受,我们从三个影响速度的参 ...

  9. C++记录debug信息的log类

    取自:http://www.viksoe.dk/code/all_mfc.htm,里面有各种MFC常用的类 // LogFile.h: interface for the CLogFile class ...

  10. Use BEC to do mobile phone forensics

    Belkasoft Evidence Center makes me very impressed that it supports lots of evidence type. I have to ...