【问题标题】:MQTT connection through ESP01 8266通过 ESP01 8266 连接 MQTT
【发布时间】:2021-01-22 22:15:47
【问题描述】:

我正在尝试通过 ESP01 8266 与我的 mosquitto 服务器建立连接。我在计算机上安装了 mosquitto 并使用 brew 启动它。

问题是 ESP01 没有连接到“localhost:1833”(这应该是我的蚊子地址)。我不知道该怎么办,我错过了什么吗?

这条线可能是问题?我没有在 NodeRed 上设置客户端名称 -------> if (mqttClient.connect("ESP8266Client"))

ESP 草图:

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
    
const char* ssid         = "WifiNetworkname";
const char* password     = "password";
const char* mqttServer   = "localhost:1833";
const int   mqttPort     = 1883;
    
#define PUB_GPIO2_STATUS "state"
#define SUB_GPIO2_ACTION "state"
#define GPIO2_LED 2
     
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);
     
void loop() {
  mqttClient.loop();
}
    
void initWifiStation() {
  WiFi.mode(WIFI_AP_STA);
  WiFi.begin(ssid, password);    
  Serial.print("\nConnecting to WiFi");
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);        
    Serial.print(".");
  }
  Serial.println(String("\nConnected to the WiFi network (") + ssid + ")" );
}
     
void initMQTTClient() {
  // Connecting to MQTT server
  mqttClient.setServer(mqttServer, mqttPort);
  while (!mqttClient.connected()) {
    Serial.println(String("Connecting to MQTT (") + mqttServer + ")...");
    if (mqttClient.connect("ESP8266Client")) {
      Serial.println("MQTT client connected");  
    } else {
      Serial.print("\nFailed with state ");
      Serial.println(mqttClient.state());
      if (WiFi.status() != WL_CONNECTED) {
        initWifiStation();
      }
      delay(2000);
    }
  }
    
  // Declare Pub/Sub topics
  mqttClient.publish(PUB_GPIO2_STATUS, "Hello");
  mqttClient.subscribe(SUB_GPIO2_ACTION);
}
    
void setup() {
  Serial.begin(115200);
  // GPIO2 is set OUTPUT
  pinMode(GPIO2_LED, OUTPUT);
  initWifiStation();
  initMQTTClient();
}

【问题讨论】:

    标签: c++ arduino localhost esp8266 mosquitto


    【解决方案1】:

    Localhost 在您的 ESP 上的代码中是 ESP 本身。您正在尝试从 ESP 连接到 ESP。

    Localhost 总是指“这台计算机”,就像 IP 地址 127.0.0.1 一样。

    “这台计算机”从 ESP 上的代码中可以看出是 ESP 本身,而不是运行 MQTT 服务器的计算机。

    假设语法正确:在const char* mqttServer = "localhost:1833"; 行中,您需要输入运行MQTT 服务器的计算机的IP 地址(或名称),而不是localhost。我不知道你是否也需要更改端口。

    【讨论】:

    • 看到“本地主机”这个词却再也没有考虑过的人数之多,令我着迷和失望。
    • 您还应该从mqttServer 的末尾删除:1883,因为端口是单独指定的(1883 是默认的MQTT 端口)
    • 我在 Mac 上,当我从终端“ifconfing”运行时,我应该找到我电脑的 IP 地址。问题是,当我将 IP 地址放入 const char* mqttServer 时,我无论如何都无法连接
    猜你喜欢
    • 2021-12-15
    • 2020-11-07
    • 2020-04-03
    • 1970-01-01
    • 2015-08-17
    • 2022-01-02
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多