ESP32开发-两个WIFI设备的通讯搭建
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服务器,端口80void 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);// 连接到APWiFi.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;}// 发送消息到APString 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端会回复确认
- 在串口监视器可以看到通信日志