写一个四博智联esp32-C3模组在AP模式下,做TCP服务器的示例,要求 esp-idf和arduino同时

以下是四博智联ESP32-C3模组在AP模式下作为TCP服务器的示例,分别使用ESP-IDF和Arduino。

ESP-IDF 示例

  1. CMakeLists.txt 中添加网络库:

    idf_component_register(SRCS "main.c"
        INCLUDE_DIRS "."
        REQUIRES esp_netif
        REQUIRES lwip
        REQUIRES freertos
    )
    
  2. main.c 文件:

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_wifi.h"
#include "esp_event.h"
#include "nvs_flash.h"
#include "lwip/sockets.h"

#define WIFI_SSID "ESP32-AP"
#define WIFI_PASS "123456789"

void wifi_init_ap() {
    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
    esp_wifi_init(&cfg);

    wifi_config_t ap_config = {
        .ap = {
            .ssid = WIFI_SSID,
            .ssid_len = strlen(WIFI_SSID),
            .max_connection = 4,
            .authmode = WIFI_AUTH_WPA_WPA2_PSK,
            .password = WIFI_PASS,
        },
    };

    esp_wifi_set_mode(WIFI_MODE_AP);
    esp_wifi_set_config(WIFI_IF_AP, &ap_config);
    esp_wifi_start();
}

void tcp_server_task(void *pvParameters) {
    char rx_buffer[128];
    char addr_str[INET6_ADDRSTRLEN];
    struct sockaddr_in6 dest_addr;
    int listen_sock, accept_sock;

    listen_sock = socket(AF_INET6, SOCK_STREAM, 0);
    if (listen_sock < 0) {
        perror("Unable to create socket");
        return;
    }

    memset(&dest_addr, 0, sizeof(dest_addr));
    dest_addr.sin6_family = AF_INET6;
    dest_addr.sin6_addr = in6addr_any;
    dest_addr.sin6_port = htons(8080);

    bind(listen_sock, (struct sockaddr *)&dest_addr, sizeof(dest_addr));
    listen(listen_sock, 1);

    while (1) {
        socklen_t addr_len = sizeof(dest_addr);
        accept_sock = accept(listen_sock, (struct sockaddr *)&dest_addr, &addr_len);
        if (accept_sock < 0) {
            perror("Unable to accept connection");
            continue;
        }

        int len = recv(accept_sock, rx_buffer, sizeof(rx_buffer) - 1, 0);
        if (len > 0) {
            rx_buffer[len] = 0; // Null-terminate
            printf("Received: %s\n", rx_buffer);
        }
        close(accept_sock);
    }
}

void app_main() {
    nvs_flash_init();
    wifi_init_ap();
    xTaskCreate(tcp_server_task, "tcp_server_task", 4096, NULL, 5, NULL);
}

Arduino 示例

#include <WiFi.h>

const char* ssid = "ESP32-AP";
const char* password = "123456789";

WiFiServer server(8080);

void setup() {
    Serial.begin(115200);
    
    // 设置为AP模式
    WiFi.softAP(ssid, password);
    
    // 启动服务器
    server.begin();
    Serial.println("服务器已启动");
}

void loop() {
    WiFiClient client = server.available();
    if (client) {
        String request = "";
        while (client.connected() && !client.available()) {
            delay(1);
        }

        while (client.available()) {
            char c = client.read();
            request += c;
        }

        Serial.print("接收到: ");
        Serial.println(request);
        client.stop();
    }
}

说明

  • ESP-IDF 示例使用低级API,创建一个TCP服务器并监听端口8080。
  • Arduino 示例利用WiFi库,设置为AP模式并处理客户端连接。

确保在开发环境中正确配置ESP-IDF和Arduino库。希望这些示例对你有帮助!如有疑问,请告诉我。

在这里插入图片描述
模组规格

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值