3.1.15 基站/WIFI定位

wifi与基站定位

作者:闫国梁

最后更新时间:2020年6月30日

基站定位:

AT模式

查询基站定位指令说明

语法规则:

命 令 类 型

语法

返回

设 置 命 令

AT+CIPGSMLOC=,

If =1: +CIPGSMLOC:[,,,, ] OK If =2: +CIPGSMLOC: [,,] OK If error is related to ME functionality: +CME ERROR:

测 试 命 令

AT+CIPGSMLOC=?

+CIPGSMLOC:(list of supported s),(range of ) OK

参数定义:

参数

定义

取值

对取值的说明

operation type

1

View the longitude, latitude and time

2

View the time only

as defined in +SAPBR

1-3

Current longitude in degrees

经度

Current latiitude in degrees

纬度

the format is yy/mm/dd

for example 18/11/08

the format is hh/mm/ss

for example 15:47:26

0

Success

1

未找到数据

6

参数错误

7

未知错误

404

Not Found

408

Request Time-out

601

Network Error

602

No memory

603

DNS Error

604

Stack busy

65535

Other Error

基站定位测试流程实例

以下部分加粗内容是模块发给mcu,非加粗是mcu发给模块 AT 训练波特率 AT OK AT+SAPBR=1,1 激活PDP AT+SAPBR=1,1 OK AT+SAPBR=2,1 查询是否激活成功,成功能查询到IP AT+SAPBR=2,1 +SAPBR: 1,1,“10.150.186.203” OK AT+CIPGSMLOC=1,1 查询基站定位 AT+CIPGSMLOC=1,1 +CIPGSMLOC: 0,31.174749,121.600788,2020/06/30,13:07:46 OK ### 查询WIFI定位指令说明 语法规则:

命 令 类 型

语法

返回

设 置 命 令

AT+WIFILOC=,

If =1: +WIFILOC:[,,,,] OK If =2: +WIFILOC: [,,] OK If error is related to ME functionality: +CME ERROR:

测 试 命 令

AT+WIFILOC=?

+WIFILOC:(list of supported s),(range of ) OK

参数定义:

参数

定义

取值

对取值的说明

operation type

1

longitude, latitude and time

2

View the time only

as defined in +SAPBR

1-3

Current longitude in degrees

经度

Current latitude in degrees

纬度

the format is yy/mm/dd

for example 18/11/08

the format is hh:mm:ss

for example 15:47:26

0

Success

1

未找到数据

6

参数错误

7

未知错误

404

Not Found

408

Request Time-out

601

Network Error

602

No memory

603

DNS Error

604

Stack busy

65535

Other Error

WIFI定位测试流程实例

以下部分加粗内容是模块发给mcu,非加粗是mcu发给模块 AT 训练波特率 AT OK AT+SAPBR=1,1 激活PDP AT+SAPBR=1,1 OK AT+SAPBR=2,1 查询是否激活成功,成功能查询到IP AT+SAPBR=2,1 +SAPBR: 1,1,“10.150.186.203” OK AT+WIFILOC=1,1 查询wifi定位 AT+WIFILOC=1,1

+WIFILOC: 0,31.174864,121.600850,2020/06/30,13:01:28 OK ## LUAT模式 ### 基站定位接口 lbsLoc.request(cbFnc, reqAddr, timeout, productKey, host, port, reqTime, reqWifi)

发送根据基站查询经纬度请求(仅支持中国区域的位置查询)

  • 参数

传入 值类型

释义

f unction

cbFnc,用户回调函数,回调函数的调用形式为: cbFnc(result,lat,lng,addr) result:number类型 0表示成功 1表示网络环境尚未就绪 2表示连接服务器失败 3表示发送数据失败 4表示接收服务器应答超时 5表示服务器返回查询失败 6表示socket已满,创建socket失败 为0时,后面的3个参数才有意义 lat:string类型 或者nil,纬度,整数部分3位,小数部分7位,例如“031.2425864” lng:string类型 或者nil,经度,整数部分3位,小数部分7位,例如“121.4736522”

bool

** 可选参数,默认为``nil``**,reqAddr,此参数无意义,保留

number

