乐鑫技术交流
直播中

张勇

7年用户 1373经验值
私信 关注
[问答]

esp32调试MQTT的程序,如何对.host初始化?

我现在在调试MQTT的程序,用到idf里面的esp-idf/examples/protocols/mqtt/tcp例程,在mqtt_app_start里面初始化esp_mqtt_client_config_t mqtt_cfg这个结构体的时候,你们例程里面只初始化url,  但是我在网上看到很多地方的参考程序都是初始化这些结构体成员的:   

   esp_mqtt_client_config_t mqtt_cfg = {
        .host = "192.168.31.107",                  //MQTT服务器IP
        .event_handle = mqtt_event_handler,        //MQTT事件
        .port=1883,                                //端口
        .username = "admin",                       //用户名
        .password = "public",                      //密码
        // .user_context = (void *)your_context
    };

但是我查看了一下esp_mqtt_client_config_t 的结构体成员,好像都没有.host这个成员,而且其他的成员都是分开放在里面不同的结构体里面,我想问问,如果我想对.host成员初始化  应该怎么做?
                                         

回帖(2)

崔映芬

2024-6-11 10:03:06
     host 的话,你还需要设置 path(如果有的话),还有必须设置 transport。其他都是一样的。
一般我们会用 uri 来包含 host,path 和 transport。比如:mqtt://test.org/test. 其中,host 是 test.org,transport 是 MQTT_TRANSPORT_OVER_TCP,path 是 test。
举报

刘静

2024-6-11 17:06:14
在使用ESP32进行MQTT调试时,您需要正确初始化`esp_mqtt_client_config_t`结构体。在ESP-IDF的示例中,可能只初始化了`host`成员,但实际上,您还需要初始化其他成员,如端口、用户名、密码等。以下是如何初始化`esp_mqtt_client_config_t`结构体的示例:

1. 首先,确保您已经导入了所需的头文件:

```c
#include "esp_mqtt_client.h"
```

2. 然后,在您的代码中,创建并初始化`esp_mqtt_client_config_t`结构体:

```c
esp_mqtt_client_config_t mqtt_cfg = {
    .host = "192.168.31.107", // MQTT服务器IP
    .port = 1883,              // MQTT服务器端口,默认为1883
    .client_id = "ESP32_1",    // 客户端ID,可以根据您的设备进行修改
    .username = "your_username", // MQTT用户名,如果不需要则设置为空字符串
    .password = "your_password", // MQTT密码,如果不需要则设置为空字符串
    .keepalive = 60,            // MQTT保活时间,单位为秒
    .disable_clean_session = false, // 是否禁用清理会话
    .transport = MQTT_TRANSPORT_OVER_TCP, // 使用TCP协议
    .lwt_topic = "lwt",         // LWT主题
    .lwt_msg = "offline",       // LWT消息
    .lwt_qos = 0,               // LWT服务质量
    .lwt_retain = 0,            // LWT保留标志
};
```

3. 使用初始化后的`mqtt_cfg`结构体创建MQTT客户端:

```c
esp_mqtt_client_handle_t client = esp_mqtt_client_init(&mqtt_cfg);
```

4. 接下来,您可以使用`client`句柄进行MQTT连接、订阅、发布等操作。

请注意,您需要根据您的实际需求和MQTT服务器配置来调整上述代码中的参数。例如,如果您的MQTT服务器使用不同的端口或需要身份验证,请相应地修改`port`、`username`和`password`成员。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分