1. AP端代码(热点创建者)
#include <WiFi.h>
#include <WiFiClient.h>
#include <WiFiAP.h>
const char* ap_ssid = "ESP32_AP";
const char* ap_password = "12345678";
WiFiServer server(80); // 创建TCP服务器,端口80
void setup() {
Serial.begin(115200);
delay(100);
// 启动AP模式
WiFi.softAP(ap_ssid, ap_password);
Serial.println();
Serial.print("AP IP地址: ");
Serial.println(WiFi.softAPIP()); // 打印AP的IP地址
server.begin(); // 启动服务器
}
void loop() {
WiFiClient client = server.available(); // 监听客户端连接
if (client) {
Serial.println("新客户端连接");
while (client.connected()) {
if (client.available()) {
String message = client.readStringUntil('\n'); // 读取客户端消息
Serial.print("收到消息: ");
Serial.println(message);
// 回复客户端
client.print("AP已收到: " + message + "\n");
}
}
client.stop();
Serial.println("客户端断开");
}
}
2. STA端代码(连接设备)
#include <WiFi.h>
const char* ssid = "ESP32_AP";
const char* password = "12345678";
WiFiClient client;
const char* host = "192.168.4.1"; // AP的默认IP
const int port = 80;
void setup() {
Serial.begin(115200);
delay(100);
// 连接到AP
WiFi.begin(ssid, password);
Serial.print("正在连接到AP");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("已连接,STA IP: ");
Serial.println(WiFi.localIP());
}
void loop() {
Serial.println("尝试连接服务器...");
if (!client.connect(host, port)) {
Serial.println("连接失败");
delay(1000);
return;
}
// 发送消息到AP
String message = "Hello from STA " + String(millis());
client.print(message + "\n");
Serial.println("发送: " + message);
// 等待回复
unsigned long timeout = millis();
while (client.connected() && millis() - timeout < 3000) {
if (client.available()) {
String line = client.readStringUntil('\n');
Serial.print("收到回复: ");
Serial.println(line);
break;
}
}
client.stop();
delay(2000); // 每2秒通信一次
}
使用说明
-
上传代码:
- 将AP端代码上传到第一个ESP32
- 将STA端代码上传到第二个ESP32
-
连接过程:
- AP端ESP32会创建名为"ESP32_AP"的热点
- STA端ESP32会自动连接该热点
-
通信验证:
- 打开两个串口监视器(分别对应两个ESP32)
- STA端每2秒发送一次消息,AP端会回复确认
- 在串口监视器可以看到通信日志