main.lua 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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. local exfotawifi = require("exfotawifi")
  23. local function wifi_fota_task_func()
  24. local result = exfotawifi.request()
  25. if result then
  26. log.info("exfotawifi", "升级任务执行成功")
  27. else
  28. log.info("exfotawifi", "升级任务执行失败")
  29. end
  30. end
  31. -- 判断网络是否正常
  32. local function wait_ip_ready()
  33. local result, ip, adapter = sys.waitUntil("IP_READY", 30000)
  34. if result then
  35. log.info("exfotawifi", "开始执行升级任务")
  36. sys.taskInit(wifi_fota_task_func)
  37. else
  38. log.error("当前正在升级WIFI&蓝牙固件,请插入可以上网的SIM卡")
  39. end
  40. end
  41. local airlbs = require "airlbs"
  42. local airlbsProjectId = "XXXXXX" -- 定位所需的项目key_id
  43. local airlbsProjectKey = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" -- 定位所需的项目key
  44. local function wlan_location_task()
  45. sys.wait(200)
  46. wlan.init() -- wlan功能初始化
  47. -- socket.create(socket.LWIP_STA)
  48. sys.wait(100)
  49. wlan.connect("luatos1234", "12341234") -- 连接wifi
  50. result = sys.waitUntil("IP_READY", 30000) -- 等待网络就绪成功的消息,超时时间30秒
  51. if not result then
  52. log.info("等待网络就绪超时, 结束本次测试")
  53. return
  54. end
  55. socket.sntp(nil, socket.LWIP_STA) -- 同步网络时间
  56. result = sys.waitUntil("NTP_UPDATE", 30000) -- 等待时间同步成功的消息,超时时间30秒
  57. if not result then
  58. log.info("等待时间同步成功超时, 结束本次测试")
  59. return
  60. end
  61. while true do
  62. wlan.scan()
  63. result = sys.waitUntil("WLAN_SCAN_DONE", 20000) -- 等待WIFI扫描完成的消息,超时时间20秒
  64. if result then
  65. wifiList = wlan.scanResult()
  66. if #wifiList > 0 then
  67. for k, v in pairs(wifiList) do
  68. log.info("scan", v["ssid"], v["rssi"], (v["bssid"]:toHex()))
  69. end
  70. local requestParam = {
  71. project_id = airlbsProjectId, -- 定位所需的projectid
  72. project_key = airlbsProjectKey, -- 定位所需的projectkey
  73. wifi_info = wifiList, -- 用于定位的WiFi信息
  74. adapter = socket.LWIP_STA, -- 网络适配器类型
  75. timeout = 5000 -- 定位超时时间
  76. }
  77. result, data = airlbs.request(requestParam)
  78. if result then
  79. log.info("airlbs请求成功", json.encode(data))
  80. else
  81. log.info("airlbs请求失败")
  82. end
  83. else
  84. log.info("没有扫描到wifi")
  85. end
  86. else
  87. log.info("等待WIFI扫描结果超时")
  88. end
  89. sys.wait(20000) -- 等待20秒
  90. end
  91. end
  92. -- 每隔6秒打印一次airlink统计数据, 调试用
  93. sys.taskInit(function()
  94. while 1 do
  95. sys.wait(6000)
  96. airlink.statistics()
  97. end
  98. end)
  99. -- 在设备启动时检查网络状态
  100. sys.taskInit(wait_ip_ready)
  101. sysplus.taskInitEx(wlan_location_task, taskName)
  102. -- 用户代码已结束---------------------------------------------
  103. -- 结尾总是这一句
  104. sys.run()
  105. -- sys.run()之后后面不要加任何语句!!!!!