乐鑫技术交流
直播中

张燕

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

请问ESP32 MQTT连接如何配置为TLS1.2安全协议?

esp_mqtt_client_config_t mqtt_test_cfg = {
                .host = CONFIG_ETH_MQTT_TEST_HOST,
                .port = CONFIG_ETH_MQTT_TEST_PORT,
                .client_id = CHNT_CODE.ctrl_code,
                .username = CHNT_CODE.ctrl_code,
                .password = CHNT_CODE.brk_code,
                .cert_pem = (const char *)mqtt_esp32_pem,
                .keepalive = 120,
                .lwt_qos = 0,
                .lwt_retain = 0,
        };
        
        TestClient = esp_mqtt_client_init(&mqtt_test_cfg);
        esp_mqtt_client_register_event(TestClient, ESP_EVENT_ANY_ID, ETH_vMqtt_Event_Handler, TestClient);
        esp_mqtt_client_start(TestClient);
                                                                                                                                                         

回帖(1)

纯纯纯牛奶

2024-6-24 16:59:52
要配置ESP32 MQTT连接以使用TLS 1.2安全协议,您需要执行以下步骤:

1. 确保您的ESP32设备已经安装了ESP-IDF开发框架,并且已经配置了所需的库。

2. 在您的代码中,首先需要包含必要的头文件:

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

3. 配置您的MQTT客户端配置结构体`esp_mqtt_client_config_t`。在您的示例代码中,您已经配置了主机名、端口、客户端ID和用户名。接下来,您需要配置TLS相关参数:

```c
esp_mqtt_client_config_t mqtt_test_cfg = {
    .host = CONFIG_ETH_MQTT_TEST_HOST,
    .port = CONFIG_ETH_MQTT_TEST_PORT,
    .client_id = CHNT_CODE.ctrl_code,
    .username = "your_username",
    .password = "your_password",
    .keepalive = 120,
    .disable_clean_session = false,
    .secure = true, // 启用TLS
    .cert_pem = (const char *)server_cert_pem_start, // 服务器证书
    .client_cert_pem = (const char *)client_cert_pem_start, // 客户端证书(如果有)
    .client_key_pem = (const char *)client_key_pem_start, // 客户端私钥(如果有)
    .transport = MQTT_TRANSPORT_OVER_SSL, // 使用SSL传输
};
```

4. 在您的代码中,您需要定义服务器证书、客户端证书和客户端私钥。这些证书和私钥应该是PEM格式的字符串。您可以使用以下代码将它们转换为C语言的字符串:

```c
const char *server_cert_pem_start[] = {"-----BEGIN CERTIFICATE-----", ..., "-----END CERTIFICATE-----"};
const char *client_cert_pem_start[] = {"-----BEGIN CERTIFICATE-----", ..., "-----END CERTIFICATE-----"};
const char *client_key_pem_start[] = {"-----BEGIN RSA PRIVATE KEY-----", ..., "-----END RSA PRIVATE KEY-----"};
```

5. 初始化MQTT客户端:

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

6. 连接到MQTT服务器:

```c
esp_mqtt_client_start(client);
```

7. 现在,您的ESP32设备应该已经使用TLS 1.2安全协议连接到MQTT服务器。您可以使用`esp_mqtt_client_subscribe`和`esp_mqtt_client_publish`等函数来订阅和发布消息。

请注意,您需要根据您的实际需求和MQTT服务器配置来调整上述代码。
举报

更多回帖

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