GPS模块编程之NMEA0183协议

article/2024/12/21 23:02:05

原文地址:https://blog.csdn.net/northcan/article/details/7261310


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

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

在这里插入图片描述
下面一组数据,是我在室内且芯片没接天线的情况下读一次串口所获取的数据(GPS芯片会源源不断的输出数据)。这组数据里面没有读到经纬度等信息(全部为0),但可以看到NMEA0183的六种输出协议: G P G G A 、 GPGGA、 GPGGAGPGLL、 G P G S A 、 GPGSA、 GPGSAGPGSV、 G P R M C 、 GPRMC、 GPRMCGPVTG。

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

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

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

协议格式:

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

样例数据:

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

协议格式详细分析:

在这里插入图片描述

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

协议格式:

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

样例数据:

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

协议格式详细分析:

在这里插入图片描述

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

协议格式:

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

样例数据:

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

协议格式详细分析:

在这里插入图片描述

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

协议格式:

$GPGSV, <1>,<2>,<3>,<4>,<5>,<6>,<7>,…,<4>,<5>,<6>,<7>*hh

样例数据:

$GPGSV,2,1,07,07,79,048,42,02,51,062,43,26,36,256,42,27,27,138,4271
$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(最简定位信息)

协议格式:

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

样例数据:

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

协议格式详细分析:

在这里插入图片描述
(6) $GPVTG(地面速度信息)

协议格式:

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

样例数据:

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

协议格式详细分析:

在这里插入图片描述

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


http://chatgpt.dhexx.cn/article/HkL2bLXY.shtml

相关文章

NMEA 0183 校验计算方法

每一行末尾的“星号”后面都有两位校验&#xff0c;是本行字符串中将“美元符号”和“星号”之间的每一个字符从左至右依次进行异或等于运算而得到的 $GPGSV,2,2,07,24,71,118,51,27,02,300,37,32,08,258,4141 $GLGSV,2,1,07,66,46,058,48,82,29,260,44,76,43,059,47,77,38,150…

获取原始NMEA 0183语句的方法

MEA0183语句是从卫星上广播的含有丰富信息的原始GPS语句&#xff0c;它的语法为海用电子设备的标准格式。它所含的信息量远远不止位置坐标&#xff0c;开发和利用这些信息可能会带来意想不到的商机。比如&#xff0c;它发出的时间信息已经被很多钟表厂商利用&#xff0c;开发出…

从NMEA0183到GNSS定位数据获取(二)软件篇

总述 GPS我们都知道&#xff0c;一种用来全球定位的系统&#xff0c;后来俄罗斯推出了格洛纳斯定位系统&#xff0c;中国推出了北斗定位&#xff0c;欧盟有伽利略&#xff0c;印度与日本也有有发展。所以后来把覆盖全球的自主地利空间定位的卫星系统成为GNSS。 现在卫星定位那么…

c++中拷贝构造函数被调用的时机

1 c中拷贝构造函数被调用的时机 拷贝构造函数被调用的几种情况&#xff1a; &#xff08;1&#xff09;当用类的一个对象去初始化该类的另一个对象时&#xff0c;系统会自动调用拷贝构造函数&#xff1b; &#xff08;2&#xff09;将一个对象作为实参传递给一个非引用类型的…

二说 拷贝构造函数 拷贝赋值函数

文章目录 什么是拷贝构造函数拷贝构造函数的调用时机2.1 当函数的参数为类的对象时2.2 函数的返回值是类的对象2.3 对象需要通过另外一个对象进行初始化 浅拷贝与深拷贝3.1 默认拷贝构造函数3.2 浅拷贝3.3 深拷贝3.4 防止默认拷贝发生 拷贝构造函数的几个细节4.1 为什么拷贝构造…

C++拷贝构造函数、构造函数和析构函数

一、拷贝构造函数 转载自&#xff1a;http://www.cnblogs.com/BlueTzar/articles/1223313.html 1、类对象的拷贝 对于普通类型的对象来说&#xff0c;它们之间的复制是很简单的&#xff0c;例如&#xff1a; int a88; int ba; 而类对象与普通对象不同&#xff0c;类对象内部…

拷贝构造函数起作用的三种情况

拷贝构造函数起作用的三种情况&#xff1a; 1.当用类的对象去初始化同类的另一个对象时。 Date d2(d1); Date d2 d1; //初始化语句&#xff0c;并非赋值语句。 2.当函数的形参是类的对象&#xff0c;调用函数进行形参和实参结合时。 void Func(A a1) //形参是类Date的对象…

【拷贝构造函数】c++类拷贝构造函数详解

