You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:30:32