基站/wifi定位

wifi与基站定位

作者:闫国梁、朱天华

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

基站定位:

原理:

手机在插入sim卡开机以后,需要搜索周围的基站信息(就是找信号),通常在有信号的地方,手机能搜索到的基站不止一个,就像你的笔记本在小区里能搜到不止一个开着的路由器一样。然后手机会自动从这些基站中选择信号最好的(假如是基站A)连接注册。其余的基站就不用了吗?不不,手机仍然搜索着它们,一旦你离开基站A一段距离,基站A的信号不如基站B了,手机会自动切换成基站B。这也就是为什么同样是待机一天,你在火车上比在家里耗电要多的原因,手机需要不停的搜索、连接基站。 当手机的网络覆盖到一定程度的时候,基站定位也就应运而生了。 其原理如下: 众所周知,距离基站越远,信号越差,所以用信号的强度可以大致估计距离基站的远近。好了,由于基站都是中国移动中国联通等运营商建立的,所以他们可以确定每个基站准确的位置,当手机同时搜索到至少三个基站的信号时(现在的网络覆盖这是很轻松的一件事情),手机除了连接信号最好的一个外,同时根据基站信号的强弱,大致估计出距离基站的远近。由于基站位置是确定的,所以确定位置是很容易的,只需要以基站为圆心,距离为半径多次画圆即可,需要三个基站的信号可以准确的定位。 相对于三个基站的信号来说,如果只搜索到一个基站或者两个基站,也可以定位,只不过,相对来说不准确

WIFI定位的原理和基站定位原理类似

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信息以后通过其他平台进行定位。

常见问题

1. 如何在网站上查询小区对应的位置信息?

例如:通过AT+CEREG?查询到的小区信息如下: +CEREG: 2,1,“812f”,“0ba1d982”,7 这里的812f和0ba1d982都是16进制格式 合宙官方提供了一个在线查询位置的位置服务:在线根据小区查询位置 undefined 注意:任何一个在线查询网站,查询结果仅供参考;无法保证100%可以成功,因为小区id不断在新增,查询网站的后台数据库很难做到实时更新小区id数据库

2. wifi定位失败的可能原因有哪些?

(1)首先确认模块硬件是否支持wifi * 如果模块型号带有NFM或者NAM后缀(例如Air724UG-NFM、Air720UG-NAM),则支持wifi * 其余后缀不支持wifi * 如果没有后缀,可能支持、也可能不支持wifi,需要发出来模块标签图片找FAE确认 (2)烧录wifi demo 开机测试,luatools抓日志分析:
* 如果没有搜索到wifi热点,用手机对比确认下是否可以搜索到附件wifi,如果手机可以搜到,确认下模块的板子上是否有接wifi天线 * 如果可以搜索到wifi热点,但是wifi热点很少,用手机对比确认下搜索到附件wifi数量,如果数量差别太大,确认下模块的板子上是否有接wifi天线或者所接的天线是否支持2.4G频段

3. 基站定位获取的经纬度是什么格式的?

  • 基站定位获取的经纬度为WGS-84格式