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
相关产品推荐
相关产品推荐

