main.lua 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. -- LuaTools需要PROJECT和VERSION这两个信息
  2. PROJECT = "udpsrvdemo"
  3. VERSION = "1.0.0"
  4. -- sys库是标配
  5. _G.sys = require("sys")
  6. sysplus = require("sysplus")
  7. libnet = require "libnet"
  8. -- =============================================================
  9. -- 测试网站 https://netlab.luatos.com/ 点击 打开UDP 获取测试端口号
  10. -- 要按实际情况修改
  11. local host = "netlab.luatos.com" -- 服务器ip或者域名, 都可以的
  12. local port = 47966 -- 服务器端口号
  13. local is_udp = true -- 如果是UDP, 要改成true, false就是TCP
  14. local is_tls = false -- 加密与否, 要看服务器的实际情况
  15. -- =============================================================
  16. --设置dht11传感器的out引脚与780E开发板的连接引脚
  17. local dht11_pin = 7
  18. sys.taskInit(function()
  19. while 1 do
  20. local result, rx_data = sys.waitUntil("sc_txrx", 30000)
  21. if not result then
  22. log.info("发布keepalive,waitUntil的返回值为: ", result)
  23. -- 如果sys.waitUntil30秒内没收到消息sc_txrx,则发送一次心跳
  24. sys.publish("keepalive")
  25. end
  26. end
  27. end)
  28. -- 连接函数
  29. sys.taskInit(function()
  30. sys.waitUntil("IP_READY")
  31. -- 申请一个socket_ctrl
  32. local netc = socket.create(nil,"MySocket")
  33. --[[配置network一些信息
  34. @param1 socket_ctrl
  35. @param2 本地端口号,不写会自动分配一个
  36. @parma3 是否是UDP
  37. @param4 是否是加密传输
  38. ]]
  39. local config_succ = socket.config(netc, nil, is_udp, is_tls)
  40. if not config_succ then
  41. log.info("socket.config", "服务器配置失败")
  42. end
  43. -- 订阅心跳消息
  44. sys.subscribe("keepalive", function()
  45. succ, full, result = socket.tx(netc, "keepalive" .. os.date())
  46. log.info("socket", "心跳包发送数据的结果", succ, full, result)
  47. end)
  48. while config_succ do
  49. --[[连接服务器,超时时间15秒
  50. @param1 任务id
  51. @param2 连接超时时间
  52. @param3 socket_ctrl
  53. @param4 ip地址或域名
  54. @param5 服务器端口号
  55. @param6 域名解析是否要IPV6,默认false,只有支持IPV6的协议栈才有效果
  56. return 失败或超时返回false,成功返回true
  57. ]]
  58. local succ,result = socket.connect(netc, host, port)
  59. if succ then
  60. log.info("socket", "服务器连接成功")
  61. sys.wait(1000)
  62. --[[发一个数据试试是否连接成功
  63. @param1 socket.create()创建的socket_ctrl
  64. @param2 要发送的数据
  65. ]]
  66. socket.tx(netc, "hello world!!!")
  67. else
  68. log.info("socket", "服务器连接失败")
  69. end
  70. -- 连接服务器成功后,开始进行向服务器发送温湿度数据操作
  71. while succ do
  72. --[[读取dht11传感器的数值
  73. @param1 dht11的out引脚连接780E开发板的引脚号
  74. @param2 是否校验读取到的值,true为校验
  75. @return1 湿度值,单位为0.01%
  76. @return2 温度值 单位为0.01%
  77. @return 成功返回true,失败返回false
  78. ]]
  79. local h,t,r = sensor.dht1x(dht11_pin, true)
  80. if r then
  81. --[[
  82. ..为字符串的连接符,
  83. 例如log.info("hello".."world")打印出来就是helloworld
  84. ]]
  85. local data = "湿度:".. (h/100) .. "\r\n".. "温度:".. (t/100)
  86. log.info("dht1x",data)
  87. --将温湿度的数据上传到web服务器
  88. local succ,full,result = socket.tx(netc,data)
  89. if not succ then
  90. log.info("socket","温湿度数据上传失败")
  91. end
  92. --[[如果成功向web服务器上传了数据,则发布消息"sc_txrx"
  93. 如果在30秒内没发送过消息,则会发一个心跳指令
  94. ]]
  95. sys.publish("sc_txrx")
  96. else
  97. log.info("温湿度值校验失败")
  98. end
  99. sys.wait(3000)
  100. end
  101. sys.wait(2000)
  102. end
  103. socket.close(netc)
  104. end)
  105. -- 用户代码已结束---------------------------------------------
  106. -- 结尾总是这一句
  107. sys.run()