NMEA协议解析

2023-11-18

一、NMEA0183协议

NMEA0183协议协议解析,详细 NMEA协议标准参考 http://www.nmea.org/,NMEA详细协议下载链接:链接:https://pan.baidu.com/s/14dkAlVcFhPjCho5t37GRQw ,提取码:uxss 。图1是接收到一包GPS数据,包含30行数据。

1、NMEA基本框架·

以第1行数据为例:$GNGGA,081729.804,,,,,0,0,,,M,,M,,*5F<CR><LF>

$是起始符,所有的语句都是以$开始

<CR><LF>是回车换行符为结束序列,所有的语句都是以<CR><LF>结束

<CR>:ASCII 13, \r

<LF>:ASCII 10, \n

*5F*后面跟的是校验和,其中5F代表校验和,对$*之间的数据(不包括这两个字符)按字节进行异或运算的结果,以十六进制表示。

2、常用语句

1)GNGGA

以第1行数据为例:$GNGGA,081729.804,,,,,0,0,,,M,,M,,*5F<CR><LF>。GNGGA的GN是发送器的标识符,表示是GNSS,定义如下:

发送器 标识符
北斗导航卫星系统(BDS) BD
全球定位系统(GPS、SBAS、QZSS) GP
全球导航卫星系统(GLONASS) GL
全球导航卫星系统(GNSS) GN
自定义信息 P

GGA:输出接收机时间、位置及定位相关的数据。

格式:$--GGA,UTCtime,Lat,uLat,Lon,uLon,FS,numSv,HDOP,Msl,uMsl,Sep,uSep,DiffAge,DiffSta*CS<CR><LF>

081729.804表示UTC时间8h:17min:29.804s,UTC时间格式是hhmmss.sss,北京时间需要在此基础上+8h

因为这一包数据是未定位数据,所以有,,,,,少了四个数据对应经纬度信息。

,0,0,第一个0表示当前定位不可用或无效,第2个0表示用于定位的卫星数量为0。

,M,,M,这2个M都是固定字符,高度的单位米。

2)GNGLL

$GNGLL,,,,,081729.804,V,N*6D<CR><LF>

同上因为未定位,无经纬度信息,多以有5个,

081729.804表示UTC时间同上。

VN均表示数据无效。

6D表示BCC校验和。

3)GNGSA

$GNGSA,A,1,,,,,,,,,,,,,,,,1*1D<CR><LF>

A表示自动切换

1表示定位无效

4)GPGSV

$GPGSV,4,1,13,10,69,178,35,196,64,139,25,194,61,094,,32,53,007,35,1*65<CR><LF>

$GPGSV,4,2,13,25,51,063,28,31,48,279,27,22,38,330,,23,37,158,,1*69<CR><LF>

$GPGSV,4,3,13,26,21,204,,12,19,044,,195,12,154,,29,07,124,,1*5E<CR><LF>

$GPGSV,4,4,13,21,05,290,,1*5B<CR><LF>

4表示该条GSV语句中有4个参数组。

1表示该条是第1句,后面有$GPGSV,4,2$GPGSV,4,3$GPGSV,4,4

因为总共卫星数为13>4,所以需要13/4=3余1,也就是需要四个语句。以第一个语句为例,包含了四颗卫星的信息,分别是10,69,178,35196,64,139,25194,61,094,,32,53,007,35,其中第3组信息中载噪比为空,表示没有跟踪到编号194的卫星。

5)GNRMC

$GNRMC,081729.804,V,,,,,,,111022,,,N,V*21<CR><LF>

081729.804表示UTC时间同上。

V表示数据无效。

111022表示22年10月11日,数据格式为ddmmyy(先日后月再年)

N所在位是定位模式标志,表示数据无效。

6)GNVTG

$GNVTG,,T,,M,,N,,K,N*32<CR><LF>

对应解析数据即可。T、M、N、K均是固定字符。

7)GNZDA

$GNZDA,081729.804,11,10,2022,,*42<CR><LF>

081729.804表示UTC时间同上。

11,10,2022表示日/月/年。

8)PAIRCLK等

P表示的是自定义消息。

二、异或校验和代码

1、网址在线计算BCC

计算BCC(Block Check Character)校验和的网址:http://www.ip33.com/bcc.html,选择Ascii码作为输入。

验证GPS数据包中第1行数据进行BCC校验计算验证,结果为0x64与数据包中的一致。

