乐鑫技术交流
直播中

云达贞

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

请问espconn_connect()不成功会自动调重连回调函数吗?

请问espconn_connect(),不成功会自动调重连回调函数吗?

回帖(1)

任凭风吹

2024-7-13 17:14:16
ESP8266 和 ESP32 的 ESP-NOW 库中的 `espconn_connect()` 函数用于建立 TCP 连接。当连接失败时,它不会自动调用重连回调函数。您需要手动实现重连机制。

以下是实现重连机制的一种方法:

1. 定义一个重连尝试次数的变量,例如 `retry_count`。
2. 在 `espconn_connect()` 函数调用失败时,检查 `retry_count` 是否达到最大重试次数。如果没有达到,增加 `retry_count` 并使用延时函数(如 `vTaskDelay()`)等待一段时间后再次尝试连接。
3. 如果达到最大重试次数,可以停止重连尝试或执行其他操作。

以下是一个简单的示例代码:

```c
#include "esp_wifi.h"
#include "esp_system.h"
#include "esp_event_loop.h"
#include "esp_log.h"
#include "espconn.h"

#define RETRY_MAX 5

static struct espconn esp_conn;
static int retry_count = 0;

void esp8266_connect_to_ap() {
    ESP_LOGI("ESP8266", "Connecting to AP...");

    esp_err_t ret = esp_wifi_connect();
    if (ret == ESP_OK) {
        ESP_LOGI("ESP8266", "Connected to AP successfully");
    } else {
        ESP_LOGI("ESP8266", "Failed to connect to AP : %d", ret);
    }
}

void espconn_connect_to_server() {
    esp_conn.type = ESPCONN_TCP;
    esp_conn.state = ESPCONN_NONE;
    esp_conn.proto.tcp = (esp_tcp *)malloc(sizeof(esp_tcp));
    esp_conn.proto.tcp->local_port = esp_random();
    esp_conn.proto.tcp->remote_port = 80;

    struct ip_info ip_config;
    wifi_get_ip_info(STA_IF, &ip_config);

    esp_conn.proto.tcp->remote_ip[0] = ip_config.ip.addr[0];
    esp_conn.proto.tcp->remote_ip[1] = ip_config.ip.addr[1];
    esp_conn.proto.tcp->remote_ip[2] = ip_config.ip.addr[2];
    esp_conn.proto.tcp->remote_ip[3] = ip_config.ip.addr[3];

    espconn_connect(&esp_conn);

    if (esp_conn.state == ESPCONN_NONE) {
        retry_count++;
        ESP_LOGI("ESPCONN", "Connection failed, retry count: %d", retry_count);

        if (retry_count <= RETRY_MAX) {
            vTaskDelay(5000 / portTICK_PERIOD_MS);
            espconn_connect_to_server();
        } else {
            ESP_LOGI("ESPCONN", "Max retry count reached, stopping reconnection attempts");
        }
    }
}

void app_main() {
    esp8266_connect_to_ap();
    espconn_connect_to_server();
}
```

请注意,这只是一个简单的示例,您可能需要根据您的具体需求进行调整。
举报

更多回帖

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