main.lua 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. -- LuaTools需要PROJECT和VERSION这两个信息
  2. PROJECT = "lbsLocdemo"
  3. VERSION = "1.0.0"
  4. --注意:因使用了sys.wait()所有api需要在协程中使用
  5. --[[注意:此处的PRODUCT_KEY仅供演示使用,不保证一直能用,量产项目中一定要使用自己在iot.openluat.com中创建的项目productKey]]
  6. PRODUCT_KEY = ""
  7. --[[本demo需要lbsLoc库与libnet库, 库位于script\libs, 需require]]
  8. local lbsLoc = require("lbsLoc")
  9. -- sys库是标配
  10. _G.sys = require("sys")
  11. --[[特别注意, 使用lbsLoc库需要下列语句]]
  12. _G.sysplus = require("sysplus")
  13. -- Air780E的AT固件默认会为开机键防抖, 导致部分用户刷机很麻烦
  14. if rtos.bsp() == "EC618" and pm and pm.PWK_MODE then
  15. pm.power(pm.PWK_MODE, false)
  16. end
  17. -- 功能:获取基站对应的经纬度后的回调函数
  18. -- 参数:-- result:number类型,0表示成功,1表示网络环境尚未就绪,2表示连接服务器失败,3表示发送数据失败,4表示接收服务器应答超时,5表示服务器返回查询失败;为0时,后面的5个参数才有意义
  19. -- lat:string类型,纬度,整数部分3位,小数部分7位,例如031.2425864
  20. -- lng:string类型,经度,整数部分3位,小数部分7位,例如121.4736522
  21. -- addr:目前无意义
  22. -- time:string类型或者nil,服务器返回的时间,6个字节,年月日时分秒,需要转为十六进制读取
  23. -- 第一个字节:年减去2000,例如2017年,则为0x11
  24. -- 第二个字节:月,例如7月则为0x07,12月则为0x0C
  25. -- 第三个字节:日,例如11日则为0x0B
  26. -- 第四个字节:时,例如18时则为0x12
  27. -- 第五个字节:分,例如59分则为0x3B
  28. -- 第六个字节:秒,例如48秒则为0x30
  29. -- locType:numble类型或者nil,定位类型,0表示基站定位成功,255表示WIFI定位成功
  30. local function getLocCb(result, lat, lng, addr, time, locType)
  31. log.info("testLbsLoc.getLocCb", result, lat, lng)
  32. -- 获取经纬度成功
  33. if result == 0 then
  34. log.info("服务器返回的时间", time:toHex())
  35. log.info("定位类型,基站定位成功返回0", locType)
  36. end
  37. -- 广播给其他需要定位数据的task
  38. -- sys.publish("lbsloc_result", result, lat, lng)
  39. end
  40. sys.taskInit(function()
  41. sys.waitUntil("IP_READY", 30000)
  42. while 1 do
  43. mobile.reqCellInfo(15)
  44. sys.waitUntil("CELL_INFO_UPDATE", 3000)
  45. lbsLoc.request(getLocCb)
  46. sys.wait(60000)
  47. end
  48. end)
  49. -- -- 以下为基站+wifi混合定位
  50. -- 注意, 免费版的基站+wifi混合定位,大部分情况下只会返回基站定位的结果
  51. -- 收费版本请咨询销售
  52. -- sys.subscribe("WLAN_SCAN_DONE", function ()
  53. -- local results = wlan.scanResult()
  54. -- log.info("scan", "results", #results)
  55. -- if #results > 0 then
  56. -- local reqWifi = {}
  57. -- for k,v in pairs(results) do
  58. -- log.info("scan", v["ssid"], v["rssi"], v["bssid"]:toHex())
  59. -- local bssid = v["bssid"]:toHex()
  60. -- bssid = string.format ("%s:%s:%s:%s:%s:%s", bssid:sub(1,2), bssid:sub(3,4), bssid:sub(5,6), bssid:sub(7,8), bssid:sub(9,10), bssid:sub(11,12))
  61. -- reqWifi[bssid]=v["rssi"]
  62. -- end
  63. -- lbsLoc.request(getLocCb,nil,nil,nil,nil,nil,nil,reqWifi)
  64. -- else
  65. -- lbsLoc.request(getLocCb) -- 没有wifi数据,进行普通定位
  66. -- end
  67. -- end)
  68. -- sys.taskInit(function()
  69. -- sys.waitUntil("IP_READY", 30000)
  70. -- wlan.init()
  71. -- while 1 do
  72. -- mobile.reqCellInfo(15)
  73. -- sys.waitUntil("CELL_INFO_UPDATE", 3000)
  74. -- wlan.scan()
  75. -- sys.wait(60000)
  76. -- end
  77. -- end)
  78. -- 用户代码已结束---------------------------------------------
  79. -- 结尾总是这一句
  80. sys.run()
  81. -- sys.run()之后后面不要加任何语句!!!!!