Lua MQTT发布不是从脚本开始工作,而是在ESP8266上从终端工作

时间:2016-12-12 20:28:47

标签: lua mqtt esp8266 nodemcu

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

当我使用PuTTY在串行连接上运行命令时,一切正常并成功发布消息,由在Raspberry Pi上运行的代理接收。

我试图将其添加到Lua脚本中,通过init.lua运行,而连接回调触发时不会发生任何发布。

--test.lua
print("Setting up WIFI...")
wifi.setmode(wifi.STATION)
--modify according your wireless router settings
wifi.sta.config("ap","pass")
wifi.sta.connect()
tmr.alarm(1, 1000, 1, function()
  if wifi.sta.getip()== nil then
    print("IP unavaiable, Waiting...")
  else
    tmr.stop(1)
    print("Config done, IP is "..wifi.sta.getip())
    -- initiate the mqtt client and set keepalive timer to 120sec
    m = mqtt.Client("myNodeName", 120, "", "") -- blank user and password
    m:on("connect", function() print("connected") end )
    m:connect("*.*.*.*") -- my local broker's IP
    m:publish("topic/test", "7.2", 0, 0) -- no QoS, not retained
  end
end)

我正在使用Esplorer上传并运行该脚本,正如我所说,我成功地看到了“连接”这个脚本。消息,但没有消息到达经纪人。

如果我拿

m:publish("topic/test", "7.2", 0, 0) -- no QoS, not retained

并从"发送"经纪人的命令栏,经纪人收到消息。

我有点失落。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:3)

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

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

m:connect("192.168.11.118", 1883, 0, function(client)
  // now publish through client
end)