【问题标题】:NodeMCU lua function "conn"NodeMCU lua 函数“conn”
【发布时间】:2015-11-17 14:15:29
【问题描述】:

我可能有一个奇怪的问题,但我需要知道这一点。我正在创建一个 lua 脚本来连接 esp8266 和我的 mqtt 代理。示例脚本非常简单。

m = mqtt.Client("clientid", 120, "user", "password")

m:lwt("/lwt", "offline", 0, 0)

m:on("connect", function(con) print ("connected") end)
m:on("offline", function(con) print ("offline") end)

m:on("message", function(conn, topic, data) 
  print(topic .. ":" ) 
  if data ~= nil then
    print(data)
  end
end)

m:connect("192.168.11.118", 1880, 0, function(conn) 
    print("connected") 
end)

m:subscribe("/topic",0, function(conn) 
    print("subscribe success") 
end)

m:publish("/topic","hello",0,0, function(conn) 
    print("sent") 
end)

m:close();

但是……有一件事我无法克服。那就是“con”和“conn”参数?它看起来像一个实例或其他东西,但没有定义这样的东西。谁能给我解释一下?

【问题讨论】:

    标签: lua mqtt esp8266 nodemcu


    【解决方案1】:

    the docs 可以发现客户端的on() 方法注册了一个回调,其中第一个参数是客户端本身。为了您的方便(如果链接失效)我复制了以下相关信息:

    mqtt.client:on()

    说明

    向事件注册回调函数。

    语法

    mqtt:on(event, function(client, [topic], [message]))

    参数

    event
    字符串,可以是:"connect"、"message"、"offline"

    function(client, [topic], [message])
    回调函数。第一个参数是客户端。 如果 event 是 "message",则接收到的第 2 和第 3 个参数是字符串中的主题和消息。

    返回

    无。

    【讨论】:

    • 嗨,谢谢。但是该客户端在哪里定义?只有实例“m”。为什么有一次“con”和一次“conn”?一切正常,我只想完全了解。
    • m 是客户端实例,它是在您调用 mqtt.Client(...) 时创建的,而这正是传递给回调的内容。 con 和 conn 就是您命名参数的名称。尝试将print(con==m) 添加到其中一个回调中,您会发现它们是相同的。
    • @jevniky 如果已解决,请接受此答案,以便 StackOverflow 将其标记为已解决。
    猜你喜欢
    • 2016-04-01
    • 2016-01-19
    • 2019-05-21
    • 2019-05-06
    • 2019-05-18
    • 2023-03-28
    • 2020-12-09
    • 2021-09-20
    • 2019-05-18
    相关资源
    最近更新 更多