Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Documentation for using the Ethernet port #2

Open
skinkie opened this issue Dec 28, 2023 · 1 comment
Open

Documentation for using the Ethernet port #2

skinkie opened this issue Dec 28, 2023 · 1 comment

Comments

@skinkie
Copy link

skinkie commented Dec 28, 2023

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
@drom
Copy link
Member

drom commented Feb 6, 2024

Tank you @skinkie for important detail!

"Short IO09 and the adjacent ground, so for flashing the right 4 pins will be connected."

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants