lowpower_dissipation.lua 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. -- netlab.luatos.com上打开TCP 有测试服务器
  2. local server_ip = "112.125.89.8"
  3. local server_port = 43667
  4. local is_udp = false --用户根据自己实际情况选择
  5. --是UDP服务器就赋值为true,是TCP服务器就赋值为flase
  6. --UDP服务器比TCP服务器功耗低
  7. --如果用户对数据的丢包率有极为苛刻的要求,最好选择TCP
  8. local Heartbeat_interval = 1 -- 发送数据的间隔时间,单位分钟
  9. -- 数据内容
  10. local heart_data = string.rep("1234567890", 10)
  11. local rxbuf = zbuff.create(8192)
  12. local function netCB(netc, event, param)
  13. if param ~= 0 then
  14. sys.publish("socket_disconnect")
  15. return
  16. end
  17. if event == socket.LINK then
  18. elseif event == socket.ON_LINE then
  19. -- 链接上服务器以后发送的第一包数据是 hello,luatos
  20. socket.tx(netc, "hello,luatos!")
  21. elseif event == socket.EVENT then
  22. socket.rx(netc, rxbuf)
  23. socket.wait(netc)
  24. if rxbuf:used() > 0 then
  25. log.info("收到", rxbuf:toStr(0, rxbuf:used()), "数据长度", rxbuf:used())
  26. end
  27. rxbuf:del()
  28. elseif event == socket.TX_OK then
  29. socket.wait(netc)
  30. log.info("发送完成")
  31. elseif event == socket.CLOSED then
  32. sys.publish("socket_disconnect")
  33. end
  34. end
  35. local function socketTask()
  36. local netc = socket.create(nil, netCB) --创建一个链接
  37. socket.debug(netc, true)--开启socket层的debug日志,方便寻找问题
  38. socket.config(netc, nil, is_udp, nil, 300, 5, 6) --配置TCP链接的参数,开启保活,防止长时间无数据交互服务器踢掉模块
  39. while true do
  40. --真正去链接服务器
  41. local succ, result = socket.connect(netc, server_ip, server_port)
  42. --链接成功后循环发送数据
  43. while succ do
  44. local Heartbeat_interval = Heartbeat_interval * 60 * 1000
  45. sys.wait(Heartbeat_interval)
  46. socket.tx(netc, heart_data)
  47. end
  48. --链接不成功5S重连一次
  49. if not succ then
  50. log.info("未知错误,5秒后重连")
  51. uart.write(1, "未知错误,5秒后重连")
  52. else
  53. local result, msg = sys.waitUntil("socket_disconnect")
  54. end
  55. log.info("服务器断开了,5秒后重连")
  56. uart.write(1, "服务器断开了,5秒后重连")
  57. socket.close(netc)
  58. sys.wait(5000)
  59. end
  60. end
  61. function socketDemo()
  62. --配置GPIO以达到最低功耗的目的
  63. gpio.setup(23, nil)
  64. gpio.close(33) -- 如果功耗偏高,开始尝试关闭WAKEUPPAD1
  65. gpio.close(35) -- 这里pwrkey接地才需要,不接地通过按键控制的不需要
  66. --关闭USB以后可以降低约150ua左右的功耗,如果不需要USB可以关闭
  67. pm.power(pm.USB, false)
  68. --进入低功耗长连接模式
  69. pm.power(pm.WORK_MODE, 1)
  70. -- pm.dtimerStart(0, 120 * 1000)
  71. sys.taskInit(socketTask)
  72. pm.dtimerStart(0, 120 * 1000)
  73. end
  74. sys.taskInit(socketDemo)