写一个esp32 ap模式下,tcp server定时发送数据的示例,要求用esp-idf与arduino各一个

下面是ESP32在AP模式下作为TCP服务器定时发送数据的示例,分别使用ESP-IDF和Arduino。

ESP-IDF 示例

  1. CMakeLists.txt 中添加必要的组件:

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

#include <stdio.h>
#include <string.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"
#define TCP_PORT 8080

void wifi_init_ap() {
    esp_wifi_init(NULL);
    wifi_config_t ap_config = {
        .ap = {
            .ssid = WIFI_SSID,
            .ssid_len = strlen(WIFI_SSID),
            .max_connection = 4,
            .authmode = WIFI_AUTH_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 *msg = "Hello from ESP32!";
    struct sockaddr_in dest_addr;
    int listen_sock, accept_sock;

    listen_sock = socket(AF_INET, SOCK_STREAM, 0);
    dest_addr.sin_family = AF_INET;
    dest_addr.sin_addr.s_addr = INADDR_ANY;
    dest_addr.sin_port = htons(TCP_PORT);

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

    while (1) {
        accept_sock = accept(listen_sock, NULL, NULL);
        if (accept_sock < 0) {
            perror("Unable to accept connection");
            continue;
        }

        while (1) {
            send(accept_sock, msg, strlen(msg), 0);
            vTaskDelay(pdMS_TO_TICKS(2000));  // 每2秒发送一次数据
        }
        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);
    WiFi.softAP(ssid, password);
    server.begin();
    Serial.println("TCP 服务器已启动");
}

void loop() {
    WiFiClient client = server.available();
    if (client) {
        Serial.println("客户端已连接");
        while (client.connected()) {
            client.println("Hello from ESP32!");  // 发送数据
            delay(2000);  // 每2秒发送一次数据
        }
        client.stop();
        Serial.println("客户端已断开");
    }
}

说明

  • ESP-IDF 示例:使用低级API创建TCP服务器,使用FreeRTOS任务定时发送数据。
  • Arduino 示例:利用WiFi库创建TCP服务器,使用delay()函数定时发送数据。

确保在开发环境中正确配置ESP-IDF和Arduino库。这些示例将帮助你实现ESP32在AP模式下的TCP服务器定时发送数据功能!如有其他问题,请随时询问。

在这里插入图片描述
ESP模组

GD FreeRTOS是指在GD32F107芯片上使用FreeRTOS实现的操作系统。GD32F107是一款国产芯片,相比于STM32芯片更经济实惠。在使用GD32F107进行FreeRTOS移植之前,需要进行一些准备工作。首先,需要准备好GD32F303 FreeRTOS的keil工程,可以根据《GD32F303调试小记(九)之FreeRTOS移植》创建工程。其次,需要获取LVGL源码,建议使用V7.11版本,在Github上可以找到相应的源码。还需要准备一块由GD32F303主控的硬件板子,并包含对应的输入输出控件。移植步骤包括将LVGL源码并入KEIL工程和对LV_MEM_SIZE进行设置。具体步骤可以参考引用和引用中提供的信息。GD32 FreeRTOS的特点包括免费、文件数量较少、市场占有率高且稳定性得到市场认可。可以使用FreeRTOS进行任务管理和调度,实现多任务的并行执行。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span> #### 引用[.reference_title] - *1* *3* [freertos学习01-移植到gd32](https://blog.csdn.net/sinat_36568888/article/details/124165372)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *4* [GD32F303调试小记(十)之LVGL移植(FreeRTOS)](https://blog.csdn.net/qq_37554315/article/details/131171875)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值