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

如何让两台独立ESP32在WiFi AP模式下避免IP地址冲突?

解决方案:ESP32 AP模式下动态分配静态IP

核心结论:完全可以实现,无需依赖PainlessMesh这类复杂框架,通过临时切换到Station模式扫描同名AP+静态IP配置就能满足需求。

实现思路

  1. 上电后临时切换到Station模式,扫描预设的AP SSID(两台设备软件相同,SSID一致)。
  2. 如果扫描到目标SSID,说明已有设备占用192.168.4.1,则自身使用192.168.4.2启动AP。
  3. 如果未扫描到,自身使用192.168.4.1启动AP。
  4. 启动AP后配置对应静态IP,再启动Web服务器。

简化代码示例(Arduino框架)

#include <WiFi.h>
#include <WebServer.h>

// 两台设备共用的配置参数
#define AP_SSID "BotAP"
#define AP_PASS "botpass123"
#define BASE_IP IPAddress(192, 168, 4, 1)
#define BACKUP_IP IPAddress(192, 168, 4, 2)
#define SUBNET_MASK IPAddress(255, 255, 255, 0)

WebServer server(80);

void setup() {
  Serial.begin(115200);

  // 临时切换到Station模式扫描AP
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  delay(100);

  bool baseAPExists = false;
  int scanResultCount = WiFi.scanNetworks();
  
  if (scanResultCount > 0) {
    for (int i = 0; i < scanResultCount; i++) {
      if (WiFi.SSID(i) == AP_SSID) {
        baseAPExists = true;
        break;
      }
    }
  }

  // 切换回AP模式,分配对应IP
  WiFi.mode(WIFI_AP);
  IPAddress targetIP = baseAPExists ? BACKUP_IP : BASE_IP;

  // 配置AP静态IP(网关与自身IP一致)
  if (!WiFi.softAPConfig(targetIP, targetIP, SUBNET_MASK)) {
    Serial.println("AP IP配置失败");
    return;
  }

  // 启动AP
  if (WiFi.softAP(AP_SSID, AP_PASS)) {
    Serial.print("AP启动成功,IP: ");
    Serial.println(WiFi.softAPIP());
    // 初始化Web服务器
    initWebServer();
  } else {
    Serial.println("AP启动失败");
  }
}

void initWebServer() {
  server.on("/", []() {
    server.send(200, "text/plain", "Bot在线,IP: " + WiFi.softAPIP().toString());
  });
  server.begin();
}

void loop() {
  server.handleClient();
}

关键注意事项

  • 同时上电冲突处理:如果两台设备几乎同时上电,可能出现双方都未扫描到对方、同时占用192.168.4.1的情况。解决方法是在扫描前添加1-3秒的随机延迟,或者启动AP后定期发送ARP请求检查网段内IP占用,发现冲突则自动切换到备用IP。
  • 扫描可靠性:可以增加扫描次数(比如连续扫描2次),避免单次扫描遗漏目标AP。
  • 无外部网络干扰:你的场景中无外部网络,无需担心扫描到其他同名SSID,逻辑可以保持简单。

内容的提问来源于stack exchange,提问作者Sylvain Plante

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 20:47:52