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

ESP32搭配W5500以太网模块无法打印IP地址求助

问题描述

尝试通过Web客户端控制LED亮灭,需获取设备IP,但串口监视器未打印IP,仅输出启动信息:

rst:0x8 (TG1WDT_SYS_RESET),boot:0x12 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:1344
load:0x40078000,len:13964
load:0x40080400,len:3600
entry 0x400805f0
etts Jul 29 2019 12:21:46

硬件配置:ESP-WROOM-32 + W5500以太网模块,接线如下:

  • SCLK接gpio18
  • SCS接gpio5
  • MOSI接gpio23
  • MISO接gpio19
  • INT接EN
  • RST接gpio26

使用的代码如下:

#include <SPI.h>
#include <Ethernet.h>

int led = 4;

// MAC address should be unique for each device on the network
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

EthernetServer server(80);

String readString;

void setup() {
// Start serial communication for debugging
Serial.begin(115200);
pinMode(led, OUTPUT);

// Attempt to configure Ethernet using DHCP
Ethernet.begin(mac);
server.begin();
Serial.print("Server is at ");
Serial.println(Ethernet.localIP());
}


void loop() {
// Your main code goes here
EthernetClient client = server.available();


if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.print(c);

if (readString.length() < 100) {
readString += c;
}

if (c == '\n') {
Serial.print(readString);
client.println("<HTTP/1.1 200 OK>");
client.println("<Connection-Type: text/html>");
client.println("<Connection: close>");
client.println();

client.println("<!DOCTYPE html>");
client.println("<html>");
client.println("<head>");
client.println("<title>Webserver</title>");
client.println("</head>");
client.println("<body>");
client.println("<a ref=\"/?button1on\"><button>LED ON</button></a>");
client.println("<a ref=\"/?button2off\"><button>LED OFF</button></a>");
client.println("<body style=background-color:powderblue>");

delay(1);
client.stop();
if (readString.indexOf("?buttton1on") > 0) {
digitalWrite(led, HIGH);
}
if (readString.indexOf("?buttton2off") > 0) {
digitalWrite(led, LOW);
}
readString = "";
}
}
}
}
}
问题分析与解决建议

一、接线问题排查

  • INT引脚错误:W5500的INT是中断输出引脚,应接ESP32的普通GPIO(如gpio2),而非EN引脚。EN是ESP32的使能引脚,接INT会打乱ESP32的启动逻辑,导致通信异常。
  • RST引脚优化:W5500的RST引脚需低电平复位,建议给该引脚接一个3.3V上拉电阻,再通过gpio26控制;同时在初始化SPI前,先拉低RST引脚100ms再释放,确保模块复位完成。

二、代码逻辑修正

  • 添加DHCP失败处理:当前代码未检查DHCP是否成功,若获取IP失败,Ethernet.localIP()会返回0.0.0.0,且可能跳过打印逻辑。修改初始化代码:
    unsigned long startMillis = millis();
    // 最多等待10秒尝试DHCP
    while (Ethernet.begin(mac) == 0 && millis() - startMillis < 10000) {
      Serial.println("DHCP配置失败,重试中...");
      delay(1000);
    }
    // 若DHCP失败,切换为静态IP
    if (Ethernet.localIP() == IPAddress(0,0,0,0)) {
      Serial.println("DHCP失败,使用静态IP");
      Ethernet.begin(mac, IPAddress(192,168,1,100));
    }
    Serial.print("Server is at ");
    Serial.println(Ethernet.localIP());
    
  • 修复HTML与字符串匹配错误:
    • 链接标签的ref改为href,否则点击按钮无法触发正确请求;
    • 重复的<body>标签合并,改为<body style="background-color:powderblue">;
    • 字符串匹配中的?buttton1on和?buttton2off多写了一个t,修正为?button1on和?button2off,否则LED控制逻辑无法触发。

三、硬件与驱动兼容性调整

  • SPI总线配置:ESP32的gpio18/19/23是HSPI默认引脚,确保无其他外设占用;同时降低SPI时钟速率,初始化时指定5MHz避免通信不稳定,示例:
    Ethernet.begin(mac, IPAddress(0,0,0,0), IPAddress(0,0,0,0), IPAddress(0,0,0,0), IPAddress(0,0,0,0), SPI, 5000000, 5);
    
  • 供电检查:W5500需要稳定的3.3V供电,若ESP32自带3.3V引脚电流不足,需单独给模块供电,避免因供电不足导致模块无法正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 04:17:09