You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP32无法连接本地mosquitto服务器,MQTTX连接正常求助

ESP32无法连接本地Mosquitto MQTT服务器排查与修复方案

核心错误:MQTT服务器地址配置错误

代码中const char* mqtt_server = "127.0.0.1";是电脑的本地回环地址,ESP32作为局域网内的独立设备,无法通过该地址访问电脑上的Mosquitto服务。必须替换为电脑在局域网中的实际IP地址(可通过Windows的ipconfig或Linux/macOS的ifconfig命令查看,格式通常为192.168.x.x)。


其他排查与修复步骤

  • 修改Mosquitto配置,允许局域网访问
    默认情况下Mosquitto可能仅绑定127.0.0.1,需修改配置文件(通常为mosquitto.conf):

    • 找到bind_address项,注释原内容后添加bind_address 0.0.0.0
    • 重启Mosquitto服务:Linux执行sudo systemctl restart mosquitto,Windows在服务管理器中重启对应服务
  • 关闭电脑防火墙或开放MQTT端口
    确保电脑防火墙允许1883端口(MQTT默认端口)的入站连接,或临时关闭防火墙测试连接是否恢复。

  • 修复WiFi连接逻辑
    原setup_wifi函数未等待WiFi连接成功,ESP32可能在未联网状态下尝试连接MQTT。修改为:

    void setup_wifi() {
      Serial.print("Connecting to ");
      Serial.println(ssid);
    
      WiFi.begin(ssid, wifi_password);
      // 等待WiFi连接成功
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      Serial.println("");
      Serial.println("WiFi connected");
      Serial.println("IP address: ");
      Serial.println(WiFi.localIP());
    }
    
  • 使用唯一ClientID
    代码中的clientID与MQTTX客户端ID重复,MQTT协议默认禁止同一ClientID同时在线,修改为ESP32专属ID:

    const char* clientID = "ESP32_Led_Client";
    
  • 完善MQTT连接与重连逻辑
    在代码中补充MQTT初始化和重连逻辑,确保连接稳定性:

    void setup() {
      Serial.begin(115200);
      pinMode(LED_PIN, OUTPUT);
      setup_wifi();
      client.setServer(mqtt_server, 1883); // 设置MQTT服务器地址和端口
    }
    
    // MQTT重连函数
    void reconnect() {
      while (!client.connected()) {
        Serial.print("Attempting MQTT connection...");
        // 传入用户名密码尝试连接
        if (client.connect(clientID, mqtt_username, mqtt_password)) {
          Serial.println("connected");
          client.subscribe(control_topic);
          client.publish(hello_topic, "ESP32 connected to MQTT broker");
        } else {
          Serial.print("failed, rc=");
          Serial.print(client.state());
          Serial.println(" try again in 5 seconds");
          delay(5000);
        }
      }
    }
    
    void loop() {
      if (!client.connected()) {
        reconnect();
      }
      client.loop();
      // 此处添加业务逻辑
    }
    

内容的提问来源于stack exchange,提问作者Abdullah Saleh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 10:02:18