可选参数,默认为``2 0000``,timeout,请求超时时间,单位毫秒,默认20000毫秒

string

可选参数,默认为``ni l``,productKey,IOT网站上的产品证书,此参数可选,用户 如果在main.lua中定义了PRODUCT_KEY变量,就不需要传入此参数

string

可选 参数,默认为``nil``,host,服务器域名,此参数可选, 目前仅lib中agps.lua使用此参数。用户脚本中不需要传入此参数

string

可选 参数,默认为``nil``,port,服务器端口,此参数可选, 目前仅lib中agps.lua使用此参数。用户脚本中不需要传入此参数

bool

可选参数,默认为``nil``,reqTime,是否需要服务 器返回时间信息,true返回,false或者nil不返回,此参数可选, 目前仅lib中agps.lua使用此参数。用户脚本中不需要传入此参数

table

可选参数,默认为``nil``, reqWifi,搜索到的WIFI热点信息(MAC地址和信号强度),如果传入 了此参数,后台会查询WIFI热点对应的经纬度,此参数格式如下: { [“1a:fe:34:9e:a1:77”] = -63, [“8c:be:be:2d:cd:e9”] = -81, [“20:4e:7f:82:c2:c4”] = -70,}

  • 返回值

nil ### 基站定位测试脚本说明 以resource8910_script:raw-latex:script_LuaTask_V2.3.2:raw-latex:demo:raw-latex:`\lbsLoc`:raw-latex:`\testLbsLoc`.lua为例 首先:通过lbsLoc.request(getLocCb)发起请求getLocCb是回调函数,回调函数里处理请求结果。

--[[
功能  :获取基站对应的经纬度后的回调函数
参数  :
        result:number类型,0表示成功,1表示网络环境尚未就绪,2表示连接服务器失败,3表示发送数据失败,4表示接收服务器应答超时,5表示服务器返回查询失败;为0时,后面的3个参数才有意义
        lat:string类型,纬度,整数部分3位,小数部分7位,例如031.2425864
        lng:string类型,经度,整数部分3位,小数部分7位,例如121.4736522
返回值:无
]]
function getLocCb(result, lat, lng)
    log.info("testLbsLoc.getLocCb", result, lat, lng)
    --获取经纬度成功
    if result == 0 then
        --失败
    else
    end
    sys.timerStart(reqLbsLoc, 20000)
end

WIFI定位接口

说明:wifi定位是基站定位的拓展,最终的实现还是基站定位。通过wifi的接口获取附近wifi信息,然后调用基站定位接口进行查询。 request(cbFnc,timeout)

  • 参数

  • 返回值

nil ### WIFI定位测试脚本说明 以resource8910_script:raw-latex:script_LuaTask_V2.3.2:raw-latex:demo:raw-latex:`\wifi`:raw-latex:`\testWifi`.lua为例,首先通过wifiScan.request获取wifi信息,在回调函数里使用内部消息WIFI_SCAN_IND传递回调数据结果,等收到回调结果以后,通过lbsLoc.request把附近wifi信息的表传入然后请求。在回调里处理请求结果。

sys.taskInit(function()
    while true do
        sys.wait(5000)

        wifiScan.request(function(result,cnt,tInfo)
            log.info("testWifi.scanCb",result,cnt)
            sys.publish("WIFI_SCAN_IND",result,cnt,tInfo)
        end)

        local _,result,cnt,tInfo = sys.waitUntil("WIFI_SCAN_IND")
        if result then
            for k,v in pairs(tInfo) do
                log.info("testWifi.scanCb",k,v)
            end

            lbsLoc.request(function(result,lat,lng)
                log.info("testLbsLoc.getLocCb",result,lat,lng)
                sys.publish("LBS_WIFI_LOC_IND",result,lat,lng)
            end,false,false,false,false,false,false,tInfo)
            local _,result,lat,lng = sys.waitUntil("LBS_WIFI_LOC_IND")
        end
    end
end)

其他补充:用户也可以通过其他平台接口进行定位,可以通过wifiScan.requestnet.getCellInfo、net.getCellInfoExt等接口获取附近基站和wifi信息以后通过其他平台进行定位。