我正在尝试从基于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
并从"发送"经纪人的命令栏,经纪人收到消息。
我有点失落。任何帮助表示赞赏。
答案 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)