ESP-32无法连接到MQTT代理:mqtt_client:网络响应错误

时间:2018-11-17 20:07:42

标签: c mqtt esp32 platformio

我试图将使用ESP-IDF框架运行的ESP32连接到MQTT。我已成功导入此MQTT library,并已将配置设置如下:

speedglm

我叫mqtt_app_start();在我的app_main函数中。上传代码后,我的ESP-32无法连接到MQTT代理,并输出以下内容:

shglm

我仔细检查了主机,用户名,密码和端口的值是否正确。当我查看cloudmqtt.com托管的Web界面上的日志时,可以看到以下输出:

static void mqtt_app_start(void)
{
    const esp_mqtt_client_config_t mqtt_cfg = {
        // .host = "m15.cloudmqtt.com",
        .uri = "mqtt://rxarkckf:smNb81Ppfe7T@m15.cloudmqtt.com:10793", // uri in the format (username:password@domain:port)
        // .host = "m15.cloudmqtt.com", // config with host, port, user, password seperated
        // .port = 10793,
        // .username = "rxarkckf",
        // .password = "smNb81Ppfe7T",

        .event_handle = mqtt_event_handler,
        // .user_context = (void *)your_context
    };

    esp_mqtt_client_handle_t client = esp_mqtt_client_init(&mqtt_cfg);
    esp_mqtt_client_start(client);
}

2 个答案:

答案 0 :(得分:0)

我在使用mosquitto方面有类似的经验。

将此行添加到mqtt_config.h使我的mqtt正常工作。

#define CONFIG_MQTT_PROTOCOL_311

我认为设置此配置的更正确方法是在sdkconfig.h中,可以手动或使用“ make menuconfig”

答案 1 :(得分:0)

问题很简单。您正在使用的库实现MQTT 3.1协议。您尝试连接的服务器实现了MQTT 3.1.1协议或更高版本。 如文档(https://www.oasis-open.org/committees/download.php/55095/mqtt-diffs-v1.0-wd01.doc)中所述:

4.1协议名称

协议名称位于MQTT CONNECT控制数据包的变量标头中。协议名称是UTF-8编码的 串。在MQTT 3.1中,协议名称为“ MQISDP”。在MQTT 3.1.1中 协议名称表示为“ MQTT”。

有关技术信息: https://mqtt.org/mqtt-specification/