2、BCC校验和代码

unsigned char getBcc(unsigned char *data, unsigned int length)
{
    unsigned int i;
    unsigned char bcc = 0;        // Initial value
#if 1
	while(length--)
	{
		bcc ^= *data++;
	}		
#else
	for ( i = 0; i < length; i++ )
	{
		bcc ^= data[i];        // crc ^= *data;
	}
#endif	
    return bcc;
}
 
int main(void)
{
    unsigned char data[] = "GNGGA,081729.804,,,,,0,0,,,M,,M,,";				//ASCII输入
//    unsigned char data[] = {0xFF, 0x0A, 0x0B, 0x0C};						//Hex输入
    unsigned char bcc;
 
    bcc = getBcc(data, sizeof(data));
 
	for(unsigned int i = 0; i < sizeof(data); i++) {
		printf("data[%d]:%02X\n", i, data[i]);			
	}
    printf("bcc:%02X\n", bcc);
}

BCC校验和代码也为0x5F,结果正确。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NMEA协议解析 的相关文章

  • 在带有校准点的地图上将经度和纬度转换为 X Y

    如果我有一张尺寸为 sizeX sizeY 的 jpeg 地图 以及地图上的一些校准点 X Y 经度 纬度 使用给定的经度 纬度对计算地图中相应 XY 点的算法是什么 这对我有用 没有那么多废话 int x int MAP WIDTH 36
  • 如何确定当前用户位置是否在我的 MKCooperativeRegion 内?

    我有一个坐标区域 我已确定该区域包含我想要为我的应用程序显示的内容的限制 我已将其设置为具有中心点纬度 经度和跨度的 MKCooperativeRegion 如何确定当前 userLocation 是否在我的坐标区域内 使用地图矩形 这是使
  • C# .net cf 中的 nmea 校验和

    我正在尝试编写自己的 nmea 解析器 因为我只需要来自 GPS 的一些信息 并且不需要解释所有消息 我遇到的问题是我的 nmea 消息验证器给了我一个错误的校验和 有人能看到我做错了什么吗 我正在使用这个想法Codepedia 计算和验证
  • 我如何从 JMapViewer 世界地图中获取鼠标单击位置

    我正在使用地图浏览器 http wiki openstreetmap org wiki JMapViewerjar 在 JPanel 上显示世界地图 在地图上我添加MapMarkerDot s这是 GPS 点 问题是当我单击MapMarke
  • 从 GPS 点绘制线

    我有大约 100 个 GPS 坐标列表 我想画出每个列表所构成的线 使用散点图绘制的列表之一 看起来有点像这样 显然那里有一条线 我尝试了几种方法来对 GPS 位置进行排序并绘制它们 lats lngs with open filename
  • Android 应用无法获取位置权限

    我的清单中有以下内容
  • 在不改变我的位置的情况下获取当前位置的经度和纬度

    我可以找到当前位置的纬度和经度 但是这些数据在更改我的当前位置之前不会显示 我想在不更改我的位置的情况下获取当前位置的经度和纬度 package com example gps import android app Activity imp
  • 在没有互联网的情况下使用 Javascript 获取 GPS 位置 [重复]

    这个问题在这里已经有答案了 您好 如果设备具有 GPS 硬件 我们可以在没有互联网连接的情况下使用 JavaScript 获取 GPS 位置吗 请注意谁将其标记为重复 我需要 JavaScript 在没有互联网连接的情况下工作 并使用 GP
  • 如何从 Android 手机获取 GPS 数据?

    有没有办法将 Android 手机的 GPS 数据连接 USB 有线 到 PC 我目前正在使用基于 gpsd 项目的 GPSTether 应用程序 我正在寻找比该应用程序提供更多控制且错误更少的替代方案 另外 是否有另一种方法可以在不使用任
  • 如何知道jar文件是否已经在运行?

    经过谷歌研究后 我找到了很好的答案 例如 1 using jps or jps l让 jars 在 JVM 下运行 这个答案可以 但是如果用户根本没有安装java并且我使用例如 bat文件和带有java JRE的文件夹运行我的jar 另外
  • LocationManager requestLocationUpdates minTime OR minDistance

    我用的是安卓系统LocationManager及其方法requestLocationUpdates像这样 locationManager requestLocationUpdates LocationManager GPS PROVIDER
  • 使用 Google 电子表格中的脚本从手机获取我的当前位置

    有没有办法使用 Google Apps 脚本从手机的 GPS 数据中获取我的当前位置 纬度和经度 最好是十进制形式 另外 是否可以打开和关闭 GPS 或者至少检测它是否打开或关闭 这是我尝试做的 我带着电动助力车去一些地方 在每个地方我都会
  • iPhone 网络应用程序可以获取 GPS 位置吗?

    有没有一种简单的方法来设计一个网站来促进iphone用户提供gps网站坐标 我想知道表单字段是否有命名约定 例如 让用户以自动方式输入 我正在考虑建立一个基于位置的网站 并希望为 iPhone 和其他移动用户 量身定制 我意识到 iPhon
  • requestLocationUpdates minTime 参数用途

    我正在创建一个应用程序 用于教育目的 它每 30 分钟记录一次用户的位置 并使用户能够查看地图上的所有位置 我不希望更新频率超过 30 分钟 但事实确实如此 这就是我的称呼requestLocationUpdates locationMan
  • Fused Location Provider 是不错的选择吗?

    我正在开发一个应用程序 我想在其中使用融合位置提供程序 但我有一些疑问 还有几个问题 当 GPS 关闭并且我将优先级设置为 HIGH 时 是否意味着 GPS 会自动打开 我可以根据需要将 UpdateLocation 设置为具有高优先级的
  • 是否可以自定义区域形状?核心位置

    例如 至少我想要一个正方形 矩形 道路的形状作为我的区域 不它不是 根据文档 目前唯一的区域类是 CLCircularRegion 显然是圆形 和 CLBeaconRegion 基于与 iBeacon 的接近度 未来苹果可能会添加对自定义形
  • 在android API 23中获取用户的位置

    我可以编写获取用户位置的代码 并且在 API 更多细节 我手动启用设备的 GPS 第一次运行应用程序请求权限并且没有日志返回 在下次运行应用程序时 返回我准备好的 Toast 检查您的提供商 这是我写的代码 public class Mai
  • 如何在从另一个活动调用一个活动时延迟一些?

    我有一个应用程序 其中我正在接收包含他的位置的短信 收到短信后 它会调用另一个活动来启动并将该位置传递给该活动以将其绘制在地图上 在调用第二个活动之前 它会显示一个类似于通知的吐司在屏幕上 但由于调用第二个活动 吐司没有出现 我的问题是我们
  • Android:CellID 不适用于所有运营商?

    当我请求 Cell ID 和 LAC 信息时 在某些设备上我无法检索它们 我使用这段代码 TelephonyManager tm TelephonyManager getSystemService Context TELEPHONY SER
  • Android 7.0+ 屏幕关闭时前台服务无法接收位置更新

    我正在尝试创建一个 Android 应用程序 在设备屏幕关闭时连续实时记录设备位置数据 我的代码可以在 Android 6 0 及更早版本中正常运行 但 Android 7 0 似乎会破坏我的应用程序 我已经实现了一个 Android 前台

