LuatOS扩展库API——【airlbs 】airlbs 定位服务

LuatOS 是物联网终端开发的常用工具,为轻量级嵌入式 Lua 脚本运行框架兼实时系统,基于 Lua 5.3 深度优化,适配 4G-Cat.1、MCU 等物联网终端硬件。其以 Lua 脚本开发,采用协程多任务架构,配套完善开发资源,含 70 余个核心库、20 余个扩展库及 1000 余个应用 demo,可覆盖物联网开发各类基础场景。

一、概述

airlbs 扩展库是专为高精度需求设计的收费定位服务,其特点在于更高定位精度或额外功能,但需申请授权。免费替代方案为 lbsloc2,定位精度不高。

为了更清晰地了解这两个库的特点,下表对比了它们的主要特性:

区别项 airlbs(付费版) lbsloc2(免费版)
定位原理 多基站/Wi-Fi混合定位,上报多个基站或Wi-Fi信息,通过三角定位法计算坐标 单基站定位,上报单一基站信息,服务器根据存储的基站经纬度直接返回位置
定位精度 10-300米(城市环境),郊区/农村可能更低,但显著优于单基站定位 1.5公里内,误差较大,适用于粗略区域定位
请求频率限制 可选择 2分钟最多1次,超过频次会返回定位失败
功能特性 支持多基站和Wi-Fi混合定位,定位精度高;适用于对精度要求较高的场景 仅支持单基站定位,无Wi-Fi定位功能;适用于对精度要求不高的场景

相较于 lbsloc2,airlbs 的优势在于更高的定位精度,更高的请求频率。基于此在进行项目开发的时候可以根据定位精度以及项目费用预算自行选择。

合宙 lbsloc、lbsloc2、airlbs 三个库介绍:

lua 复制代码
-- lbsloc 是异步回调接口,
-- lbsloc2 是是同步接口。
-- lbsloc比lbsloc2多了一个请求地址文本的功能。
-- lbsloc 和 lbsloc2 都是免费LBS定位的实现方式;
-- airlbs 扩展库是收费 LBS 的实现方式。

二、核心示例

1、核心示例是指:使用本库文件提供的核心 API,开发的基础业务逻辑的演示代码;

2、核心示例的作用是:帮助开发者快速理解如何使用本库,所以核心示例的逻辑都比较简单;

3、更加完整和详细的 demo,请参考 LuatOS 仓库 中各个产品目录下的 demo/airlbs

lua 复制代码
local function airlbs_multi_cells_task_func ()
      while true do
            local result ,data = airlbs.request({
            project_id = airlbs_project_id,--项目ID需根据实际修改
            project_key = airlbs_project_key,--项目密钥需根据实际修改
            timeout = 10000, --可自由设定超时时间
            adapter = nil--选填网络适配器,若不填则默认是平台自带的网络协议栈
            })
        if result then
            log.info("airlbs多基站定位返回的经纬度数据为", json.encode(data))
        end
        else
            log.warn("请检查project_id和project_key")
        end
        sys.wait(20000) -- 循环20S一次多基站定位
     end
end

sys.taskInit(airlbs_multi_cells_task_func)
----日志输出内容示例:
--airlbs多基站定位返回的经纬度数据为 {"lat":31.1354542,"lng":121.5423279}

三、常量详解

airlbs 扩展库没有常量。

四、函数详解

airlbs.request(param)

功能

多基站 +wifi 混合定位,获取定位数据

参数

param

