main.lua 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. --[[
  2. 1.本demo可直接在Air8000模组上运行
  3. 2. 执行逻辑为:
  4. (1)初始化wlan功能
  5. (2)连接wifi热点
  6. (3)等待网络连接成功
  7. (4)执行时间同步
  8. (5)等待时间同步成功
  9. (6)循环扫描wifi,如果扫描到wifi信息,则请求wifi定位
  10. ]]
  11. -- LuaTools需要PROJECT和VERSION这两个信息
  12. PROJECT = "WLAN_LOCATION"
  13. VERSION = "1.0.0"
  14. -- sys库是标配
  15. _G.sys = require("sys")
  16. require "sysplus"
  17. local taskName = "WIFI_LOCATION"
  18. local result = false -- 用于保存结果
  19. local data = nil -- 用于保存定位请求数据
  20. local wifiList = {} -- 用于保存扫描到的wifi信息
  21. local requestParam = {} -- 用于保存定位请求参数
  22. -- 如果无法定位,可以开启此功能升级WiFi固件版本后再次尝试
  23. -- 升级完毕后最好取消调用,防止后期版本升级过高导致程序使用不稳定
  24. -- require "check_wifi"
  25. local airlbs = require "airlbs"
  26. local airlbsProjectId = "XXXXXX" -- 定位所需的项目key_id
  27. local airlbsProjectKey = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" -- 定位所需的项目key
  28. local function wlan_location_task()
  29. sys.wait(200)
  30. wlan.init() -- wlan功能初始化
  31. -- socket.create(socket.LWIP_STA)
  32. sys.wait(100)
  33. wlan.connect("luatos1234", "12341234") -- 连接wifi
  34. result = sys.waitUntil("IP_READY", 30000) -- 等待网络就绪成功的消息,超时时间30秒
  35. if not result then
  36. log.info("等待网络就绪超时, 结束本次测试")
  37. return
  38. end
  39. socket.sntp(nil, socket.LWIP_STA) -- 同步网络时间
  40. result = sys.waitUntil("NTP_UPDATE", 30000) -- 等待时间同步成功的消息,超时时间30秒
  41. if not result then
  42. log.info("等待时间同步成功超时, 结束本次测试")
  43. return
  44. end
  45. while true do
  46. wlan.scan()
  47. result = sys.waitUntil("WLAN_SCAN_DONE", 20000) -- 等待WIFI扫描完成的消息,超时时间20秒
  48. if result then
  49. wifiList = wlan.scanResult()
  50. if #wifiList > 0 then
  51. for k, v in pairs(wifiList) do
  52. log.info("scan", v["ssid"], v["rssi"], (v["bssid"]:toHex()))
  53. end
  54. local requestParam = {
  55. project_id = airlbsProjectId, -- 定位所需的projectid
  56. project_key = airlbsProjectKey, -- 定位所需的projectkey
  57. wifi_info = wifiList, -- 用于定位的WiFi信息
  58. adapter = socket.LWIP_STA, -- 网络适配器类型
  59. timeout = 5000 -- 定位超时时间
  60. }
  61. result, data = airlbs.request(requestParam)
  62. if result then
  63. log.info("airlbs请求成功", json.encode(data))
  64. else
  65. log.info("airlbs请求失败")
  66. end
  67. else
  68. log.info("没有扫描到wifi")
  69. end
  70. else
  71. log.info("等待WIFI扫描结果超时")
  72. end
  73. sys.wait(20000) -- 等待20秒
  74. end
  75. end
  76. -- 每隔6秒打印一次airlink统计数据, 调试用
  77. sys.taskInit(function()
  78. while 1 do
  79. sys.wait(6000)
  80. airlink.statistics()
  81. end
  82. end)
  83. sysplus.taskInitEx(wlan_location_task, taskName)
  84. -- 用户代码已结束---------------------------------------------
  85. -- 结尾总是这一句
  86. sys.run()
  87. -- sys.run()之后后面不要加任何语句!!!!!