核心内容摘要
SpringBoot整合实时手机检测-通用模型:企业级应用开发
目录
初学者基础认知
协议定位与核心作用
协议特点适合初学者理解
标准通信参数
协议核心帧格式详解
起始符$
地址域aaXXX
数据域data1,data2,...,dataN
校验和分隔符*
校验和HH
结束符
典型核心语句解析初学者必掌握
GGA 语句GPS 定位数据Global Positioning System Fix Data
RMC 语句推荐最小定位信息Recommended Minimum Specific GPS/TRANSIT Data
技术要点初学者避坑指南
数据接收与解析流程嵌入式系统常用
2.
常见问题与解决方法
协议扩展与兼容
典型应用场景
嵌入式定位终端初学者最常用
车载导航系统
无人机飞控系统
航海设备互联
初学者实战建议NMEA 0183 是由美国国家海洋电子协会National Marine Electronics Association制定的串行通信协议标准最初用于航海电子设备如 GPS、雷达、测深仪之间的互联互通目前已成为卫星定位、导航领域的通用协议广泛应用于车载导航、无人机飞控、物联网定位终端等嵌入式系统中。
本详解面向初学者从协议基础、帧结构、核心语句、技术要点到典型应用进行全方位拆解帮助快速掌握协议本质及应用方法。
初学者基础认知
协议定位与核心作用NMEA 0183 是一种ASCII 文本协议采用串行异步通信方式定义了导航设备之间数据传输的格式规范。
其核心作用是统一不同设备的输出数据格式如 GPS 模块输出的位置、速度、时间信息实现跨设备数据交互如 GPS 模块向单片机、上位机传输定位数据。
协议特点适合初学者理解特点说明ASCII 文本格式数据以可读字符串形式传输无需复杂解码便于调试串行异步通信依赖 UART/USART 物理层通信参数可配置标准参数为 4800bps帧式传输数据以 “帧” 为单位发送每帧独立完整支持错误校验多语句类型定义了数十种语句如 GGA、RMC分别对应不同的导航数据主从结构一个主设备如 GPS 模块可向多个从设备如单片机发送数据
标准通信参数NMEA 0183 的默认串行通信参数是初学者必须牢记的配置也是设备通信成功的前提波特率4800 bps部分模块支持 9600/115200 bps需手动配置数据位8 bit停止位1 bit校验位无流控无
协议核心帧格式详解NMEA 0183 的数据帧结构是协议的灵魂所有数据均以固定帧格式传输。
单帧完整结构如下$aaXXX,data1,data2,...,dataN*HHCRLF我们将其拆解为6 个核心部分逐一解析
起始符$作用标记一帧数据的开始告诉接收端 “后续为有效 NMEA 数据”。
格式必须是 ASCII 字符$不可省略或替换。
地址域aaXXX长度5 个 ASCII 字符分为2 位设备类型码3 位语句类型码。
设备类型码aa表示发送数据的设备类型常见值GPGPS 系统BD北斗系统GLGLONASS 系统GN多系统融合GPS 北斗 GLONASS语句类型码XXX表示数据帧的类型如GGA定位数据、RMC推荐最小定位信息。
示例$GPGGA→ GPS 设备发送的 GGA 类型定位数据。
数据域data1,data2,...,dataN作用帧的核心内容包含具体的导航数据如经纬度、海拔、卫星数。
格式多个数据字段用英文逗号,分隔字段为空时逗号不可省略表示该字段无数据。
字段含义随语句类型XXX变化不同语句的字段数量和含义完全不同。
示例$GPGGA,123519,
4
038,N,
0
000,E,1,08,
9,
5
4,M,
4
9,M,,*47中123519是 UTC 时间
4
038,N是纬度。
校验和分隔符*作用分隔数据域与校验和标记后续为校验信息。
格式必须是 ASCII 字符*位于数据域末尾、校验和之前。
校验和HH长度2 位十六进制 ASCII 字符00~FF。
作用验证数据帧在传输过程中是否被篡改或出错是保证数据可靠性的关键。
计算方法取帧中从$的下一个字符开始到*之前的所有字符不含$和*将这些字符按字节进行异或运算XOR初始值为 0将异或结果转换为两位大写十六进制字符串即为校验和。
验证方法接收端按相同规则计算校验和与帧中的HH对比一致则数据有效否则丢弃。
示例计算帧片段GPGGA,123519,
4
038,N,
0
000,E,1,08,
9,
5
4,M,
4
9,M,,计算过程G XOR P XOR G XOR G XOR A XOR , XOR ... XOR ,→ 结果为 0x47 → 校验和为47。
结束符CRLF组成ASCII 回车符\r0x0D 换行符\n0x0A。
作用标记一帧数据的结束接收端检测到该组合后判定当前帧接收完成。
典型核心语句解析初学者必掌握NMEA 0183 定义了数十种语句但初学者只需掌握2 种核心语句即可满足 80% 的定位应用需求GGA 语句完整定位数据和RMC 语句推荐最小定位信息。
GGA 语句GPS 定位数据Global Positioning System Fix Data核心作用输出完整的 GPS 定位信息包含时间、经纬度、定位质量、卫星数、海拔等。
帧格式$GPGGA,UTC时间,纬度,纬度半球,经度,经度半球,定位质量,卫星数,HDOP,海拔高度,海拔单位,大地水准面高度,高度单位,差分时间,差分站ID*校验和CRLF字段详细说明字段序号字段含义示例值补充说明1UTC 时间123519格式为hhmmss时 - 分 - 秒时区为 UTC2纬度
4
038格式为ddmm.mmmm度 - 分。
分的小数部分3纬度半球NN 北纬S 南纬4经度
0
000格式为dddmm.mmmm度 - 分。
分的小数部分5经度半球EE 东经W 西经6定位质量10 无效定位1GPS 定位2 差分 GPS 定位7卫星数08参与定位的卫星数量范围 0~328HDOP
9水平精度因子值越小精度越高9海拔高度
5
4相对于大地水准面的高度10海拔单位M固定为米M11大地水准面高度
4
9大地水准面与椭球面的高度差12高度单位M固定为米M13差分时间空差分 GPS 数据的更新时间单位秒14差分站 ID空差分参考站的 ID 号范围 0~1023初学者关键转换经纬度格式转换NMEA 输出的经纬度是度分格式而实际应用中常需转换为十进制度格式公式如下十进制纬度 度 分 / 60 → 示例
4
038N 48°
038′/60
4
1173°N十进制经度 度 分 / 60 → 示例
0
000E 11°
3
000′/60
1
5167°E
RMC 语句推荐最小定位信息Recommended Minimum Specific GPS/TRANSIT Data核心作用输出最精简的有效定位信息包含时间、状态、经纬度、速度、航向、日期适合对数据量要求低的场景。
帧格式$GPRMC,UTC时间,状态,纬度,纬度半球,经度,经度半球,地面速度,地面航向,UTC日期,磁偏角,磁偏角方向,模式指示*校验和CRLF关键字段说明字段序号字段含义示例值补充说明1UTC 时间123519格式hhmmss2状态AA 有效定位V 无效定位
经纬度及半球同 GGA 语句-7地面速度
0
0单位为节knot1 节
852 km/h8地面航向
3
0以正北为 0°顺时针方向的角度9UTC 日期230394格式ddmmyy日 - 月 - 年12模式指示AA 自主定位D 差分定位
技术要点初学者避坑指南
数据接收与解析流程嵌入式系统常用对于 STM
HC32 等嵌入式单片机接收解析 NMEA 0183 数据的标准流程如下配置串口按协议参数如 4800 8N1初始化 UART/USART开启接收中断或轮询接收。
帧头检测实时检测串口数据流中的$字符检测到后开始缓存后续数据。
帧尾检测缓存过程中检测CRLF检测到后判定当前帧缓存完成。
校验和验证按协议规则计算缓存数据的校验和与帧中校验和对比验证通过则进入解析。
字段拆分按逗号分隔缓存的字符串提取各字段内容。
数据转换将字符串格式的数值如经纬度、速度转换为浮点数或整数供应用层使用。
2.
常见问题与解决方法
常见问题原因解决方法接收不到数据串口参数不匹配模块未输出 NMEA 数据核对波特率 / 数据位 / 停止位配置模块启用 NMEA 输出数据校验失败传输过程中数据被干扰校验和计算错误增加抗干扰措施如屏蔽线检查异或运算逻辑经纬度计算错误混淆度分格式与十进制格式严格按照转换公式计算注意度和分的划分定位状态为 V无效模块未搜星遮挡严重将模块放置在开阔无遮挡处等待搜星完成
协议扩展与兼容多系统兼容北斗模块输出的语句前缀为$BDGGA多系统融合模块前缀为$GNGGA解析逻辑与 GPS 一致。
波特率配置部分模块支持修改 NMEA 输出波特率如 9600 bps需通过 AT 指令配置。
典型应用场景NMEA 0183 协议的应用已从航海扩展到多个领域典型场景包括
嵌入式定位终端初学者最常用场景基于 STM32F103 的 GPS 定位终端采集经纬度数据并上传到云端。
实现GPS 模块通过串口输出 NMEA 0183 数据 → STM32 串口接收并解析 GGA/RMC 语句 → 提取十进制经纬度 → 通过 GPRS 模块上传到服务器。
车载导航系统场景汽车导航主机获取 GPS 模块的定位数据实现路径规划与地图匹配。
实现GPS 模块输出 NMEA 数据 → 导航主机解析后将定位信息与电子地图融合显示车辆实时位置。
无人机飞控系统场景无人机获取自身位置、速度、航向信息实现自主飞行与定点悬停。
实现飞控板如 STM32H7解析 GPS 模块的 NMEA 数据 → 结合 IMU惯性测量单元数据进行融合定位 → 输出控制指令到电机。
航海设备互联场景船舶的 GPS、雷达、测深仪通过 NMEA 0183 协议互联实现数据共享。
实现GPS 模块输出定位数据 → 雷达设备接收后将定位信息叠加到雷达图像上辅助导航。
初学者实战建议硬件选型选择一款性价比高的 GPS 模块如 Ublox NEO-6M模块自带串口输出 NMEA 数据无需复杂配置。
调试工具使用 USB 转串口模块将 GPS 模块的输出数据接入电脑通过串口助手如 SSCOM查看原始 NMEA 帧直观理解协议格式。
代码实战先实现基于单片机的 NMEA 帧接收与校验再逐步实现字段拆分与经纬度转换最后结合应用场景如显示、上传完成功能。