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

ESP32-PoE-ISO-Ind以太网静态IP分配失败问题排查

解决OLIMEX ESP32-PoE-ISO-Ind静态IP配置失败问题

核心问题分析

DHCP模式正常说明硬件PHY芯片(LAN8720)和通信链路无故障,静态IP失败大概率是引脚映射未匹配板卡规格或库初始化参数缺失导致。


针对<Ethernet.h>库的修复方案

OLIMEX ESP32-PoE-ISO-Ind的ETH引脚并非Arduino Ethernet库默认值,必须手动指定后再初始化静态IP:

#include <Ethernet.h>

// 自定义静态IP配置
IPAddress localIP(192, 168, 1, 100);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);
IPAddress dnsServer(192, 168, 1, 1); // 建议配置DNS,避免域名解析问题

// OLIMEX板卡固定ETH引脚定义
#define ETH_MDC_PIN 23
#define ETH_MDIO_PIN 18
#define ETH_PHY_ADDR 0
#define ETH_PHY_TYPE ETH_PHY_LAN8720

void setup() {
  Serial.begin(115200);
  while (!Serial); // 等待串口连接

  // 先初始化ETH硬件引脚
  Ethernet.init(ETH_MDC_PIN, ETH_MDIO_PIN);

  // 带参数启动静态IP网络
  if (!Ethernet.begin(NULL, localIP, dnsServer, gateway, subnet, ETH_PHY_ADDR, ETH_PHY_TYPE)) {
    Serial.println("Ethernet初始化失败,请检查配置");
    while (1); // 死循环等待排查
  }

  Serial.print("已分配静态IP: ");
  Serial.println(Ethernet.localIP());
}

void loop() {
  // 你的业务逻辑代码
}

针对<ETH.h>库的修复方案

使用ESP-IDF原生ETH库时,需先完成硬件初始化,再设置静态IP参数:

#include <ETH.h>

// 静态IP配置
IPAddress localIP(192, 168, 1, 100);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);
IPAddress dnsServer(192, 168, 1, 1);

static bool ethConnected = false;

// ETH状态回调
void ethEventHandler(WiFiEvent_t event) {
  switch (event) {
    case ARDUINO_EVENT_ETH_CONNECTED:
      ethConnected = true;
      Serial.println("ETH物理链路已连接");
      break;
    case ARDUINO_EVENT_ETH_DISCONNECTED:
      ethConnected = false;
      Serial.println("ETH物理链路断开");
      break;
    default:
      break;
  }
}

void setup() {
  Serial.begin(115200);
  WiFi.onEvent(ethEventHandler);

  // 初始化ETH硬件(匹配OLIMEX板卡参数)
  ETH.begin(ETH_PHY_ADDR, ETH_MDC_PIN, ETH_MDIO_PIN, ETH_PHY_TYPE, ETH_CLK_MODE_GPIO0_IN);
  
  // 设置静态IP
  ETH.config(localIP, gateway, subnet, dnsServer);

  // 等待连接完成
  while (!ethConnected) {
    delay(100);
  }

  Serial.print("已分配静态IP: ");
  Serial.println(ETH.localIP());
}

void loop() {
  // 你的业务逻辑代码
}

额外排查要点

  • 确认静态IP未落入路由器DHCP地址池范围,避免IP冲突
  • 核对网关、子网掩码与路由器配置完全一致
  • 测试更换以太网电缆,排除线材故障
  • 若使用PoE供电,确保电源功率达标(建议用USB供电交叉验证)

内容的提问来源于stack exchange,提问作者4n3s1-2525

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 10:22:40