下面是ESP32在AP模式下作为TCP服务器定时发送数据的示例,分别使用ESP-IDF和Arduino。
ESP-IDF 示例
-
CMakeLists.txt 中添加必要的组件:
idf_component_register(SRCS "main.c" INCLUDE_DIRS "." REQUIRES esp_wifi REQUIRES lwip REQUIRES freertos )
-
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服务器定时发送数据功能!如有其他问题,请随时询问。