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

2023-10-24 23:20

本文主要是介绍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/278441

相关文章

C#借助Spire.XLS for .NET实现在Excel中添加文档属性

《C#借助Spire.XLSfor.NET实现在Excel中添加文档属性》在日常的数据处理和项目管理中,Excel文档扮演着举足轻重的角色,本文将深入探讨如何在C#中借助强大的第三方库Spire.... 目录为什么需要程序化添加Excel文档属性使用Spire.XLS for .NET库实现文档属性管理Sp

Java利用Spire.Doc for Java实现在模板的基础上创建Word文档

《Java利用Spire.DocforJava实现在模板的基础上创建Word文档》在日常开发中,我们经常需要根据特定数据动态生成Word文档,本文将深入探讨如何利用强大的Java库Spire.Do... 目录1. Spire.Doc for Java 库介绍与安装特点与优势Maven 依赖配置2. 通过替换

C#实现插入与删除Word文档目录的完整指南

《C#实现插入与删除Word文档目录的完整指南》在日常的办公自动化或文档处理场景中,Word文档的目录扮演着至关重要的角色,本文将深入探讨如何利用强大的第三方库Spire.Docfor.NET,在C#... 目录Spire.Doc for .NET 库:Word 文档处理利器自动化生成:C# 插入 Word

requests处理token鉴权接口和jsonpath使用方式

《requests处理token鉴权接口和jsonpath使用方式》文章介绍了如何使用requests库进行token鉴权接口的处理,包括登录提取token并保存,还详述了如何使用jsonpath表达... 目录requests处理token鉴权接口和jsonpath使用json数据提取工具总结reques

python调用dubbo接口的实现步骤

《python调用dubbo接口的实现步骤》本文主要介绍了python调用dubbo接口的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编... 目录 ​​其他实现方式与注意事项​​ ​​高级技巧与集成​​用 python 提供 Dubbo 接口

Java中接口和抽象类的异同以及具体的使用场景

《Java中接口和抽象类的异同以及具体的使用场景》文章主要介绍了Java中接口(Interface)和抽象类(AbstractClass)的区别和联系,包括相同点和不同点,以及它们在实际开发中的具体使... 目录一、接口和抽象类的 “相同点”二、接口和抽象类的 “核心区别”关键区别详解(避免踩坑)三、具体使

Python实现Word文档自动化的操作大全(批量生成、模板填充与内容修改)

《Python实现Word文档自动化的操作大全(批量生成、模板填充与内容修改)》在职场中,Word文档是公认的好伙伴,但你有没有被它折磨过?批量生成合同、制作报告以及发放证书/通知等等,这些重复、低效... 目录重复性文档制作,手动填充模板,效率低下还易错1.python-docx入门:Word文档的“瑞士

MySQL中C接口的实现

《MySQL中C接口的实现》本节内容介绍使用C/C++访问数据库,包括对数据库的增删查改操作,主要是学习一些接口的调用,具有一定的参考价值,感兴趣的可以了解一下... 目录准备mysql库使用mysql库编译文件官方API文档对象的创建和关闭链接数据库下达sql指令select语句前言:本节内容介绍使用C/

使用EasyPoi快速导出Word文档功能的实现步骤

《使用EasyPoi快速导出Word文档功能的实现步骤》EasyPoi是一个基于ApachePOI的开源Java工具库,旨在简化Excel和Word文档的操作,本文将详细介绍如何使用EasyPoi快速... 目录一、准备工作1、引入依赖二、准备好一个word模版文件三、编写导出方法的工具类四、在Export

利用Python操作Word文档页码的实际应用

《利用Python操作Word文档页码的实际应用》在撰写长篇文档时,经常需要将文档分成多个节,每个节都需要单独的页码,下面:本文主要介绍利用Python操作Word文档页码的相关资料,文中通过代码... 目录需求:文档详情:要求:该程序的功能是:总结需求:一次性处理24个文档的页码。文档详情:1、每个