main.lua 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. --[[
  2. demo说明:
  3. wifi信息: 修改 wlan.connect
  4. 服务器信息, 修改 s:host s:port
  5. 可访问 http://tcplab.openluat.com 获取一个临时的tcp端口, 只适合测试ASCII字符
  6. ]]
  7. -- LuaTools需要PROJECT和VERSION这两个信息
  8. PROJECT = "socket2demo"
  9. VERSION = "1.0.0"
  10. -- 引入必要的库文件(lua编写), 内部库不需要require
  11. sys = require("sys")
  12. log.info("main", "socket demo, tcp long connect")
  13. log.info("mac", wlan.get_mac())
  14. wlan.connect("uiot", "12345678") -- wifi信息在这里, 如果想用airkiss, 看app/playit/main.lua
  15. sys.subscribe("WLAN_READY", function ()
  16. print("!!! wlan ready event !!! send ntp")
  17. socket.ntpSync()
  18. end)
  19. local PB7 = 27
  20. gpio.setup(PB7, function(msg) log.info("IQR", "PB7/27", msg) end)
  21. sys.taskInit(function()
  22. -- 等待联网成功
  23. sys.waitUntil("WLAN_READY", 30000)
  24. while 1 do
  25. log.info("main", "socket loop")
  26. if wlan.ready() then
  27. collectgarbage("collect")
  28. collectgarbage("collect")
  29. local s = socket.tcp()
  30. -- inews.gtimg.com/newsapp_bt/0/11443709755/1000
  31. s:host("tcplab.openluat.com") -- 改成服务器ip或者域名
  32. s:port(52501) -- 改成服务器端口
  33. s:on("connect", function(id, re)
  34. -- 连接成功后, 发注册包 {mac:"AABBCCDDEEFF"}
  35. log.info("netc", "connect result", re)
  36. if re then
  37. local jdata = json.encode({mac=wlan.get_mac()})
  38. s:send(jdata)
  39. end
  40. end)
  41. s:on("recv", function(id, re)
  42. print("recv", id, #re, re)
  43. if re then
  44. -- 如果有数据就回显, 简单环路测试
  45. s:send(re)
  46. end
  47. end)
  48. --log.info("netc", "info", s)
  49. -- 启动tcp独立线程(系统级的)
  50. if s:start() == 0 then
  51. -- 启动成功后, 连接中断时必然有NETC_END_XX事件
  52. -- 因为是长连接, 就这样等着就差不多了
  53. while s:closed() == 0 do
  54. sys.waitUntil("NETC_END_" .. s:id(), 3000)
  55. -- 定时发个心跳什么的
  56. log.info("netc", "heartbeat ping")
  57. s:send("ping")
  58. end
  59. else
  60. log.info("netc", "netc start fail!!")
  61. end
  62. -- 一定要清理好, 不然内存泄漏, 模块内存少啊!!!
  63. s:clean()
  64. collectgarbage("collect")
  65. collectgarbage("collect")
  66. --sys_memdump()
  67. sys.wait(2000) -- 没连上, 或者断开了? 等2秒重试
  68. else
  69. log.info("wifi", "wifi NOT ready yet")
  70. sys.waitUntil("WLAN_READY", 30000)
  71. end
  72. end
  73. end)
  74. -- 用户代码已结束---------------------------------------------
  75. -- 结尾总是这一句
  76. sys.run()
  77. -- sys.run()之后后面不要加任何语句!!!!!