乐鑫技术交流
直播中

打马过草原

9年用户 887经验值
擅长:可编程逻辑 电源/新能源
私信 关注
[问答]

请问ESP32 C3支不支持在STA模式且不作为TCP服务器时,与多个IP地址建立TCP通讯?

请问ESP32 C3支不支持在STA模式且不作为TCP服务器时,与多个IP地址建立TCP通讯?
或者支不支持在AP+STA共存模式时,与多个IP地址建立TCP通讯?
我参考了官方指南,示例里没有对应描述,调了又调,还是调不出上述模式。                                                                                                                                                

回帖(1)

秋风宜人

2024-7-22 16:57:52
ESP32 C3 是一款具有强大网络功能的微控制器,它支持多种网络协议和模式。在STA(Station)模式下,ESP32 C3 可以作为客户端与其他设备建立TCP连接。同时,它也支持AP(Access Point)+ STA共存模式,即在同一个设备上同时运行AP和STA模式。

1. 在STA模式下与多个IP地址建立TCP通讯:

ESP32 C3 在STA模式下可以与多个IP地址建立TCP连接。您可以使用ESP-IDF或Arduino框架来实现这一功能。以下是一个简单的示例,使用ESP-IDF框架实现与多个IP地址建立TCP连接:

```c
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_wifi.h"
#include "esp_event_loop.h"
#include "esp_log.h"
#include "lwip/err.h"
#include "lwip/sockets.h"

#define EXAMPLE_WIFI_SSID "your_ssid"
#define EXAMPLE_WIFI_PASS "your_password"

static const char *TAG = "example";

static void tcp_client_task(void *pvParameters)
{
    char *remote_ip[] = {"192.168.1.1", "192.168.1.2", "192.168.1.3"};
    int remote_port = 12345;

    for (int i = 0; i < 3; i++) {
        struct sockaddr_in dest_addr;
        int sock;

        dest_addr.sin_family = AF_INET;
        dest_addr.sin_port = htons(remote_port);
        dest_addr.sin_addr.s_addr = inet_addr(remote_ip[i]);

        if ((sock = socket(AF_INET, SOCK_STREAM, 0)) >= 0) {
            if (connect(sock, (struct sockaddr *)&dest_addr, sizeof(dest_addr)) == 0) {
                ESP_LOGI(TAG, "Connected to %s", remote_ip[i]);
                // Send and receive data here
                close(sock);
            } else {
                ESP_LOGE(TAG, "Failed to connect to %s", remote_ip[i]);
            }
        } else {
            ESP_LOGE(TAG, "Failed to create socket for %s", remote_ip[i]);
        }
    }

    vTaskDelete(NULL);
}

void app_main()
{
    ESP_LOGI(TAG, "ESP32 C3 TCP Client example");

    esp_err_t ret = nvs_flash_init();
    if (ret == ESP_ERR_NVS_NO_FREE_PAGES) {
        ESP_ERROR_CHECK(nvs_flash_erase());
        ret = nvs_flash_init();
    }
    ESP_ERROR_CHECK(ret);

    ESP_ERROR_CHECK(esp_netif_init());
    ESP_ERROR_CHECK(esp_event_loop_create_default());

    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
    ESP_ERROR_CHECK(esp_wifi_init(&cfg));
    ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_RAM));
    ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
    ESP_ERROR_CHECK(esp_wifi_start());

    wifi_config_t sta_config = {
        .sta = {
            .ssid = EXAMPLE_WIFI_SSID,
            .password = EXAMPLE_WIFI_PASS,
        },
    };
    ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &sta_config));
    ESP_ERROR_CHECK(esp_wifi_connect());

    xTaskCreate(tcp_client_task, "tcp_client_task", 4096, NULL, 5, NULL);
}
```

2. 在AP+STA共存模式下与多个IP地址建立TCP通讯:

ESP32 C3 支持AP+STA共存模式,您可以在该模式下与多个IP地址建立TCP连接。实现方法与STA模式类似,只需确保在初始化WiFi时设置为AP+STA模式:

```c
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_APSTA));
```

其他部分的代码与STA模式下的示例相同。

请注意,这些示例仅用于说明ESP32 C3 支持STA模式和AP+STA共存模式下与多个IP地址建立TCP连接的功能。实际应用中,您可能需要根据具体需求进行调整和优化。
举报

更多回帖

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