u/Nemo-_-_

ESP32 LAN8720
▲ 1 r/esp32

ESP32 LAN8720

Hi everyone, I’m working on a university robotics project. My robot uses an ESP32 with a LAN8720 Ethernet module. Right now I’m just trying to test the LAN8720 connection.

When I power on the ESP32, Serial Monitor shows the error in image. here is the code that i use

/*
    This sketch shows the Ethernet event usage


*/


// Important to be defined BEFORE including ETH.h for ETH.begin() to work.
// Example RMII LAN8720 (Olimex, etc.)
#ifndef ETH_PHY_MDC
#define ETH_PHY_TYPE ETH_PHY_LAN8720
#if CONFIG_IDF_TARGET_ESP32
#define ETH_PHY_ADDR  0
#define ETH_PHY_MDC   23
#define ETH_PHY_MDIO  18
#define ETH_PHY_POWER -1
#define ETH_CLK_MODE  ETH_CLOCK_GPIO0_IN
#elif CONFIG_IDF_TARGET_ESP32P4
#define ETH_PHY_ADDR  0
#define ETH_PHY_MDC   31
#define ETH_PHY_MDIO  52
#define ETH_PHY_POWER 51
#define ETH_CLK_MODE  EMAC_CLK_EXT_IN
#endif
#endif


#include <ETH.h>


static bool eth_connected = false;


// WARNING: onEvent is called from a separate FreeRTOS task (thread)!
void onEvent(arduino_event_id_t event) {
  switch (event) {
    case ARDUINO_EVENT_ETH_START:
      Serial.println("ETH Started");
      // The hostname must be set after the interface is started, but needs
      // to be set before DHCP, so set it from the event handler thread.
      ETH.setHostname("esp32-ethernet");
      break;
    case ARDUINO_EVENT_ETH_CONNECTED: Serial.println("ETH Connected"); break;
    case ARDUINO_EVENT_ETH_GOT_IP:
      Serial.println("ETH Got IP");
      Serial.println(ETH);
      eth_connected = true;
      break;
    case ARDUINO_EVENT_ETH_LOST_IP:
      Serial.println("ETH Lost IP");
      eth_connected = false;
      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);


  NetworkClient 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);
  Network.onEvent(onEvent);


  IPAddress local_IP(192, 168, 1, 50);
  IPAddress gateway(192, 168, 1, 1);
  IPAddress subnet(255, 255, 255, 0);


  ETH.config(local_IP, gateway, subnet);


  ETH.begin();
  
}


void loop() {
  if (eth_connected) {
    Serial.println("Ethernet is working");;
  }
  delay(10000);
}

I'm planning a sewer inspection robot using three ESP32 boards—one with a LAN8720 for Ethernet communication to a laptop, one to control motors, and one to read multiple sensors, all ESP32s communicating via UART, with sensor data and status sent to a webpage hosted on the ESP32, and I’m wondering if this setup is feasible, and if anyone has suggestions for making the communication and integration more reliable?

https://preview.redd.it/otxynikpv7tg1.png?width=930&format=png&auto=webp&s=5f2b6b6c87b93f8b0f883dee19804f466bbb8c75

https://preview.redd.it/exwx86nmt7tg1.jpg?width=1156&format=pjpg&auto=webp&s=af52e3c75159e9dd7da0369095b40db265018dea

https://preview.redd.it/q1tho7dys7tg1.png?width=689&format=png&auto=webp&s=e79e6d9f3e553b7809efe9f88c9440c5295ffee4

reddit.com
u/Nemo-_-_ — 18 hours ago