Skip to content

ESP32 Gateway & EVB - ETH Disconnect #1912

@HarterHorst

Description

@HarterHorst

Hi,
i have a problem with Olimex ESP32 EBV and Gateway. Code works, Ethernet connections works but i get a disconnect immediately.

Hardware:

Board: Olimex ESP32 Gateway & EVB
Core Installation/update date: latest
IDE name: Arduino IDE
Flash Frequency: 80Mhz and 40Mhz
PSRAM enabled: no
Upload Speed: 115200
Computer OS: Windows 10

Description:

ETH Started ETH MAC: 30:AE:A4:1B:C1:FF, IPv4: 192.168.0.90, FULL_DUPLEX, 100Mbps ETH MAC: 30:AE:A4:1B:C1:FF, IPv4: 192.168.0.90, FULL_DUPLEX, 100Mbps ETH Disconnected ETH MAC: 30:AE:A4:1B:C1:FF, IPv4: 192.168.0.90, FULL_DUPLEX, 100Mbps ETH MAC: 30:AE:A4:1B:C1:FF, IPv4: 192.168.0.90, FULL_DUPLEX, 100Mbps ETH Disconnected ETH MAC: 30:AE:A4:1B:C1:FF, IPv4: 192.168.0.90, FULL_DUPLEX, 100Mbps ETH MAC: 30:AE:A4:1B:C1:FF, IPv4: 192.168.0.90, FULL_DUPLEX, 100Mbps ETH Disconnected ETH MAC: 30:AE:A4:1B:C1:FF, IPv4: 192.168.0.90, FULL_DUPLEX, 100Mbps ETH MAC: 30:AE:A4:1B:C1:FF, IPv4: 192.168.0.90, FULL_DUPLEX, 100Mbps ETH Disconnected ETH MAC: 30:AE:A4:1B:C1:FF, IPv4: 192.168.0.90, FULL_DUPLEX, 100Mbps ETH MAC: 30:AE:A4:1B:C1:FF, IPv4: 192.168.0.90, FULL_DUPLEX, 100Mbps ETH Disconnected

Sketch:

/*
    This sketch shows the Ethernet event usage

*/

#include <ETH.h>

static bool eth_connected = false;

void WiFiEvent(WiFiEvent_t event)
{
  switch (event) {
    case SYSTEM_EVENT_ETH_START:
      Serial.println("ETH Started");
      //set eth hostname here
      ETH.setHostname("esp32-ethernet");
      break;
    case SYSTEM_EVENT_ETH_CONNECTED:
      Serial.println("ETH Connected");
      break;
    case SYSTEM_EVENT_ETH_GOT_IP:
      Serial.print("ETH MAC: ");
      Serial.print(ETH.macAddress());
      Serial.print(", IPv4: ");
      Serial.print(ETH.localIP());
      if (ETH.fullDuplex()) {
        Serial.print(", FULL_DUPLEX");
      }
      Serial.print(", ");
      Serial.print(ETH.linkSpeed());
      Serial.println("Mbps");
      eth_connected = true;
      break;
    case SYSTEM_EVENT_ETH_DISCONNECTED:
      Serial.println("ETH Disconnected");
      eth_connected = false;
      break;
    case SYSTEM_EVENT_ETH_STOP:
      Serial.println("ETH Stopped");
      eth_connected = false;
      break;
    default:
      break;
  }
}

void testClient(const char * host, uint16_t port)
{
  Serial.print("\nconnecting to ");
  Serial.println(host);

  WiFiClient client;
  if (!client.connect(host, port)) {
    Serial.println("connection failed");
    return;
  }
  client.printf("GET / HTTP/1.1\r\nHost: %s\r\n\r\n", host);
  while (client.connected() && !client.available());
  while (client.available()) {
    Serial.write(client.read());
  }

  Serial.println("closing connection\n");
  client.stop();
}

void setup()
{
  Serial.begin(115200);
  WiFi.onEvent(WiFiEvent);
  ETH.begin();
  ETH.config(IPAddress(192, 168, 0, 90),IPAddress(192, 168, 0, 1),IPAddress(255, 255, 255, 0));
}


void loop()
{
  if (eth_connected) {
    testClient("google.com", 80);
  }
  delay(10000);
}

I have also tried this one as well.

#include <ETH.h>

