Lua MQTT发布从脚本不工作,但从ESP8266终端工作

我正在尝试从基于ESP8266的Geekcreit开发板创建一个小型MQTT客户端。

当我使用PuTTY通过串行连接运行命令时,一切都正常工作,并且成功发布消息,被运行在树莓派上的代理接收。

我正在尝试将此添加到Lua脚本中,以通过init.lua运行,在连接回调触发时,确实发生了发布,但后续操作却毫无进展。

--test.lua
print("设置WIFI...")
wifi.setmode(wifi.STATION)
-- 根据无线路由器的设置进行修改
wifi.sta.config("ap","pass")
wifi.sta.connect()
tmr.alarm(1, 1000, 1, function()
  if wifi.sta.getip()== nil then
    print("IP不可用,等待...")
  else
    tmr.stop(1)
    print("配置完成,IP为"..wifi.sta.getip())
    -- 初始化mqtt客户端并将keepalive计时器设置为120秒
    m = mqtt.Client("myNodeName", 120, "", "") -- 空白用户和密码
    m:on("connect", function() print("已连接") end )
    m:connect("*.*.*.*") -- 我的本地代理的IP
    m:publish("topic/test", "7.2", 0, 0) -- 无QoS,不保留
  end
end)

我正在使用Esplorer上传和运行该脚本,并成功看到“已连接”消息,但代理没有接收到任何消息。

如果我从Esplorer的“发送”命令栏中取出

m:publish("topic/test", "7.2", 0, 0) -- 无QoS,不保留

并将其发布,代理将接收到消息。

我对此感到有些困惑,任何帮助将不胜感激。

点赞
用户131929
用户131929

就像 NodeMCU API 中的许多其他函数一样,mqtt.client:connect() 是异步的,即它不会阻塞。只有成功建立连接后才能发布。在 mqtt.client:connect() 中有一个回调函数来完成这一过程。

你可以使用本地的 mqtt_connected 标志,在回调函数中(或 m:on("connect"))设置它并在定时器中等待连接,或直接在回调函数中发布。

m:connect("192.168.11.118", 1883, 0, function(client)
  //现在通过客户端发布
end)
2016-12-13 08:30:48