main.lua 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. -- LuaTools需要PROJECT和VERSION这两个信息
  2. --[[
  3. -- 演示一下pm相关API的功能
  4. PROJECT = "pmdemo"
  5. VERSION = "1.0.0"
  6. log.info("main", PROJECT, VERSION)
  7. -- sys库是标配
  8. _G.sys = require("sys")
  9. log.style(1)
  10. -- 注意:本demo使用luatools下载!!!
  11. -- 注意:本demo使用luatools下载!!!
  12. -- 注意:本demo使用luatools下载!!!
  13. -- 启动时对rtc进行判断和初始化
  14. local reason, slp_state = pm.lastReson()
  15. log.info("wakeup state", pm.lastReson())
  16. if reason > 0 then
  17. pm.request(pm.LIGHT)
  18. log.info("已经从深度休眠唤醒,测试结束")
  19. mobile.flymode(0, false)
  20. sys.taskInit(function()
  21. sys.wait(10000)
  22. end)
  23. else
  24. log.info("普通复位,开始测试")
  25. --测试最低功耗,需要下面3个GPIO操作
  26. gpio.setup(23,nil)
  27. gpio.close(33)
  28. gpio.close(35) --这里pwrkey接地才需要,不接地通过按键控制的不需要
  29. sys.taskInit(function()
  30. pm.power(pm.GPS, true) --打开780EG内部GPS电源,注意如果真的用GPS,需要初始化UART2
  31. pm.power(pm.GPS_ANT, true) --打开780EG内部GPS天线电源,注意如果真的用GPS,需要初始化UART2
  32. log.info("等联网完成")
  33. sys.wait(20000)
  34. pm.power(pm.GPS, false) --打开780EG内部GPS电源,注意如果真的用GPS,需要初始化UART2
  35. pm.power(pm.GPS_ANT, false) --打开780EG内部GPS天线电源,注意如果真的用GPS,需要初始化UART2
  36. -- lvgl刷新太快,如果有lvgl.init操作的,需要先停一下
  37. if lvgl then
  38. lvgl.sleep(true)
  39. end
  40. pm.power(pm.USB, false)-- 如果是插着USB测试,需要关闭USB
  41. pm.force(pm.LIGHT)
  42. -- 如果要测试保持网络连接状态下的功耗,需要iotpower来测试 https://wiki.luatos.com/iotpower/power/index.html 购买链接 https://item.taobao.com/item.htm?id=679899121798
  43. -- 如果只是看普通休眠状态下的底电流,需要进入飞行模式
  44. -- log.info("普通休眠测试,进入飞行模式来保持稳定的电流")
  45. -- mobile.flymode(0, true)
  46. log.info("普通休眠测试,普通定时器就能唤醒,10秒后唤醒一下")
  47. sys.wait(10000)
  48. pm.force(pm.IDLE)
  49. pm.power(pm.USB, true)
  50. sys.wait(1000)
  51. log.info("普通休眠测试成功,接下来深度休眠,进入飞行模式或者PSM模式来保持稳定的电流,不开飞行模式会周期性唤醒,大幅度增加功耗")
  52. mobile.flymode(0, true)
  53. sys.wait(10000)
  54. log.info("深度休眠测试用DTIMER来唤醒")
  55. -- EC618上,0和1只能最多2.5小时,2~6可以750小时
  56. pm.dtimerStart(0, 10000)
  57. pm.force(pm.DEEP) --也可以pm.HIB模式
  58. pm.power(pm.USB, false) -- 如果是插着USB测试,需要关闭USB
  59. log.info("开始深度休眠测试")
  60. sys.wait(3000)
  61. log.info("深度休眠测试失败")
  62. end)
  63. end
  64. ]]
  65. -- 演示一下周期性工作-休眠的demo
  66. PROJECT = "sleepdemo"
  67. VERSION = "1.0.1"
  68. log.info("main", PROJECT, VERSION)
  69. -- sys库是标配
  70. _G.sys = require("sys")
  71. log.style(1)
  72. -- 注意:本demo使用luatools下载!!!
  73. -- 注意:本demo使用luatools下载!!!
  74. -- 注意:本demo使用luatools下载!!!
  75. -- Air780E的AT固件默认会为开机键防抖, 导致部分用户刷机很麻烦
  76. if rtos.bsp() == "EC618" and pm and pm.PWK_MODE then
  77. pm.power(pm.PWK_MODE, false)
  78. end
  79. -- 启动时对rtc进行判断和初始化
  80. local reason, slp_state = pm.lastReson()
  81. log.info("wakeup state", pm.lastReson())
  82. if reason > 0 then
  83. pm.request(pm.LIGHT)
  84. mobile.flymode(0, false)
  85. log.info("已经从深度休眠唤醒")
  86. log.info("os.date()", os.date())
  87. local t = rtc.get()
  88. log.info("rtc", json.encode(t))
  89. end
  90. function io_init()
  91. local bsp = rtos.bsp()
  92. --测试最低功耗,需要下面3个GPIO操作
  93. if bsp == "EC618" then
  94. log.info("EC618")
  95. gpio.setup(23,nil)
  96. --gpio.close(33) --如果功耗偏高,开始尝试关闭WAKEUPPAD1
  97. gpio.close(35) --这里pwrkey接地才需要,不接地通过按键控制的不需要
  98. end
  99. if string.find(bsp,"EC718") then
  100. log.info("EC718")
  101. gpio.close(23)
  102. gpio.close(45)
  103. gpio.close(46) --这里pwrkey接地才需要,不接地通过按键控制的不需要
  104. --全IO开发板按照下面的配置功耗最低,自己板子按实际情况配置wakeuppad
  105. gpio.setup(39,nil,gpio.PULLUP)
  106. gpio.setup(40,nil,gpio.PULLDOWN)
  107. gpio.setup(41,nil,gpio.PULLDOWN)
  108. gpio.setup(42,nil,gpio.PULLUP)
  109. gpio.setup(43,nil,gpio.PULLUP)
  110. gpio.setup(44,nil,gpio.PULLDOWN)
  111. end
  112. end
  113. sys.taskInit(function()
  114. io_init()
  115. log.info("工作14秒后进入深度休眠")
  116. sys.wait(14000)
  117. mobile.flymode(0, true)
  118. log.info("深度休眠测试用DTIMER来唤醒")
  119. sys.wait(100)
  120. pm.power(pm.USB, false) -- 如果是插着USB测试,需要关闭USB
  121. pm.force(pm.HIB)
  122. pm.dtimerStart(3, 20000)
  123. sys.wait(5000)
  124. pm.force(pm.IDLE) -- 运行到这里说明没用进入深度休眠,测试失败
  125. pm.power(pm.USB, true)
  126. log.info("深度休眠测试失败")
  127. mobile.flymode(0, false)
  128. while true do
  129. sys.wait(5000)
  130. log.info("深度休眠测试失败")
  131. end
  132. end)
  133. -- 用户代码已结束---------------------------------------------
  134. -- 结尾总是这一句
  135. sys.run()
  136. -- sys.run()之后后面不要加任何语句!!!!!