ESP32 - ENC28J60- switch connection problems

Hello everyone... I am using an ESP32 with an ENC28J60 board and the EthernetENC library.
I am running the following web server code...

#include <SPI.h>
#include <EthernetENC.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
  0xDE, 0xAB, 0xBF, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 1, 177);

// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);

void setup() {
  // You can use Ethernet.init(pin) to configure the CS pin
  
  Ethernet.init(5);   
  

  // Open serial communications and wait for port to open:
  Serial.begin(115200);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
  Serial.println("Ethernet WebServer Example");

  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  
  delay(2000);

  // Check for Ethernet hardware present
  if (Ethernet.hardwareStatus() == EthernetNoHardware) {
    Serial.println("Ethernet shield was not found.  Sorry, can't run without hardware. :(");
    while (true) {
      delay(1); // do nothing, no point running without Ethernet hardware
    }
  }
  if (Ethernet.linkStatus() == LinkOFF) {
    Serial.println("Ethernet cable is not connected.");
  }

  // start the server
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}


void loop() {


  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  // the connection will be closed after completion of the response
          client.println("Refresh: 5");  // refresh the page automatically every 5 sec
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          // output the value of each analog input pin
          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
            int sensorReading = analogRead(analogChannel);
            client.print("analog input ");
            client.print(analogChannel);
            client.print(" is ");
            client.print(sensorReading);
            client.println("<br />");
          }
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        } else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1000);
    // close the connection:
    client.stop();
    Serial.println("client disconnected");
  }
}

The problem is that when I connect the ENC28J60 board to my modem/router or a switch, I have ping losses and the sketch just works erratically.

If I connect everything directly to my PC's network card it works perfectly and I have no ping losses.

I tried with different ENC28J60 boards. same results.
I tried a crossover network cable. same results

Regarding the hardware, I am using an external 3.3v source to power the ENC28J60.

the output of the serial port is this

rst:0x1 (POWERON_RESET),boot:0x13 (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
Ethernet WebServer Example
server is at 192.168.1.177

Can somebody help me?

First, in an Español forum you should write in Español.

Second, I personally don't ever recommend ENC28J60 because the card comes with issues and instability. Consider switching to a W5100 or W5500 ethernet shield.

Then, why you added that "delay(1000);"? You don't need it, and while inside that delay Arduino does nothing (remember you don't have a multi-threading system under your feet!). Change it to something like "delay(10);" (I think it's enough) and let us know if it works.
If it doesn't work, it could be either the cable you're using to connect to the router (try another one), or a duplicated MAC address over the local network (are you sure you don't have others?), or there's something to do with the router (I can tell you sometimes ENC-based devices work only if connected to a switch and not directly to the router, try this as a last resource).

Moderator
Please read How to get the best out of this forum and next time be carefull where do you post your thread?.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.