normal.lua 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. -- netlab.luatos.com上打开TCP,然后修改IP和端口号,自动回复netlab下发的数据,自收自发测试
  2. local server_ip = "112.125.89.8"
  3. local server_port = 47523
  4. local rxbuf = zbuff.create(8192)
  5. -- 配置GPIO达到最低功耗
  6. gpio.setup(24, 0) -- 关闭三轴电源
  7. sys.subscribe("IP_READY", function(ip, adapter)
  8. log.info("mobile", "IP_READY", ip, (adapter or -1) == socket.LWIP_GP)
  9. sys.publish("net_ready")
  10. end)
  11. local function netCB(netc, event, param)
  12. if param ~= 0 then
  13. sys.publish("socket_disconnect")
  14. return
  15. end
  16. if event == socket.LINK then
  17. elseif event == socket.ON_LINE then
  18. socket.tx(netc, "hello,luatos!")
  19. elseif event == socket.EVENT then
  20. socket.rx(netc, rxbuf)
  21. socket.wait(netc)
  22. if rxbuf:used() > 0 then
  23. log.info("收到", rxbuf:toStr(0,rxbuf:used()):toHex())
  24. log.info("发送", rxbuf:used(), "bytes")
  25. socket.tx(netc, rxbuf)
  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. sys.waitUntil("net_ready")
  37. log.info("联网成功,准备链接服务器")
  38. pm.power(pm.WORK_MODE,0) --进入正常模式
  39. local netc = socket.create(nil, netCB)
  40. socket.debug(netc, true)
  41. socket.config(netc, nil, nil, nil, 300, 5, 6) --开启TCP保活,防止长时间无数据交互被运营商断线
  42. while true do
  43. log.info("开始链接服务器")
  44. local succ, result = socket.connect(netc, server_ip, server_port)
  45. if not succ then
  46. log.info("未知错误,5秒后重连")
  47. else
  48. log.info("链接服务器成功")
  49. local result, msg = sys.waitUntil("socket_disconnect")
  50. end
  51. log.info("服务器断开了,5秒后重连")
  52. socket.close(netc)
  53. log.info(rtos.meminfo("sys"))
  54. sys.wait(5000)
  55. end
  56. end
  57. function socketDemo()
  58. sys.taskInit(socketTask)
  59. end
  60. socketDemo()