| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- --[[
- 1.本demo可直接在Air8000模组上运行
- 2. 执行逻辑为:
- (1)初始化wlan功能
- (2)连接wifi热点
- (3)等待网络连接成功
- (4)执行时间同步
- (5)等待时间同步成功
- (6)循环扫描wifi,如果扫描到wifi信息,则请求wifi定位
- ]]
- -- LuaTools需要PROJECT和VERSION这两个信息
- PROJECT = "WLAN_LOCATION"
- VERSION = "1.0.0"
- -- sys库是标配
- _G.sys = require("sys")
- require "sysplus"
- local taskName = "WIFI_LOCATION"
- local result = false -- 用于保存结果
- local data = nil -- 用于保存定位请求数据
- local wifiList = {} -- 用于保存扫描到的wifi信息
- local requestParam = {} -- 用于保存定位请求参数
- local exfotawifi = require("exfotawifi")
- local function wifi_fota_task_func()
- local result = exfotawifi.request()
- if result then
- log.info("exfotawifi", "升级任务执行成功")
- else
- log.info("exfotawifi", "升级任务执行失败")
- end
- end
- -- 判断网络是否正常
- local function wait_ip_ready()
- local result, ip, adapter = sys.waitUntil("IP_READY", 30000)
- if result then
- log.info("exfotawifi", "开始执行升级任务")
- sys.taskInit(wifi_fota_task_func)
- else
- log.error("当前正在升级WIFI&蓝牙固件,请插入可以上网的SIM卡")
- end
- end
- local airlbs = require "airlbs"
- local airlbsProjectId = "XXXXXX" -- 定位所需的项目key_id
- local airlbsProjectKey = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" -- 定位所需的项目key
- local function wlan_location_task()
- sys.wait(200)
- wlan.init() -- wlan功能初始化
- -- socket.create(socket.LWIP_STA)
- sys.wait(100)
- wlan.connect("luatos1234", "12341234") -- 连接wifi
- result = sys.waitUntil("IP_READY", 30000) -- 等待网络就绪成功的消息,超时时间30秒
- if not result then
- log.info("等待网络就绪超时, 结束本次测试")
- return
- end
- socket.sntp(nil, socket.LWIP_STA) -- 同步网络时间
- result = sys.waitUntil("NTP_UPDATE", 30000) -- 等待时间同步成功的消息,超时时间30秒
- if not result then
- log.info("等待时间同步成功超时, 结束本次测试")
- return
- end
- while true do
- wlan.scan()
- result = sys.waitUntil("WLAN_SCAN_DONE", 20000) -- 等待WIFI扫描完成的消息,超时时间20秒
- if result then
- wifiList = wlan.scanResult()
- if #wifiList > 0 then
- for k, v in pairs(wifiList) do
- log.info("scan", v["ssid"], v["rssi"], (v["bssid"]:toHex()))
- end
- local requestParam = {
- project_id = airlbsProjectId, -- 定位所需的projectid
- project_key = airlbsProjectKey, -- 定位所需的projectkey
- wifi_info = wifiList, -- 用于定位的WiFi信息
- adapter = socket.LWIP_STA, -- 网络适配器类型
- timeout = 5000 -- 定位超时时间
- }
- result, data = airlbs.request(requestParam)
- if result then
- log.info("airlbs请求成功", json.encode(data))
- else
- log.info("airlbs请求失败")
- end
- else
- log.info("没有扫描到wifi")
- end
- else
- log.info("等待WIFI扫描结果超时")
- end
- sys.wait(20000) -- 等待20秒
- end
- end
- -- 每隔6秒打印一次airlink统计数据, 调试用
- sys.taskInit(function()
- while 1 do
- sys.wait(6000)
- airlink.statistics()
- end
- end)
- -- 在设备启动时检查网络状态
- sys.taskInit(wait_ip_ready)
- sysplus.taskInitEx(wlan_location_task, taskName)
- -- 用户代码已结束---------------------------------------------
- -- 结尾总是这一句
- sys.run()
- -- sys.run()之后后面不要加任何语句!!!!!
|