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。

$GPGGA,235949.042,0000.0000,N,00000.0000,E,,,,0.0,M,0.0,M,,*
$GPGLL,0000.0000,N,00000.0000,E,235949.042,V,N*
$GPGSA,A,,,,,,,,,,,,,,,,*1E
$GPGSV,,,*
$GPRMC,235949.042,V,0000.0000,N,00000.0000,E,,,,,,N*7E
$GPVTG,,T,,M,,N,,K,N*2C

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

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

协议格式:

$GPGGA,161229.487,3723.2475,N,12158.3416,W,,,1.0,9.0,M, , ,,*

协议格式详细分析:

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

协议格式:

$GPGLL,<>,<>,<>,<>,<>,<>*hh<CR><LF>

样例数据:

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

协议格式详细分析:

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

协议格式:

$GPGSA,<>,<>,<>,<>,<>,<>,<>,<>,<>,<>,<>,<>,<>,<>,<>,<>,<>*hh<CR><LF>

样例数据:

$GPGSA,A,,,,,,,,, , , , , ,1.8,1.0,1.5*

协议格式详细分析:

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

  协议格式:
$GPGSV, <>,<>,<>,<>,<>,<>,<>,...,<>,<>,<>,<>*hh<CR><LF>

样例数据:

$GPGSV,,,,,,,,,,,,,,,,,,,*
$GPGSV,,,,,,,,,,,,,,,*

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

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

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

协议格式:

$GPRMC,<>,<>,<>,<>,<>,<>,<>,<>,<>,<>,<>*hh<CR><LF>

样例数据:

$GPRMC,161229.487,A,3723.2475,N,12158.3416,W,0.13,309.62,,,*

协议格式详细分析:

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

协议格式:

$GPVTG,<>,<>,<>,<>,<>,<>,<>,<>*hh<CR><LF>

样例数据:

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

协议格式详细分析:

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

转:http://blog.csdn.net/northcan/article/details/7261310

GPS模块编程之NMEA0183协议的更多相关文章

  1. [深入浅出WP8.1(Runtime)]Socket编程之UDP协议

    13.3 Socket编程之UDP协议 UDP协议和TCP协议都是Socket编程的协议,但是与TCP协议不同,UDP协议并不提供超时重传,出错重传等功能,也就是说其是不可靠的协议.UDP适用于一次只 ...

  2. 网络编程之tcp协议以及粘包问题

    网络编程tcp协议与socket以及单例的补充 一.单例补充 实现单列的几种方式 #方式一:classmethod # class Singleton: # # __instance = None # ...

  3. java 26 - 7 网络编程之 TCP协议代码优化

    上次所写的代码中,客户端和服务器端所进行的数据传输所用的是字节流. 优化: A:这次,为了高效,对这个字节流通过转换流来进行包装,包装成高效字符流. B:这次,传输的数据是通过键盘录入的数据. 服务器 ...

  4. java 26 - 6 网络编程之 TCP协议 传输思路 以及 代码

    TCP传输 Socket和ServerSocket 建立客户端和服务器 建立连接后,通过Socket中的IO流进行数据的传输 关闭socket 同样,客户端与服务器是两个独立的应用程序 TCP协议发送 ...

  5. java 25 - 4 网络编程之 UDP协议传输的代码优化

    UDP协议的输出端: /* UDP发送数据: A:创建Socket发送端对象 B:创建数据报包(把数据打包) C:调用Socket对象发送数据报包 D:释放资源(底层是IO流) */ public c ...

  6. java 25 - 4 网络编程之 UDP协议传输思路

    UDP传输 两个类:DatagramSocket与DatagramPacket(具体看API) A:建立发送端,接收端. B:建立数据包. C:调用Socket的发送接收方法. D:关闭Socket. ...

  7. 网络编程之UDP协议

    UDP协议 UDP(User Datagram Protocol)也就是用户数据报协议,是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范. 提 ...

  8. ASP.NET网络编程之-HTTP协议

    HTTP协议由来已久,最近复习到它,好记性不如烂笔头,在此留下自己的总结,算是为后面再要看时用吧.HTTP协议是一个在B/S架构中约束客户端(浏览器)和服务端(比较常见的是就是IIS服务器,关于IIS ...

  9. python六十九课——网络编程之TCP协议

    1.1 概述: TCP协议通过三次握手协议将客户端与服务器端连接,两端使用各自的Socket对象.Socket对象中包含了IO流,供数据传输. 即:TCP协议在客户端与服务器端通过Socket组成了I ...

随机推荐

  1. kafka学习链接收藏

    1.kafka官方文档 Apache Kafka : broker.producer.consumer等参数配置直接看目录 2.系统学习 kafka中文教程 - OrcHome <Apache ...

  2. ubuntu安装supervisor

    1. Ubuntu14中supervisor的安装及配置 2. Ubuntu 14.04下进程管理工具supervisor安装 3. Supervisor使用教程 4. supervisor在deep ...

  3. Qt 4.8.5 + MinGW32 + Qt creater 安装

    Qt 4.8.5 + MinGW32 + Qt creater 安装 下载文件 文件版本 Qt 4.8.5 MinGW 0.4.4 Qt Creator 2.8或2.8.1 gdb-7.4-MinGW ...

  4. PAT Basic 1053 住房空置率 (20 分)

    在不打扰居民的前提下,统计住房空置率的一种方法是根据每户用电量的连续变化规律进行判断.判断方法如下: 在观察期内,若存在超过一半的日子用电量低于某给定的阈值 e,则该住房为“可能空置”: 若观察期超过 ...

  5. Mongo db 简单介绍及命令笔记

    首先来了解下什么是MongoDB ? MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在为W ...

  6. 大数据之路week05--day07(序列化、类加载器、反射、动态代理)

    遇到这个 Java Serializable 序列化这个接口,我们可能会有如下的问题 a,什么叫序列化和反序列化b,作用.为啥要实现这个 Serializable 接口,也就是为啥要序列化c,seri ...

  7. ubuntu redis 安装 &基本命令

    参考资料:https://www.cnblogs.com/zongfa/p/7808807.htmlredis命令参考:http://doc.redisfans.com/安装:sudo apt-get ...

  8. Jquery select 三级联动 (需要JSON数据)

    Scripts/Category.js //Jquery三级类别联动 $(function () { BindCategory(); }) function BindCategory() { var ...

  9. Activiti服务类- TaskService服务类

    一共72个接口 1.创建任务(2个方法)//创建与任何流程实例无关的新任务.Task newTask();//使用用户定义的任务id创建一个新任务.Task newTask(String taskId ...

  10. FileInputStream读取的两种方法:逐字节读;以字节数组读取

    1:read() : 从输入流中读取数据的下一个字节,返回0到255范围内的int字节值.如果因为已经到达流末尾而没有可用的字节,则返回-1.在输入数据可用.检测到流末尾或者抛出异常前,此方法一直阻塞 ...