【问题标题】:Cannot connect to MQTT broker from ESP8266无法从 ESP8266 连接到 MQTT 代理
【发布时间】:2017-01-20 06:30:33
【问题描述】:

我在我的 windows 机器上安装了 Mosquitto,它是一个 MQTT v3.1 代理(最近从 mosquitto.org 下载)。

我正在尝试从 ESP8266 连接到代理,但到目前为止我还无法连接到代理。我可以连接到公共代理,但不能连接到我的机器上安装的连接到同一个 wifi 网络的代理。

我已经使用 build-nodemcu 服务构建了固件并使用了 master 分支。我认为它有 MQTT v3.1.1。

我遇到了这个question,我想我也遇到了同样的情况。虽然已经给出了问题的原因,但是没有提到如何解决这个问题。

您能建议如何解决这个问题吗?

更新 [13-09-2016]
这是我正在使用的代码:

sensorID = "sen_001"
tgtHost = "192.168.8.101"
tgtPort = "1883"
mqttUserID = "admin"
mqttPass = "word"
mqttTimeOut = 120
topicQueue = "/security"

WIFI_SSID = "Lakmal 4G"
WIFI_PASSWORD = "TF18BNY3M"
WIFI_SIGNAL_MODE = wifi.PHYMODE_N

ESP8266_IP=""
ESP8266_NETMASK=""
ESP8266_GATEWAY=""

if wifi.sta.getip() == nil then
    wifi.setmode(wifi.STATION) 
    wifi.setphymode(WIFI_SIGNAL_MODE)
    wifi.sta.config(WIFI_SSID, WIFI_PASSWORD) 
    wifi.sta.connect()
end

if ESP8266_IP ~= "" then
    wifi.sta.setip({ip=ESP8266_IP,netmask=ESP8266_NETMASK,gateway=ESP8266_GATEWAY})
end

print("IP: " .. wifi.sta.getip())

m = mqtt.Client(sensorID, mqttTimeOut, mqttUserID, mqttPass, 1)
m:lwt("/lwt", "offline", 0, 0)
m:on("connect", function(client) print ("connected") end)
m:on("offline", function(client) print ("offline") end)
m:on("message", function(client, topic, data) 
        print(topic .. ":" ) 
        if data ~= nil then
            print(data)
        end
    end)

m:connect(tgtHost, tgtPort, 0, function(client) print ("connected") end,     
                               function(client, reason) print("failed reason: "..reason) end)

我总是收到“失败原因:-5”错误。

我用 MQTTLens chrome 扩展测试了代理,代理运行良好。

【问题讨论】:

    标签: lua mqtt esp8266 mosquitto nodemcu


    【解决方案1】:

    抱歉,评论太长了。

    NodeMCU MQTT docsSO question you referenced 都明确表示您需要 MQTT 3.1。1,3.1 还不够。

    Mosquitto 网站声明

    Eclipse Mosquitto™ 是一个开源(EPL/EDL 许可)消息代理 实现 MQTT 协议版本 3.1 和 3.1.1。

    然而,您声称您的经纪人是 3.1,根据上述声明,这听起来并不是全部真相。

    如果您使用更多详细信息更新您的问题,我会更新此答案。您既没有给出代码也没有给出错误消息。不过,您的 NodeMCU/Lua 代码在公共代理上运行良好这一事实对您的本地代理来说是一个非常有力的理由。

    【讨论】:

    • 很抱歉懒得不更新问题的更多信息。无论如何,当我刚刚在命令行上执行 mosquitto 时,它显示的版本为 3.1。这就是为什么我说它是3.1。正如您所指出的,我已经看到蚊子实现了这两个版本,但它没有显示在控制台窗口中。它只显示3.1。失败的原因总是-5。我将使用正在使用的代码更新问题。
    • 刚刚发现安装了Mosquitto的电脑ping不通。似乎是 Wi-Fi 网络配置的问题。这个问题可以关闭,因为它与 ESP 无关。我真的很抱歉浪费你阅读这篇文章并试图回答的时间。 :(
    • 好的,证实了我的怀疑。只需accept my answer,SO 就会将其标记为已解决。