LuatOS-SOC接口文档(air780E)--libgnss - NMEA数据处理

2023-10-29 20:30

本文主要是介绍LuatOS-SOC接口文档(air780E)--libgnss - NMEA数据处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

示例

-- 提醒: 本库输出的坐标,均为 WGS84 坐标系
-- 如需要在国内地图使用, 要转换成对应地图的坐标系, 例如 GCJ02 BD09
-- 相关链接: https://lbsyun.baidu.com/index.php?title=coordinate
-- 相关链接: https://www.openluat.com/GPS-Offset.html-- 方案1, 经lua层进行数据中转
uart.setup(2, 115200)
uart.on(2, "recv", function(id, len)while 1 dolocal data = uart.read(id, 1024)if data and #data > 1 thenlibgnss.parse(data)elsebreakendend
end)
-- 方案2, 适合2022.12.26之后编译固件,效率更高一些
uart.setup(2, 115200)
libgnss.bind(2)-- 可选调试模式
-- libgnss.debug(true)sys.subscribe("GNSS_STATE", function(event, ticks)-- event取值有-- FIXED 定位成功-- LOSE  定位丢失-- ticks是事件发生的时间,一般可以忽略log.info("gnss", "state", event, ticks)
end)

libgnss.parse(str)

处理nmea数据

参数

传入值类型

解释

string

原始nmea数据

返回值

例子

-- 解析nmea数据
libgnss.parse(indata)
log.info("nmea", json.encode(libgnss.getRmc(), "11g"))

libgnss.isFix()

当前是否已经定位成功

参数

返回值

返回值类型

解释

boolean

定位成功与否

例子

log.info("nmea", "isFix", libgnss.isFix())

libgnss.getIntLocation()

获取位置信息

参数

返回值

返回值类型

解释

int

lat数据, 格式为 ddddddddd

int

lng数据, 格式为 ddddddddd

int

speed数据, 单位米. 于2023.9.26修正

例子

-- 建议用libgnss.getRmc(1)
log.info("nmea", "loc", libgnss.getIntLocation())

libgnss.getRmc(data_mode)

获取原始RMC位置信息

参数

传入值类型

解释

int

坐标类数据的格式, 0-DDMM.MMM格式, 1-DDDDDDD格式, 2-DD.DDDDD格式

返回值

返回值类型

解释

table

原始rmc数据

例子

-- 解析nmea
log.info("nmea", "rmc", json.encode(libgnss.getRmc(2)))
-- 实例输出
--[[
{"course":0,"valid":true,   // true定位成功,false定位丢失"lat":23.4067,  // 纬度, 正数为北纬, 负数为南纬"lng":113.231,  // 经度, 正数为东经, 负数为西经"variation":0,  // 地面航向,单位为度,从北向起顺时针计算"speed":0       // 地面速度, 单位为"节""year":2023,    // 年份"month":1,      // 月份, 1-12"day":5,        // 月份天, 1-31"hour":7,       // 小时,0-23"min":23,       // 分钟,0-59"sec":20,       // 秒,0-59
}
]]

libgnss.getGsv()

获取原始GSV信息

参数

返回值

返回值类型

解释

table

原始GSV数据

例子

-- 解析nmea
log.info("nmea", "gsv", json.encode(libgnss.getGsv()))
--[[实例输出
{"total_sats":24,      // 总可见卫星数量"sats":[{"snr":27,     // 信噪比"azimuth":278, // 方向角"elevation":59, // 仰角"tp":0,        // 0 - GPS/SASS/QSZZ, 1 - BD"nr":4         // 卫星编号},// 这里忽略了22个卫星的信息{"snr":0,"azimuth":107,"elevation":19,"tp":1,"nr":31}]
}
]]

libgnss.getGsa(data_mode)

获取原始GSA信息

参数

传入值类型

解释

int

坐标类数据的格式, 0-DDMM.MMM格式, 1-DDDDDDD格式, 2-DD.DDDDD格式

返回值

返回值类型

解释

table

原始GSA数据

例子

