如何在Arduino IDE中实现两块ESP32无路由器的服务器/客户端架构?
嘿,看你已经搞定了ESP32的AP模式,接下来要实现两块板子的服务器/客户端直连对吧?我给你整理了完整的实现步骤,直接就能用:
两块ESP32无路由器直连(AP服务器 + STA客户端)
第一步:配置AP端(服务器)
你已经有了基础的AP代码,这里完善成服务器模式,让它能监听客户端连接并处理数据:
#include <WiFi.h> // AP网络参数 const char *ssid = "Zupa"; const char *password = "12345678"; WiFiServer server(80); // 监听80端口 void setup() { Serial.begin(115200); Serial.println("配置AP服务器..."); // 启动AP模式 WiFi.softAP(ssid, password); IPAddress apIP = WiFi.softAPIP(); Serial.print("AP服务器IP地址: "); Serial.println(apIP); // 启动服务器 server.begin(); Serial.println("服务器已启动,等待客户端连接..."); } void loop() { // 检查是否有客户端接入 WiFiClient client = server.available(); if (client) { Serial.println("新客户端已连接"); // 持续读取客户端数据并回复 while (client.connected()) { if (client.available()) { String data = client.readStringUntil('\n'); Serial.print("收到客户端数据: "); Serial.println(data); // 给客户端发送回复 client.println("服务器已收到你的消息: " + data); } } // 断开连接后清理 client.stop(); Serial.println("客户端已断开连接"); } }
第二步:配置STA端(客户端)
这块ESP32要以Station模式连接到上面的AP服务器,实现数据收发:
#include <WiFi.h> // AP服务器的参数(和AP端保持一致) const char *ssid = "Zupa"; const char *password = "12345678"; const char *serverIP = "192.168.4.1"; // AP模式默认IP,和AP端打印的IP一致即可 const uint16_t serverPort = 80; WiFiClient client; void setup() { Serial.begin(115200); Serial.println("配置STA客户端..."); // 连接到AP服务器 WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("\n已连接到AP服务器"); Serial.print("客户端IP地址: "); Serial.println(WiFi.localIP()); // 发起与服务器的连接 if (client.connect(serverIP, serverPort)) { Serial.println("已连接到服务器"); // 发送第一条测试消息 client.println("嘿,服务器!我是客户端ESP32"); } else { Serial.println("连接服务器失败,请检查参数"); } } void loop() { // 读取服务器的回复 if (client.available()) { String response = client.readStringUntil('\n'); Serial.print("收到服务器回复: "); Serial.println(response); } // 每2秒发送一次定时消息,同时处理重连 static unsigned long lastSendTime = 0; if (millis() - lastSendTime > 2000) { lastSendTime = millis(); if (client.connected()) { client.println("客户端定时消息: " + String(millis()/1000) + "秒"); } else { Serial.println("与服务器断开,尝试重连..."); client.connect(serverIP, serverPort); } } }
关键注意事项
- IP地址匹配:AP模式下ESP32默认IP是
192.168.4.1,如果你的AP端打印的IP不同,一定要修改客户端代码里的serverIP。 - 端口一致性:服务器和客户端要使用相同的端口(这里用的80,你也可以改成其他比如10000,只要两边一致就行)。
- 串口调试:上传代码后打开Arduino IDE的串口监视器(波特率115200),可以实时看到连接状态和数据交互情况。
- 无路由器依赖:两块ESP32直接通过AP-STA模式建立连接,完全不需要中间路由器,完美符合你的需求。
现在把两块ESP32分别上传对应的代码,上电后就能看到它们互相通信啦!
内容的提问来源于stack exchange,提问作者Willy Wonka
相关产品推荐
相关产品推荐

