lowpower.lua 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. --[[
  2. @module lowpower
  3. @summary gnss低功耗测试功能模块
  4. @version 1.0
  5. @date 2025.07.27
  6. @author 李源龙
  7. @usage
  8. 使用Air780EGH核心板,外接GPS天线,起一个60s定位一次的定时器,唤醒模块60s一定位,
  9. 然后定位成功获取到经纬度发送到服务器上面,然后进入休眠
  10. ]]
  11. tcp_client_main=require("tcp_client_main")
  12. local function lowpower_cb(tag)
  13. log.info("TAGmode1_cb+++++++++",tag)
  14. local rmc=exgnss.rmc(0) --获取rmc数据
  15. log.info("nmea", "rmc", json.encode(exgnss.rmc(0)))
  16. local data=string.format('{"lat":%5f,"lng":%5f}', rmc.lat, rmc.lng)
  17. sys.publish("SEND_DATA_REQ", "gnsslowpower", data) --发送数据到服务器
  18. -- pm.power(pm.WORK_MODE, 1)--进入低功耗模式
  19. -- pm.power(pm.WORK_MODE,1,1)--wifi进入低功耗模式
  20. end
  21. local function lower_open()
  22. pm.power(pm.WORK_MODE, 0) --进入正常模式
  23. exgnss.open(exgnss.TIMERORSUC,{tag="lowpower",val=60,cb=lowpower_cb})
  24. end
  25. local function gnss_fnc()
  26. log.info("gnss_fnc111")
  27. local gnssotps={
  28. gnssmode=1, --1为卫星全定位,2为单北斗
  29. agps_enable=true, --是否使用AGPS,开启AGPS后定位速度更快,会访问服务器下载星历,星历时效性为北斗1小时,GPS4小时,默认下载星历的时间为1小时,即一小时内只会下载一次
  30. -- debug=true, --是否输出调试信息
  31. -- uart=2, --使用的串口,780EGH和8000默认串口2
  32. -- uartbaud=115200, --串口波特率,780EGH和8000默认115200
  33. -- bind=1, --绑定uart端口进行GNSS数据读取,是否设置串口转发,指定串口号
  34. -- rtc=false --定位成功后自动设置RTC true开启,flase关闭
  35. ----因为GNSS使用辅助定位的逻辑,是模块下载星历文件,然后把数据发送给GNSS芯片,
  36. ----芯片解析星历文件需要10-30s,默认GNSS会开启20s,该逻辑如果不执行,会导致下一次GNSS开启定位是冷启动,
  37. ----定位速度慢,大概35S左右,所以默认开启,如果可以接受下一次定位是冷启动,可以把auto_open设置成false
  38. ----需要注意的是热启动在定位成功之后,需要再开启3s左右才能保证本次的星历获取完成,如果对定位速度有要求,建议这么处理
  39. -- auto_open=false
  40. }
  41. exgnss.setup(gnssotps) --配置GNSS参数
  42. exgnss.open(exgnss.TIMERORSUC,{tag="lowpower",val=60,cb=lowpower_cb}) --打开一个60s的TIMERORSUC应用,该模式定位成功关闭
  43. sys.timerLoopStart(lower_open,60000) --每60s开启一次GNSS
  44. -- gpio.close(24)--此脚为gnss备电脚和三轴加速度传感器的供电脚,功能是热启动和保存星历文件,关掉会没有热启动,常开功耗会增高0.5-1MA左右
  45. -- --关闭USB以后可以降低约150ua左右的功耗,如果不需要USB可以关闭
  46. pm.power(pm.USB, false)
  47. end
  48. sys.taskInit(gnss_fnc)