/*
  ETH_CLOCK_GPIO0_IN   - default: external clock from crystal oscillator
  ETH_CLOCK_GPIO0_OUT  - 50MHz clock from internal APLL output on GPIO0 - possibly an inverter is needed for LAN8720
  ETH_CLOCK_GPIO16_OUT - 50MHz clock from internal APLL output on GPIO16 - possibly an inverter is needed for LAN8720
  ETH_CLOCK_GPIO17_OUT - 50MHz clock from internal APLL inverted output on GPIO17 - tested with LAN8720
*/
#define ETH_CLK_MODE    ETH_CLOCK_GPIO0_IN
// Pin# of the enable signal for the external crystal oscillator (-1 to disable for internal APLL source)
#define ETH_POWER_PIN   -1
// Type of the Ethernet PHY (LAN8720 or TLK110)
#define ETH_TYPE        ETH_PHY_LAN8720
// I²C-address of Ethernet PHY (0 or 1 for LAN8720, 31 for TLK110)
#define ETH_ADDR        0
// Pin# of the I²C clock signal for the Ethernet PHY
#define ETH_MDC_PIN     23
// Pin# of the I²C IO signal for the Ethernet PHY
#define ETH_MDIO_PIN    18

static bool eth_connected = false;

void setup() {
  Serial.begin(115200);
  delay(2000);
  Serial.println("Waiting for network connection .");
  WiFi.onEvent(WiFiEvent);
  ETH.begin(ETH_ADDR, ETH_POWER_PIN, ETH_MDC_PIN, ETH_MDIO_PIN, ETH_TYPE, ETH_CLK_MODE);
  while (!eth_connected) {
    Serial.print(".");
    delay(1000);
    // add that 10 attemptes should be made.
  }

  Serial.println();
  Serial.print("Linkup:\t\t");
  if ((ETH.linkUp()) == true) {
    Serial.println("Yes");
  }
  else {
    Serial.println("No");
  }
  Serial.print("Linkspeed:\t");
  Serial.println(ETH.linkSpeed());
  Serial.print("Speed:\t\t");
  if ((ETH.fullDuplex()) == true) {
    Serial.println("FullDuplex");
  }
  else {
    Serial.println("No FullDuplex");
  }
  Serial.print("MAC Address:\t");
  Serial.println(ETH.macAddress());
  Serial.print("Hostname:\t");
  Serial.println(ETH.getHostname());
  Serial.print("LocalIP:\t\t");
  Serial.println(ETH.localIP());
  Serial.print("Gateway:\t\t");
  Serial.println(ETH.gatewayIP());
  Serial.print("DNS:\t\t");
  Serial.println(ETH.dnsIP());
}

void WiFiEvent(WiFiEvent_t event) {
  switch (event) {
    case SYSTEM_EVENT_ETH_START:
      Serial.println("ETH Started");
      //set eth hostname here
      ETH.setHostname("esp32-ethernet");
      break;
    case SYSTEM_EVENT_ETH_CONNECTED:
      Serial.println("ETH Connected");
      break;
    case SYSTEM_EVENT_ETH_GOT_IP:
      Serial.print("ETH MAC: ");
      Serial.println(ETH.macAddress());
      Serial.print("IPv4: ");
      Serial.println(ETH.localIP());
      if (ETH.fullDuplex()) {
        Serial.println("FULL_DUPLEX");
      }
      Serial.print(ETH.linkSpeed());
      Serial.println("Mbps");
      eth_connected = true;
      break;
    case SYSTEM_EVENT_ETH_DISCONNECTED:
      Serial.println("ETH Disconnected");
      eth_connected = false;
      break;
    case SYSTEM_EVENT_ETH_STOP:
      Serial.println("ETH Stopped");
      eth_connected = false;
      break;
    default:
      break;
  }
}

void testClient(const char * host, uint16_t port)
{
  Serial.print("\nconnecting to ");
  Serial.println(host);
  WiFiClient espclient;

  // WiFiClient client;
  if (!espclient.connect(host, port)) {
    Serial.println("connection failed");
    return;
  }
  espclient.printf("GET / HTTP/1.1\r\nHost: %s\r\n\r\n", host);
  while (espclient.connected() && !espclient.available());
  while (espclient.available()) {
    Serial.write(espclient.read());
  }

  Serial.println("closing connection\n");
  espclient.stop();
}

void loop () {
  delay(10000);
  if (eth_connected) {
    testClient("google.com", 80);
  }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions