da221gnss.lua 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. --[[
  2. @module da221gnss
  3. @summary 利用加速度传感器da221实现中断触发gnss定位
  4. @version 1.0
  5. @date 2025.08.01
  6. @author 李源龙
  7. @usage
  8. 使用Air8000利用内置的da221加速度传感器实现中断触发gnss定位
  9. ]]
  10. gnss=require("gnss")
  11. tcp=require("tcp")
  12. da221=require("da221")
  13. local intPin=gpio.WAKEUP2
  14. local tid
  15. local function mode1_cb(tag)
  16. log.info("TAGmode1_cb+++++++++",tag)
  17. local rmc=gnss.getRmc(0)
  18. log.info("nmea", "rmc", json.encode(gnss.getRmc(0)))
  19. tcp.latlngfnc(rmc.lat,rmc.lng)
  20. end
  21. local function timer1()
  22. gnss.close(gnss.DEFAULT,{tag="MODE1"})
  23. sys.timerStop(tid)
  24. end
  25. local function ind()
  26. log.info("int", gpio.get(intPin))
  27. if gpio.get(intPin) == 1 then
  28. sys.timerStart(timer1,10000)
  29. local x,y,z = da221.read_xyz() --读取x,y,z轴的数据
  30. log.info("x", x..'g', "y", y..'g', "z", z..'g')
  31. if gnss.openres()~=true then
  32. log.info("nmea", "openres", "false")
  33. gnss.open(gnss.DEFAULT,{tag="MODE1",cb=mode1_cb})
  34. tid=sys.timerLoopStart(mode1_cb, 5000)
  35. else
  36. log.info("nmea", "openres", "true")
  37. end
  38. end
  39. end
  40. local function gnss_fnc()
  41. log.info("gnss_fnc111")
  42. local gnssotps={
  43. gnssmode=1, --1为卫星全定位,2为单北斗
  44. agps_enable=true, --是否使用AGPS,开启AGPS后定位速度更快,会访问服务器下载星历,星历时效性为北斗1小时,GPS4小时,默认下载星历的时间为1小时,即一小时内只会下载一次
  45. debug=true, --是否输出调试信息
  46. -- uart=2, --使用的串口,780EGH和8000默认串口2
  47. -- uartbaud=115200, --串口波特率,780EGH和8000默认115200
  48. -- bind=1, --绑定uart端口进行GNSS数据读取,是否设置串口转发,指定串口号
  49. -- rtc=false --定位成功后自动设置RTC true开启,flase关闭
  50. ----因为GNSS使用辅助定位的逻辑,是模块下载星历文件,然后把数据发送给GNSS芯片,
  51. ----芯片解析星历文件需要10-30s,默认GNSS会开启20s,该逻辑如果不执行,会导致下一次GNSS开启定位是冷启动,
  52. ----定位速度慢,大概35S左右,所以默认开启,如果可以接受下一次定位是冷启动,可以把agps_autoopen设置成false
  53. ----需要注意的是热启动在定位成功之后,需要再开启3s左右才能保证本次的星历获取完成,如果对定位速度有要求,建议这么处理
  54. -- agps_autoopen=false
  55. }
  56. gnss.setup(gnssotps)
  57. --1、静态/微动检测,使用场景:微振动检测、手势识别;
  58. --2、常规运动监测,使用场景:运动监测、车载设备;
  59. --3、高动态冲击检测,使用场景:碰撞检测、工业冲击
  60. da221.open(1)
  61. gpio.debounce(intPin, 100)
  62. gpio.setup(intPin, ind)
  63. end
  64. sys.taskInit(gnss_fnc)