随机推荐

  • eclipse 使用maven构建 springboot +swagger

    swagger用于定义API文档 好处 1 前后端分离开发 2 API文档非常明确 3 测试的时候不需要再使用URL输入浏览器的方式来访问Controller 4 传统的输入URL的测试方式对于post请求的传参比较麻烦 当然 可以使用po
  • vue 记住密码下次自动登录

    div div
  • <HarmonyOS第一课>运行Hello World课后作业

    前言 HarmonyOS应用开发者基础认证课程课后习题 仅供参考 也欢迎各位小伙伴讨论指正 习题 判断题 1 DevEco Studio是开发HarmonyOS应用的一站式集成开发环境 正确 True 2 main pages json存放
  • [Qt]基础数据类型和信号槽

    文章目录 1 Qt基本结构 1 1 Qt本有项目 1 1 1 项目文件 pro 1 1 2 main cpp 1 1 3 mainwindow ui 1 1 4 mainwindow h 1 1 5 mainwindow cpp 1 2 Q
  • 使用libvirt管理KVM虚拟机

    使用libvirt管理KVM虚拟机 一 安装虚拟化管理工具 1 yum install virt manager libvirt libvirt python python virtinst 1 kmod kvm kvm kernel mo
  • 微信小程序wx.canvasToTempFilePath压缩上传图片,ios压缩成功但是数据sm2加密后无法发起请求,安卓一切正常

    问题以及解决 吐槽遇到的问题 在写微信小程序的时候 采用wx canvasToTempFilePath压缩图片且上传的时候 安卓一切正常 我在开发工具上也一切正常 偏偏ios上就不正常 不正常不是指压缩失败 而是明明也压缩成功了 竟然发不起
  • linux设备驱动makefile入门解析

    以下内容仅作参考 能力有限 如有错误还请纠正 对于一个普通的linux设备驱动模块 以下是一个经典的makefile代码 使用下面这个makefile可以 完成大部分驱动的编译 使用时只需要修改一下要编译生成的驱动名称即可 只需修改obj
  • 关于socket大数据收发解决方案

    关于socket大数据收发 现在遇到个问题 我们这边是做客户端的 服务器端是socket 不是我们写的 看不到源码 走的是tcp协议 我们的socket客户端在接收大数据 大约大于5000个byte 的时候总是不能一次性的接收所有的数据 一
  • 知乎 爬虫

    import requests from pyquery import PyQuery as pq def getHtml url try headers User Agent Mozilla 5 0 Macintosh Intel Mac
  • 远程桌面出现了内部错误有哪些解决方法?

    远程桌面连接出现了内部错误解决方法 在使用Windows自带远程桌面连接时 有时会遇到 远程桌面出现了内部错误 这一问题 许多用户不知道如何解决远程桌面连接出现了内部错误 这里我们整理了五种有效的解决方法 分享出来以供参考 方法一 重启远程
  • ETL使用Kettle处理银行信用卡申请项目

    一 项目概述 对当天申请信用卡人员进行信息校对 对不符合人员进行风险标注 无风险人员信息根据所在地区进行分表 交付 信息来源 1 web端 银行网页申请 2 移动端 网银 手机银行 3 三方 各类门户网站 手机APP 4 柜台 人工柜台 A
  • 利用GIT钩子函数实现自动部署或其他操作

    1 Server端 第一步 创建初始化一个裸仓库 用来添加钩子函数 git init bare test git hook function git 第二步 通过裸仓库创建一个用来存放代码的仓库 git init test git hook
  • latex算法步骤,子代码编号及修改算法框的宽度

    看了官方文档和网上一下资料 对于一个步骤下面有好多子步骤的算法 大多是通过for循环与while判断实现的 而且对于for下面的每一步骤没有重新编码 感觉很乱 不好看 论文的参考文有下图的结构 感觉很好 可以一用 主要用到下面这个代码块 其
  • 被C语言的malloc给坑了

    事情是这样的 最近想用C语言实现一些数据结构 今天在写二叉树时在linux下使用gcc编码是没有任何问题的 然而当我在本地window使用clion编写时 同样的代码竟然不能用了 反复看了下代码没有任何问题 然后我把代码拷贝到linux中用
  • redis集群配置

    分片集群搭建 springboot集成redis 相关配置 spring redis timeout 3000 database 0 cluster node 127 0 0 1 7000 127 0 0 1 7001 127 0 0 1
  • SpringBoot 文件上传解决跨域问题

    后端解决跨域问题 在Controller接口上加上 CrossOrigin注解就可以 该注解可以加在类上 也可以加在方法上 一般的请求处理数据都没有问题 但是如果上传文件就会报跨域的错误 解决这个文件上传跨域的问题 就需要增加一个过滤器配置
  • django解决跨域的方法,django如何解决跨域问题,django如何跨域

    django 使三方工具包解决跨域问题 1 安装 pip install django cors headers 2 到django的配置文件settings py中配置 1 注册到app中 INSTALLED APPS corsheade
  • Thread.UncaughtExceptionHandler

    1 自定义Application继承Application 在清单文件中将默认的Application的android name 替换成自定义的Application对象名称即可 在Oncreate中写入要实现的内容 2 在编写APK程序时
  • SpringBoot @EnableAutoConfiguration exclude属性失效

    在学习SpringBoot的时候 入了不少的坑 今天学习 SpringBootApplication里面的 EnableAutoConfiguration注解的exclude属性的 加载配置中 发现了属性失效的case 病状 exclude
  • NMEA协议解析

    文章目录 一 NMEA0183协议 1 NMEA基本框架 2 常用语句 1 GNGGA 2 GNGLL 3 GNGSA 4 GPGSV 5 GNRMC 6 GNVTG 7 GNZDA 8 PAIRCLK等 二 异或校验和代码 1 网址在线计