【拷贝构造函数】c类拷贝构造函数详解 目录 【拷贝构造函数】c类拷贝构造函数详解一、什么是拷贝构造函数二、拷贝构造函数的几种调用时机1. 当函数的参数为类的对象时2. 函数的返回值是类的对象3. 当成员变量为类类型时4. 普通派生类构造函数的写法 三、浅拷贝与深拷贝1. 默认…

拷贝(复制)构造函数定义及3种调用情况举例

一、拷贝构造函数是一种特殊的构造函数&#xff0c;其形参为本类的对 象引用。 class 类名 { public : 类名&#xff08;形参&#xff09;&#xff1b;//构造函数 类名&#xff08;类名 &对象名&#xff09;&#xff1b;//拷贝构造函数 ... }&#xff1b; //拷贝构造函…

C++——拷贝构造函数详解

C——拷贝构造函数详解 1.拷贝构造函数的特点&#xff1a;2.通过例子引入拷贝构造&#xff1a;3构造对象的时候使用引用返回与不使用引用返回的问题&#xff1a;3.1不使用引用返回&#xff1a;3.2引用返回——从已经死亡的地址接收值不牢靠&#xff1a; 4.缺省的拷贝构造和等号…

C++ 拷贝构造函数详解

C 拷贝构造函数详解 下面的讲解将以C标准库的string类作为讲解对象&#xff0c;string类&#xff1a;class with pointer member(s) 1、拷贝构造函数和拷贝赋值函数 1.1引入 下面是给出的测试函数&#xff0c;也是我们要能在自己设计的myString类中实现的功能&#xff1a; …

详解析构函数、拷贝构造函数

目录 一.析构函数&#xff08;析构器&#xff09; &#xff08;一&#xff09;.使用方式及注意事项 1.使用方式 2.注意事项 &#xff08;二&#xff09;.默认析构函数 二.拷贝构造函数 &#xff08;一&#xff09;.使用方式及注意事项 1.使用方式 2.注意事项 &#xff0…

【深入理解C++】拷贝构造函数

文章目录 1.拷贝构造函数2.默认的拷贝操作3.默认拷贝构造函数4.何时调用拷贝构造函数 1.拷贝构造函数 拷贝构造函数是构造函数的一种。当利用已存在的对象创建一个新对象时&#xff0c;就会调用新对象的拷贝构造函数进行初始化。 拷贝构造函数的格式是固定的&#xff0c;即接…

C++拷贝构造函数详解

一. 什么是拷贝构造函数 首先对于普通类型的对象来说&#xff0c;它们之间的复制是很简单的&#xff0c;例如&#xff1a; int a 100; int b a; 而类对象与普通对象不同&#xff0c;类对象内部结构一般较为复杂&#xff0c;存在各种成员变量。 下面看一个类对象拷贝的简…

c++拷贝构造函数(深拷贝,浅拷贝)详解

一、什么是拷贝构造函数 首先对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a=100; int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。 下面看一个类对象拷贝的简单例子。 #include<iostream> using n…

YOLO 裂缝检测

环境 python3.5 yolov3 opencv keras

基于OpenCV的混凝土裂纹检测

基于OpenCV的混凝土裂纹检测 前言 这是我发的第一次博客&#xff0c;有什么建议大家可以给我留言&#xff0c;感激不尽! 接下来&#xff0c;我们进入正题。 一、使用函数库 numpy, opencv, heapq, skimage.morphology 二、使用步骤 1.初步预处理 初步预处理包括&#xf…

【图像识别】基于计算机视觉实现路面裂缝检测识别系统matlab代码

1 简介 随着公路与铁路事业的飞速发展,各类车辆和里程的增加,铁路的一次次提速,都对路面产生了巨大的压力。不论是公路路面还是铁路路面,路面裂纹都能随处可见,由路面裂纹造成的交通事故时有发生。研究路面裂纹检测方法对于路面维护、交通安全具有极其重大意义。近年来,路面裂…

基于计算机视觉的裂纹检测方案

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶” 重磅干货&#xff0c;第一时间送达01. 数据集 我们首先需要从互联网上获取包含墙壁裂缝的图像&#xff08;URL格式&#xff09;数据。总共包含1428张图像&#xff1a;其中一半是新的且未损坏的墙壁&#x…

halcon裂纹缺陷检测

针对这一类表面的检测就不能单纯依靠帧差或者背景差来完成&#xff0c;因为背景的纹理不可能和当前图像的纹理完全相同。 方法一—局部阈值分割 一、局部阈值分割 1、gen_sin_bandpass–局部阈值分割 dyn_threshold(OrigImage, ThresholdImage : RegionDynThresh : Offset,…