main.lua 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. -- LuaTools需要PROJECT和VERSION这两个信息
  2. PROJECT = "air302_mqtt2"
  3. VERSION = "1.0.0"
  4. -- 引入必要的库文件(lua编写), 内部库不需要require
  5. sys = require "sys"
  6. mqtt2 = require "mqtt2"
  7. -- 打印一下项目的信息
  8. log.info("version", _VERSION, VERSION, PROJECT)
  9. sys.taskInit(function ()
  10. sys.wait(2000)
  11. while not socket.isReady() do
  12. log.info("net", "wait for network ready")
  13. sys.waitUntil("NET_READY", 1000)
  14. end
  15. -- 与mqtt.lua传入的参数有所不同,注意区分
  16. -- 第一个参数是clientId, 通常就是用imei
  17. -- 第二个参数是用户
  18. -- 第三个参数是密码
  19. -- 第四个参数是cleanSession,当前强制为1
  20. -- 第5和第6个参数分别是服务器域名/ip, 及端口号
  21. -- 第7个参数, 必须是一个table, key-value形式, 代表默认订阅的topic
  22. -- 第8个参数是收到消息时的回调
  23. local s = mqtt2.new(nbiot.imei(), 300, "username", "password", 1, "lbsmqtt.airm2m.com", 1884,
  24. {
  25. ["/luatos/"..(nbiot.imei() or "no_imei")]=0,
  26. ["/luatos/"..(nbiot.imei() or "no_imei").."/+"]=0,
  27. },
  28. function (data) -- 回调,data肯定是table, 肯定不为null
  29. log.info("mqtt","receive",data.topic,data.payload,data.id,data.retain,data.qos,data.dup)
  30. end)
  31. -- s:run需要跑在协程里, 这里演示的是单独启动一个协程
  32. -- mqtt2的重要特性之一就是自动重连, s:run()会一直阻塞运行, 链接如果断开了, 会自动发起重连
  33. sys.taskInit(function() s:run() end)
  34. -- 毕竟这是个demo,所以加一段定时发送的代码
  35. -- 这段代码也可以在其他task里面执行
  36. while true do
  37. log.info("mqtt","pub start")
  38. -- s:pub的参数为 (topic, qos, payload),
  39. local r,d = s:pub("/luatos/pub/"..(nbiot.imei() or "no_imei"), 0, tostring(os.time()))
  40. log.info("mqtt","pub sent",r,d)
  41. sys.wait(10000)
  42. end
  43. end)
  44. -- 用户代码已结束---------------------------------------------
  45. -- 结尾总是这一句
  46. sys.run()
  47. -- sys.run()之后后面不要加任何语句!!!!!