Skip to content

Documentation for using the Ethernet port #2

@skinkie

Description

@skinkie

Using the prerelease of arduino-esp32 I was able to get networking to work with the code below. The following information I needed to have.

  1. Install in Arduino IDE 2, the arduino-esp32 development version. ETH_PHY_DM9051 in older releases is defined, but not provided (noop).
  2. Using the table of eth01-evo (this repo) and some guessing I came up with the #define below. Critical important: first define, then #include <ETH.h>.
  3. Short IO09 and the adjacent ground, so for flashing the right 4 pins will be connected.
  4. Apply 5V and ground, I did not manage to get flashing to work on 3.3V.
#define ETH_PHY_TYPE ETH_PHY_DM9051
#define ETH_PHY_ADDR         1
#define ETH_PHY_CS           9
#define ETH_PHY_IRQ          8
#define ETH_PHY_RST          6
#define ETH_PHY_SPI_HOST    SPI2_HOST
#define ETH_PHY_SPI_SCK      7
#define ETH_PHY_SPI_MISO     3
#define ETH_PHY_SPI_MOSI    10

#include <ETH.h>


static bool eth_connected = false;

void WiFiEvent(WiFiEvent_t event)
{
  switch (event) {
    case ARDUINO_EVENT_ETH_START:
      Serial.println("ETH Started");
      //set eth hostname here
      ETH.setHostname("esp32-ethernet");
      break;
    case ARDUINO_EVENT_ETH_CONNECTED:
      Serial.println("ETH Connected");
      break;
    case ARDUINO_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 ARDUINO_EVENT_ETH_DISCONNECTED:
      Serial.println("ETH Disconnected");
      eth_connected = false;
      break;
    case ARDUINO_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);
  Serial.println("Hello world\n");
  WiFi.onEvent(WiFiEvent);
  ETH.begin();
}


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

  Serial.print("ETH MAC: ");
  Serial.print(ETH.macAddress());
  Serial.print(", IPv4: ");
  Serial.print(ETH.localIP());

  Serial.println("Next try\n");

}

This will result in:

Hello world

ETH Started
ETH Connected
ETH MAC: 56:32:04:XX:XX:XX, IPv4: 192.168.5.84, FULL_DUPLEX, 100Mbps
ETH MAC: 56:32:04:XX:XX:XX, IPv4: 192.168.5.84Next try

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