-- 获取
log.info("nmea", "gsa", json.encode(libgnss.getGsa(), "11g"))
-- 示例数据
--[[
{"sats":[ // 正在使用的卫星编号9,6,16,16,26,21,27,27,4,36,3,7,8,194],"vdop":0.03083333, // 垂直精度因子,0.00 - 99.99,不定位时值为 99.99"pdop":0.0455,     // 水平精度因子,0.00 - 99.99,不定位时值为 99.99"fix_type":3,      // 定位模式, 1-未定位, 2-2D定位, 3-3D定位"hdop":0.0335      // 位置精度因子,0.00 - 99.99,不定位时值为 99.99
}
]]

libgnss.getVtg(data_mode)

获取VTA速度信息

参数

传入值类型

解释

int

可选, 3-原始字符串, 不传或者传其他值, 则返回浮点值

返回值

返回值类型

解释

table

原始VTA数据

例子

-- 解析nmea
log.info("nmea", "vtg", json.encode(libgnss.getVtg()))
-- 示例
--[[
{"speed_knots":0,        // 速度, 英里/小时"true_track_degrees":0,  // 真北方向角"magnetic_track_degrees":0, // 磁北方向角"speed_kph":0           // 速度, 千米/小时
}
]]

libgnss.getZda()

获取原始ZDA时间和日期信息

参数

返回值

返回值类型

解释

table

原始zda数据

例子

log.info("nmea", "zda", json.encode(libgnss.getZda()))
-- 实例输出
--[[
{"minute_offset":0,   // 本地时区的分钟, 一般固定输出0"hour_offset":0,     // 本地时区的小时, 一般固定输出0"year":2023         // UTC 年,四位数字"month":1,          // UTC 月,两位,01 ~ 12"day":5,            // UTC 日,两位数字,01 ~ 31"hour":7,           // 小时"min":50,           // 分"sec":14,           // 秒
}
]]

libgnss.debug(mode)

设置调试模式

参数

传入值类型

解释

bool

true开启调试,false关闭调试,默认为false

返回值

例子

-- 开启调试, 会输出GNSS原始数据到日志中
libgnss.debug(true)
-- 关闭调试
libgnss.debug(false)

libgnss.getGga(data_mode)

获取GGA数据

参数

传入值类型

解释

int

坐标类数据的格式, 0-DDMM.MMM格式, 1-DDDDDDD格式, 2-DD.DDDDD格式, 3-原始字符串

返回值

返回值类型

解释

table

GGA数据, 若如不存在会返回nil

例子

local gga = libgnss.getGga(2)
if gga thenlog.info("GGA", json.encode(gga, "11g"))
end
--实例输出
--[[
{"dgps_age":0,             // 差分校正时延,单位为秒"fix_quality":1,          // 定位状态标识 0 - 无效,1 - 单点定位,2 - 差分定位"satellites_tracked":14,  // 参与定位的卫星数量"altitude":0.255,         // 海平面分离度, 或者成为海拔, 单位是米,"hdop":0.0335,            // 水平精度因子,0.00 - 99.99,不定位时值为 99.99"longitude":113.231,      // 经度, 正数为东经, 负数为西经"latitude":23.4067,       // 纬度, 正数为北纬, 负数为南纬"height":0                // 椭球高,固定输出 1 位小数
}
]]

libgnss.getGll(data_mode)

获取GLL数据

参数

传入值类型

解释

int

坐标类数据的格式, 0-DDMM.MMM格式, 1-DDDDDDD格式, 2-DD.DDDDD格式

返回值

返回值类型

解释

table

GLL数据, 若如不存在会返回nil

例子

local gll = libgnss.getGll(2)
if gll thenlog.info("GLL", json.encode(gll, "11g"))
end
-- 实例数据
--[[
{"status":"A",        // 定位状态, A有效, B无效"mode":"A",          // 定位模式, V无效, A单点解, D差分解"sec":20,            // 秒, UTC时间为准"min":23,            // 分钟, UTC时间为准"hour":7,            // 小时, UTC时间为准"longitude":113.231, // 经度, 正数为东经, 负数为西经"latitude":23.4067,  // 纬度, 正数为北纬, 负数为南纬"us":0               // 微妙数, 通常为0
}
]]

libgnss.clear()

清除历史定位数据

参数

返回值

返回值类型

解释

nil

无返回值

例子

-- 该操作会清除所有定位数据

libgnss.bind(id, next_id)

绑定uart端口进行GNSS数据读取

参数

传入值类型

解释

int

uart端口号

int

转发到uart的id, 例如虚拟uart.VUART_0

返回值

例子

-- 配置串口信息, 通常为 115200 8N1
uart.setup(2, 115200)
-- 绑定uart, 马上开始解析GNSS数据
libgnss.bind(2)
-- 无需再调用uart.on然后调用libgnss.parse
-- 开发期可打开调试日志
libgnss.debug(true)-- 2023-01-02之后编译的固件有效
-- 从uart2读取并解析, 同时转发到虚拟串口0
libgnss.bind(2, uart.VUART_0)

libgnss.locStr(mode)

获取位置字符串

参数

传入值类型

解释

int

字符串模式. 0- Air780EG所需的格式

return

指定模式的字符串

返回值

例子

-- 仅推荐在定位成功后调用

libgnss.rtcAuto(enable)

定位成功后自动设置RTC

参数

传入值类型

解释

bool

开启与否, 默认是false关闭

返回值

例子

-- 开启自动设置RTC
libgnss.rtcAuto(true)

libgnss.on(tp, fn)

底层事件回调

参数

传入值类型

解释

string

事件类型,当前支持”raw”

返回值

例子

-- 本函数一般用于调试, 用于获取底层实际收到的数据
libgnss.on("raw", function(data)log.info("GNSS", data)
end)

libgnss.getTxt()

获取非标的GPTXT数据

参数

传入值类型

解释

return

GPTXT所携带的字符串

返回值

例子

-- 本函数于2023.6.6 添加
log.info("gnss", "txt", libgnss.getTxt())-- 测试语句
libgnss.parse("$GPTXT,01,01,01,ANTENNA SHORT*63\r\n")
log.info("GNSS", libgnss.getTxt())
libgnss.parse("$GPTXT,01,01,01,ANTENNA OPEN*25\r\n")
log.info("GNSS", libgnss.getTxt())
libgnss.parse("$GPTXT,01,01,01,ANTENNA OK*35\r\n")
log.info("GNSS", libgnss.getTxt())

这篇关于LuatOS-SOC接口文档(air780E)--libgnss - NMEA数据处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/303169

相关文章

Maven项目中集成数据库文档生成工具的操作步骤

《Maven项目中集成数据库文档生成工具的操作步骤》在Maven项目中,可以通过集成数据库文档生成工具来自动生成数据库文档,本文为大家整理了使用screw-maven-plugin(推荐)的完... 目录1. 添加插件配置到 pom.XML2. 配置数据库信息3. 执行生成命令4. 高级配置选项5. 注意事

Java中的Closeable接口及常见问题

《Java中的Closeable接口及常见问题》Closeable是Java中的一个标记接口,用于表示可以被关闭的对象,它定义了一个标准的方法来释放对象占用的系统资源,下面给大家介绍Java中的Clo... 目录1. Closeable接口概述2. 主要用途3. 实现类4. 使用方法5. 实现自定义Clos

Python使用python-docx实现自动化处理Word文档

《Python使用python-docx实现自动化处理Word文档》这篇文章主要为大家展示了Python如何通过代码实现段落样式复制,HTML表格转Word表格以及动态生成可定制化模板的功能,感兴趣的... 目录一、引言二、核心功能模块解析1. 段落样式与图片复制2. html表格转Word表格3. 模板生

java对接第三方接口的三种实现方式

《java对接第三方接口的三种实现方式》:本文主要介绍java对接第三方接口的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录HttpURLConnection调用方法CloseableHttpClient调用RestTemplate调用总结在日常工作

Java 的 Condition 接口与等待通知机制详解

《Java的Condition接口与等待通知机制详解》在Java并发编程里,实现线程间的协作与同步是极为关键的任务,本文将深入探究Condition接口及其背后的等待通知机制,感兴趣的朋友一起看... 目录一、引言二、Condition 接口概述2.1 基本概念2.2 与 Object 类等待通知方法的区别

SpringBoot实现接口数据加解密的三种实战方案

《SpringBoot实现接口数据加解密的三种实战方案》在金融支付、用户隐私信息传输等场景中,接口数据若以明文传输,极易被中间人攻击窃取,SpringBoot提供了多种优雅的加解密实现方案,本文将从原... 目录一、为什么需要接口数据加解密?二、核心加解密算法选择1. 对称加密(AES)2. 非对称加密(R

Java对接Dify API接口的完整流程

《Java对接DifyAPI接口的完整流程》Dify是一款AI应用开发平台,提供多种自然语言处理能力,通过调用Dify开放API,开发者可以快速集成智能对话、文本生成等功能到自己的Java应用中,本... 目录Java对接Dify API接口完整指南一、Dify API简介二、准备工作三、基础对接实现1.

浅谈Redis Key 命名规范文档

《浅谈RedisKey命名规范文档》本文介绍了Redis键名命名规范,包括命名格式、具体规范、数据类型扩展命名、时间敏感型键名、规范总结以及实际应用示例,感兴趣的可以了解一下... 目录1. 命名格式格式模板:示例:2. 具体规范2.1 小写命名2.2 使用冒号分隔层级2.3 标识符命名3. 数据类型扩展命

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及

MySQL重复数据处理的七种高效方法

《MySQL重复数据处理的七种高效方法》你是不是也曾遇到过这样的烦恼:明明系统测试时一切正常,上线后却频频出现重复数据,大批量导数据时,总有那么几条不听话的记录导致整个事务莫名回滚,今天,我就跟大家分... 目录1. 重复数据插入问题分析1.1 问题本质1.2 常见场景图2. 基础解决方案:使用异常捕获3.