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. Linux常用命令及文件管理

    Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示. 目录解释: .代表此层目录:  .. 代表父目录:-代表前一个目录:~代表是家目录. (1)ls命令(显示) -a:列出所有文 ...

  2. LeetCode--链表

    1.使用常量空间复杂度在O(n log n)时间内对链表进行排序. 思路: 因为题目要求复杂度为O(nlogn),故可以考虑归并排序的思想. 归并排序的一般步骤为: 1)将待排序数组(链表)取中点并一 ...

  3. JavaScript004,输出

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  4. 02C#操作rabbitmq

    以前用过memcacheq.msmq.redis的list做队列,在用memcacheq的时候,还是在linux下,当然这个不是我安装的,我只是用c#操作而已,从那以后对队列处理并发能力有了新的认识, ...

  5. Java锁--共享锁和ReentrantReadWriteLock

    转载请注明出处:http://www.cnblogs.com/skywang12345/p/3505809.html ReadWriteLock 和 ReentrantReadWriteLock介绍 ...

  6. Java锁--ReentrantLock

    转载请注明出处:http://www.cnblogs.com/skywang12345/p/3496101.html ReentrantLock介绍 ReentrantLock是一个可重入的互斥锁,又 ...

  7. Codeforces Round #554 (Div. 2) F2. Neko Rules the Catniverse (Large Version) (矩阵快速幂 状压DP)

    题意 有nnn个点,每个点只能走到编号在[1,min(n+m,1)][1,min(n+m,1)][1,min(n+m,1)]范围内的点.求路径长度恰好为kkk的简单路径(一个点最多走一次)数. 1≤n ...

  8. Oracle 进程 前台进程-服务进程

    一.什么是服务进程(前台进程) 当用户运行一个应用进程时,系统会为用户运行的应用建立一个用户程序,该进程通过某种方式启动一个服务器进程(前台进程),用于处理连接到该实例的用户进程的请求. 二.服务进程 ...

  9. luogu 2272

    Tarjan 缩点 拓扑排序 套路题

  10. LibreOJ #114. k 大异或和

    二次联通门 : LibreOJ #114. k 大异或和 /* LibreOJ #114. k 大异或和 WA了很多遍 为什么呢... 一开始读入原数的时候写的是for(;N--;) 而重新构造线性基 ...