lua 复制代码
> 参数含义:请求airlbs定位的项目id,项目秘钥,超时时间以及网络适配器选择。  
> {  
> 参数含义:项目id,在https://iot.openluat.com/lbs/project-list中获取;  
> 数据类型:string;  
> 取值范围:无特别限制;  
> 是否必选:必须传入此参数;  
> 注意事项:暂无;  
> 参数示例:"lblKo3";  
> 参数名称: param.project\_id
> 
> 参数含义:项目秘钥。;  
> 数据类型:string;  
> 取值范围:无特别限制;  
> 是否必选:可选传入此参数;  
> 注意事项:暂无;  
> 参数示例:"DKqM6sHJkHV23WCzgzTbk7QW7HYGCJxp";  
> 参数名称: param.project\_key
> 
> 参数含义:表示从发送请求到读取到服务器响应整个过程的超时时间;  
> 数据类型:number/nil;  
> 取值范围:无特别限制;  
> 是否必选:可选传入此参数;  
> 注意事项:暂无;  
> 参数示例:15000;  
> 参数名称: param.timeout
> 
> 参数含义:上网使用的网卡ID;  
> 数据类型:number或者nil;  
> 取值范围:number类型时,取值范围参考socket api中的常量详解;  
> 是否必选:可选传入此参数;  
> 注意事项:如果没有传入此参数,内核固件会自动选择当前时间点其他功能模块设置的默认网卡;  
> 除非你airlbs请求时,一定要使用某一种网卡,才设置此参数;  
> 如果没什么特别要求,不要设置此参数,使用系统中设置的默认网卡即可 ;  
> 一般来说,LuatOS的网络应用demo中都会有netdrv\_device功能模块设置默认网卡;  
> 所以建议不要设置此参数,直接使用netdrv\_device设置的默认网卡就行;  
> 参数示例:socket.LWIP\_GP表示使用4G网卡;  
> 参数名称: param.adapter  
> 
> 参数含义:WiFi网络信息列表,用于WiFi定位;  
> 数据类型:table或者nil;  
> 取值范围:无特别限制;  
> 是否必选:可选传入此参数;  
> 注意事项:暂无;  
> 参数示例:\["24:32:AE:04:E1:67", -86\];  
> 参数名称: param.wifi\_info  
> }
> 
> 数据类型:table;  
> 取值范围:无特别限制;  
> 是否必选:暂无;  
> 注意事项:暂无;  
> 参数示例:  
> {  
> project\_id = "lblKo3",  
> project\_key = "DKqM6sHJkHV23WCzgzTbk7QW7HYGCJxp",  
> timeout = 15000,  
> adapter = nil  
> wifi\_info = {  
> {bssid = "24:32:AE:04:E1:67", rssi = -86},  
> {bssid = "AA:BB:CC:DD:EE:FF", rssi = -65},  
> {bssid = "11:22:33:44:55:66", rssi = -70}  
> }  
> }  

返回值

local result,data = airlbs.request(param)

有两个返回值 result,data

result

lua 复制代码
含义说明:成功返回true,失败会返回false;
数据类型:boolean;
取值范围:true或者false;
注意事项:暂无;
返回示例:true;

data

lua 复制代码
含义说明:表示返回的经纬度数据;
数据类型:table或者nil;
取值范围:如果result为true返回的是table类型,如果result为false返回的是nil类型;
注意事项:暂无;
返回示例:airlbs多基站定位返回的经纬度数据为 {"lat":31.1354542,"lng":121.5423279};

示例

lua 复制代码
local result, data =
    airlbs.request(
    {
        project_id = airlbs_project_id,
        project_key = airlbs_project_key,
        timeout = 10000,
        adapter = nil,
        wifi_info = {
            {bssid = "24:32:AE:04:E1:67", rssi = -86},
            {bssid = "AA:BB:CC:DD:EE:FF", rssi = -65},
            {bssid = "11:22:33:44:55:66", rssi = -70}
        }
    }
)
if result then
    log.info("airlbs多基站定位返回的经纬度数据为", json.encode(data))
end
----日志输出内容示例:
--airlbs多基站定位返回的经纬度数据为 {"lat":31.1354542,"lng":121.5423279}

五、模组支持说明

目前除 8101 系列外,其他支持 LuatOS 开发的模组均支持 airlbs 扩展库

今天就分享到这里啦~

相关推荐
DC升降压/LED驱动IC2 小时前
源芯片选型指南之 AP5193 DC-DC 宽电压 LED 降压恒流驱动器
stm32·单片机·嵌入式硬件·物联网·51单片机·proteus
李永奉3 小时前
杰理芯片SDK-更改芯片产品蓝牙名功能
单片机·嵌入式硬件·mcu·物联网·语音识别
上海合宙LuatOS3 小时前
LuatOS扩展库API——【dhcpsrv】DHCP服务器
物联网·开源·lua·luatos
LQQrk智能排产物联网规则引擎4 小时前
协议不通用、设备连不上?三步拆解物联网的“语言障碍”(JVS物联网)
物联网·jvs
luanma1509805 小时前
PHP vs Lua:脚本语言核心差异解析
开发语言·php·lua
熊文豪6 小时前
时序数据库选型指南:大数据时代工业物联网的高效数据管理策略
大数据·物联网·时序数据库
电子科技圈6 小时前
芯科科技闪耀2026嵌入式世界展以Connected Intelligence赋能,构建边缘智能网联新生态
人工智能·嵌入式硬件·mcu·物联网·智慧城市·健康医疗·智能硬件
北京耐用通信20 小时前
工业通信优选:耐达讯自动化实现CC-Link IE转Modbus RTU稳定传输
人工智能·物联网·网络协议·自动化·信息与通信
RFID舜识物联网1 天前
RFID耐高温标签在汽车喷涂工艺中的创新应用
大数据·人工智能·科技·嵌入式硬件·物联网·汽车