《最佳实践之》GPS NMEA-0183 协议,全协议解析

一,了解初步

请看我上篇博客 https://blog.csdn.net/Crazy_Cw/article/details/137515699

二,什么是 NMEA-0183 全协议解析

引入第三方jar 解析,GPGSA、GPGSV、GPGGA、GPRMC、GPVTG

在写解析的时候突然想到,我五种协议都要写个遍吗?这是不是太麻烦了。

于是,我发现了第三方封装好的协议解析jar包,以下是它的代码仓库:

https://github.com/ktuukkan/marine-api

2.1 第三方jar简介

2.2 第三方jar,如何使用

2.3 第三方jar,支持协议

maven地址:

https://mvnrepository.com/artifact/net.sf.marineapi/marineapi/0.11.0

三,项目实践

假设你有java 5年开发经验,忽略框架部分。第三方源码,此文章不解释。

3.1 引入依赖

xml 复制代码
          <dependency>
            <groupId>net.sf.marineapi</groupId>
            <artifactId>marineapi</artifactId>
            <version>0.11.0</version>
        </dependency>

3.2 使用 springboot 接口,初始化

xml 复制代码
package com.joyaiot.vehiclemonitor.config;

import com.joyaiot.vehiclemonitor.netty.util.GpsListener;
import lombok.extern.slf4j.Slf4j;
import net.sf.marineapi.nmea.io.SentenceReader;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

import java.net.DatagramSocket;

/**
 * 功能描述: 任务队列
 * @Author keLe
 * @Date 2022/7/20
 */
@Component
@Slf4j
public class LaunchRunner implements CommandLineRunner {

    @Override
    public void run(String... args) throws Exception {
        // 使用UDP链接,监听 10183 端口
        DatagramSocket source = new DatagramSocket(10183);
        SentenceReader reader = new SentenceReader(source);
		
		// 使用 我们自定义的 监听器解析 GPRMC 协议
        reader.addSentenceListener(new GPRMCListener());
        reader.start();
        log.info("启动成功:监听ip:{127.0.0.1},端口:{10011}");
    }

}

3.3 编写 GPRMC 协议监听器

以下字段不在做解析,这里假设你已经有了开发此协议的经验

java 复制代码
package com.joyaiot.vehiclemonitor.listener;

import net.sf.marineapi.nmea.event.AbstractSentenceListener;
import net.sf.marineapi.nmea.sentence.RMCSentence;
import net.sf.marineapi.nmea.util.DataStatus;
import net.sf.marineapi.nmea.util.Date;
import net.sf.marineapi.nmea.util.FaaMode;
import net.sf.marineapi.nmea.util.Position;

/**
 * 功能描述: GPRMC 协议监听器
 *
 * @Author keLe
 * @Date 2024/4/8
 */
public class GPRMCListener extends AbstractSentenceListener<RMCSentence> {

    @Override
    public void sentenceRead(RMCSentence sentence) {
        FaaMode mode = sentence.getMode();
        double correctedCourse = sentence.getCorrectedCourse();

        DataStatus status = sentence.getStatus();

        double speed = sentence.getSpeed();

        double course = sentence.getCourse();

        Date date = sentence.getDate();

        Position position = sentence.getPosition();
        System.out.println(1111111111);
    }
}

这里给大家重点看下源码

这个 Sentence 的 子类接口,就是所有协议的具体解析

四,测试

4.1 使用 udp 工具

百度网盘地址:

链接:https://pan.baidu.com/s/1LTpdPHSwbHl4p6dcRtWbjQ

提取码:dzfx

启动服务端

发送数据

可以看到 所有的值都解析成功了。至此完毕!

相关推荐
调试优选官4 天前
IoT物联网系统定制落地实践:从设备接入、协议网关、平台分层到业务应用,如何做技术选型、交付验收、责任边界与长期运维成本评估及迁移安排
物联网·iot·成本分析
华允物联-HUAIOT4 天前
工业路由器和DTU在联网方式上的区别
物联网
wuyk5554 天前
《WiFi 嵌入式物联网开发全套实战》| 第 16 章 ESP32 AP+STA 双模共存原理与工程坑点
网络·stm32·物联网
码流子4 天前
高速公路安全监测实践:碰撞监测预警+物联网底座,从感知到处置的闭环
大数据·人工智能·物联网·算法·架构
XUEYUAN52124 天前
ASN 自治系统号风控:平台如何通过 IP 所属自治域批量识别代理流量
python·网络协议·http·网络安全·socks5
绿蕉4 天前
配电房的“AI听诊师”:可视化声纹局放智能巡检系统与通讯保障
物联网
CHENKONG_CK4 天前
破解制鞋打磨痛点:RFID赋能去毛刺工序自动化升级
网络·单片机·嵌入式硬件·网络协议·tcp/ip
chshang19924 天前
工业路由器是什么?浅谈5G工业网络中的IR602
网络·物联网·5g·智能路由器
做萤石二次开发的哈哈4 天前
海康商用音频主机接入萤石蓝海 AIoT:多路拾音、矩阵路由、分区广播、应急广播四类技能,IP 网络广播系统多端开发实战
物联网·音频矩阵·萤石开放平台·ip网络广播·蓝海aiot一站式工作台·aiot开发·公共广播
wuyk5554 天前
【Socket 进阶之路】第 9 章 Linux 网络服务量产稳定性优化|心跳保活、TIME_WAIT、SO_LINGER、内存池、断线重连、完整异常防护框架
linux·服务器·开发语言·网络·物联网