Приобрел ESP32-S3-ETH в ней встроен модуль W5500

подключил этот модуль к локальной сети, настроил как сказано в документации

пробовал разные библиотеки, но остановился на #include <Ethernet.h>

код взят из примеров. Ввел нужный адрес, но на выходе получаю: Сервер запущен. IP-адрес: 255.255.255.255

пробовал другие библиотеки, к примеру: WebServer_ESP32_SC_W5500.h, ругается на
IPv6Address

почему не получается получить адекватный адрес? и как решить эту проблему

Спойлер
#include <SPI.h>
#include <Ethernet.h>

// Задайте MAC-адрес и IP-адрес устройства
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 2, 177); // Задайте свой IP-адрес

// Создаем сервер на порту 80
EthernetServer server(80);

void setup() {
  // Инициализация Ethernet
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.begin(9600);
  Serial.print("Сервер запущен. IP-адрес: ");
  Serial.println(Ethernet.localIP());
}

void loop() {
  // Ожидание клиента
  EthernetClient client = server.available();
  if (client) {
    Serial.println("Клиент подключен.");
    String currentLine = "";
    // Читаем данные от клиента
    while (client.connected() && !client.available()) {
      delay(1);
    }
    
    // Читаем строки запроса от клиента
    while (client.available()) {
      char c = client.read();
      currentLine += c;
      // Если строка заканчивается, обрабатываем запрос
      if (c == '\n') {
        // Если пустая строка, отправляем ответ
        if (currentLine.length() == 0) {
          // Отправляем HTTP заголовки
          client.println("HTTP/1.1 200 OK");
          client.println("Content-type:text/html");
          client.println();
          // Отправляем HTML страницу
          client.println("<html><body><h1>Привет, мир!</h1>");
          client.println("<p>Это пример веб-страницы на Arduino с Ethernet.</p>");
          client.println("</body></html>");
          break;
        } else {
          currentLine = "";
        }
      }
    }
    // Закрываем соединение
    client.stop();
    Serial.println("Клиент отключен.");
  }
}

Ну, похоже что сообщение “Сервер запущен” не имеет никакого отношения к действительности.

Если посмотреть в ваш код -

вы эту надпись печатаете наобум, ничего не проверяя.

С таким же успехом вы могли бы печатать тут “Я Илон Маск” - правды было бы столько же.

Причем тут IPv6Address ? Вы, вообще, в курсе что это такое?

Причем тут IPv6Address ? Вы, вообще, в курсе что это такое?
вот и я не понимаю причем тут это. Однако выдает это:

Спойлер

c:\Users\USER\Documents\Arduino\libraries\WebServer_ESP32_SC_W5500-main\src/WebServer_ESP32_SC_W5500.h:62,
from C:\arduino\test\test.ino:81:
c:\Users\USER\Documents\Arduino\libraries\WebServer_ESP32_SC_W5500-main\src/w5500/esp32_sc_w5500.h:82:5: error: ‘IPv6Address’ does not name a type; did you mean ‘IPAddress’?
82 | IPv6Address localIPv6();
| ^~~~~~~~~~~
| IPAddress
c:\Users\USER\Documents\Arduino\libraries\WebServer_ESP32_SC_W5500-main\src/w5500/esp32_sc_w5500.h:96:18: error: using typedef-name ‘WiFiClient’ after ‘class’
96 | friend class WiFiClient;
| ^~~~~~~~~~
In file included from C:\Users\USER\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\WiFi\src/WiFi.h:39,
from c:\Users\USER\Documents\Arduino\libraries\WebServer_ESP32_SC_W5500-main\src/w5500/esp32_sc_w5500.h:26:
C:\Users\USER\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\WiFi\src/WiFiClient.h:3:23: note: ‘WiFiClient’ has a previous declaration here
3 | typedef NetworkClient WiFiClient;
| ^~~~~~~~~~
c:\Users\USER\Documents\Arduino\libraries\WebServer_ESP32_SC_W5500-main\src/w5500/esp32_sc_w5500.h:96:5: error: friend declaration does not name a class or function
96 | friend class WiFiClient;
| ^~~~~~
c:\Users\USER\Documents\Arduino\libraries\WebServer_ESP32_SC_W5500-main\src/w5500/esp32_sc_w5500.h:97:18: error: using typedef-name ‘WiFiServer’ after ‘class’
97 | friend class WiFiServer;
| ^~~~~~~~~~
In file included from C:\Users\USER\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\WiFi\src/WiFi.h:40:
C:\Users\USER\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\WiFi\src/WiFiServer.h:3:23: note: ‘WiFiServer’ has a previous declaration here
3 | typedef NetworkServer WiFiServer;
| ^~~~~~~~~~
c:\Users\USER\Documents\Arduino\libraries\WebServer_ESP32_SC_W5500-main\src/w5500/esp32_sc_w5500.h:97:5: error: friend declaration does not name a class or function
97 | friend class WiFiServer;

Еще раз повторяю вопрос - вы в курсе чем отличается IPv6 от IPv4 ? Какую сеть вы пытаетесь настроить?

вы в курсе чем отличается IPv6 от IPv4 ?

Нет. Моя цель пока что просто загрузить по адресу 192.168.2.177 веб страницу взятую из данной платы, а далее уже делать ее под свои цели. Ранее я брал ардуино нано и w5500, подключал библиотеку и все работало. а с этой палатой ничего понять не могу

Вы бы хотя бы открыли пример в библиотеке. Там есть закомментированные строки, показывающие как иницировать этот модуль на разных платах.

void setup() {
  // You can use Ethernet.init(pin) to configure the CS pin
  //Ethernet.init(10);  // Most Arduino shields
  //Ethernet.init(5);   // MKR ETH Shield
  //Ethernet.init(0);   // Teensy 2.0
  //Ethernet.init(20);  // Teensy++ 2.0
  //Ethernet.init(15);  // ESP8266 with Adafruit FeatherWing Ethernet
  //Ethernet.init(33);  // ESP32 with Adafruit FeatherWing Ethernet

только сначала выясните, какой пин используется как CS на вашей плате.

Потом хорошо бы делать проверку, запустился ли модуль, прежде чем на нанего вешать сервер.

Для начала, перестать надеяться на авось, и всё проверять. Посмотрите пример к бибилотеке. У них там между строками

идёт куча проверок, которые Вы выбросили по принципу “авось проскочит”. Не проскочило. Пора приступать к рутинной работе и всё проверять.

та понял я что там проверки еще. я не то использовал. Сейчас я пытаюсь понять какие пины все таки идут чтобы их подключить. пока что без успешно)

все равно не пойму почему не работает. По схеме SCSn имеет 14 PIN, остальные пины совместимы со схемой и библиотекой.
подключаю этот пин, но все равно не пашет(
схему взял с оф сайта ссылку которого ранее скидывал.
все пины сравнивал с подключением W5500 и arduino нано.

разница только в том, что вместо 10 PIN используется 14, как ранее написал…

Картинка

Код

#include <SPI.h>
#include <Ethernet.h>


byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 1, 177);


EthernetServer server(80);

void setup() {
  
  Ethernet.init(14);  // Подключаю 14PIN
  

  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  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);

  // 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
    bool 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(1);
    // close the connection:
    client.stop();
    Serial.println("client disconnected");
  }
}

в мониторе получаю:

Ethernet WebServer Example
Ethernet shield was not found. Sorry, can’t run without hardware.

Вроде все ясно:

перевод нужен?

Там, скорее нужен совет, что делать. Но тут мы мало что можем без физического доступа к сборке.

@Alex114 у Вас где-то нет контакта. Это может быть где угодно, так что мультиметр (или осциллограф) в руки и вперёд – искать. И не верьте, что всё в порядке. Не можете найти, ищите упорнее.

Для начала я бы пошел таким путем:

  1. Надо определить, на каких пинах на этой плате по умолчанию поднимается SPI
  2. Сравнить пины из п. 1 с теми, к которым реально подключен Эзернет модуль
  3. Еще раз проверить, куда физически подключен CS и насколько это совпадает с тем, что ожидает библиотека

Кроме того, поправьте меня, но по-моему на многих платах ЕСП есть чехарда с номерами пинов. То есть обозначения, написанные на текстолите платы рядом с пином, могут не совпадать с номером пина в Ардуино. Если тут так же - то нужно выяснить по каждому пину его “ардуиновский” номер

Кстати в оф сайте есть такая информация:

Спойлер

Network port control pin description
Network port interface | ESP32-S3-ETH GPIO

MISO | GPIO12
MOSI | GPIO11
SCLK | GPIO13
CS | GPIO14
RST | GPIO9
INT | GPIO10

я прозвонил эти контакты, и все в норме как по схеме. А еще на оф сайте я нашел скетч с ETH, но он у меня не работает. В скетче я нашел переменную, значение которой я нигде не могу найти… и интересно что какой то пин подает 5V(3.3V), что за пин я тоже так и не понял… Может для того чтобы W5500 заработала, нужно питание подать на какой то пин? в w5500 есть пин который называется INT, что делает этот пин, немного не понял… но вдруг для того чтобы модуль заработал, нужно именно туда питание подать?

В скетче

#ifdef ETH_POWER_PIN
pinMode(ETH_POWER_PIN, OUTPUT);
digitalWrite(ETH_POWER_PIN, HIGH);
#endif

попытался вывести ее, выдает ошибку

Так пытаюсь
void setup()
{
    Serial.begin(115200);
    Serial.setDebugOutput(true);
    Serial.println(); 
Serial.println(ETH_POWER_PIN);
    pinMode(CAM_ENABLE, OUTPUT);   // Configure CAM_ENABLE pin as output
    digitalWrite(CAM_ENABLE, LOW); // Ensure CAM_ENABLE is off at startup
    
    WiFi.onEvent(WiFiEvent);

#ifdef ETH_POWER_PIN
    pinMode(ETH_POWER_PIN, OUTPUT);
    digitalWrite(ETH_POWER_PIN, HIGH);
#endif
Такая ошибка

error: ‘ETH_POWER_PIN’ was not declared in this scope; did you mean ‘ETH_MOSI_PIN’?
96 | Serial.println(ETH_POWER_PIN);

Весь скетч
`/**
 * @file      CameraShield.ino
 * @author    Lewis He (lewishe@outlook.com)
 * @license   MIT
 * @copyright Copyright (c) 2023  Shenzhen Xin Yuan Electronic Technology Co., Ltd
 * @date      2023-08-07
 * @note      Only support T-ETH-Lite-ESP32S3, need external camera shield to combine
 * @Steps     
 *              1. Don’t plug in the camera, flash sketch, and plug in the network cable
 *              2. After startup, check the connected IP address through the Serial monitor and record the IP address.
 *              3. Turn off the power and plug in the camera module
 *              4. After powering on, open a browser on a computer on the same LAN and enter the URL you just recorded to access the camera.
 */

#include "esp_camera.h"
#include <WiFi.h>
#if ESP_ARDUINO_VERSION < ESP_ARDUINO_VERSION_VAL(3,0,0)
#include <ETHClass2.h>       //Is to use the modified ETHClass
#define ETH  ETH2
#else
#include <ETH.h>
#endif
#include "utilities.h"          //Board PinMap

//camera Shield pinmap
#define PWDN_GPIO_NUM  -1
#define RESET_GPIO_NUM -1
#define XCLK_GPIO_NUM  3
#define SIOD_GPIO_NUM  48
#define SIOC_GPIO_NUM  47

#define Y9_GPIO_NUM    18
#define Y8_GPIO_NUM    15
#define Y7_GPIO_NUM    38
#define Y6_GPIO_NUM    40
#define Y5_GPIO_NUM    42
#define Y4_GPIO_NUM    46
#define Y3_GPIO_NUM    45
#define Y2_GPIO_NUM    41
#define VSYNC_GPIO_NUM 1
#define HREF_GPIO_NUM  2
#define PCLK_GPIO_NUM  39

#define CAM_ENABLE     8

void startCameraServer();


static bool eth_connected = false;

void WiFiEvent(arduino_event_id_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.print("Mbps");
        Serial.print(", ");
        Serial.print("GatewayIP:");
        Serial.println(ETH.gatewayIP());
        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 setup()
{
    Serial.begin(115200);
    Serial.setDebugOutput(true);
    Serial.println(); 
Serial.println(ETH_POWER_PIN);
    pinMode(CAM_ENABLE, OUTPUT);   // Configure CAM_ENABLE pin as output
    digitalWrite(CAM_ENABLE, LOW); // Ensure CAM_ENABLE is off at startup
    
    WiFi.onEvent(WiFiEvent);

#ifdef ETH_POWER_PIN
    pinMode(ETH_POWER_PIN, OUTPUT);
    digitalWrite(ETH_POWER_PIN, HIGH);
#endif

#if CONFIG_IDF_TARGET_ESP32
    if (!ETH.begin(ETH_TYPE, ETH_ADDR, ETH_MDC_PIN,
                   ETH_MDIO_PIN, ETH_RESET_PIN, ETH_CLK_MODE)) {
        Serial.println("ETH start Failed!");
    }
#else
    if (!ETH.begin(ETH_PHY_W5500, 1, ETH_CS_PIN, ETH_INT_PIN, ETH_RST_PIN,
                   SPI3_HOST,
                   ETH_SCLK_PIN, ETH_MISO_PIN, ETH_MOSI_PIN)) {
        Serial.println("ETH start Failed!");
    }
#endif

    // The infrared filter function is configured through the web
    pinMode(IR_FILTER_NUM, OUTPUT);

    while (!eth_connected) {
        Serial.println("Wait ETH Connect...");
        delay(1000);
    };


    camera_config_t config;
    config.ledc_channel = LEDC_CHANNEL_0;
    config.ledc_timer = LEDC_TIMER_0;
    config.pin_d0 = Y2_GPIO_NUM;
    config.pin_d1 = Y3_GPIO_NUM;
    config.pin_d2 = Y4_GPIO_NUM;
    config.pin_d3 = Y5_GPIO_NUM;
    config.pin_d4 = Y6_GPIO_NUM;
    config.pin_d5 = Y7_GPIO_NUM;
    config.pin_d6 = Y8_GPIO_NUM;
    config.pin_d7 = Y9_GPIO_NUM;
    config.pin_xclk = XCLK_GPIO_NUM;
    config.pin_pclk = PCLK_GPIO_NUM;
    config.pin_vsync = VSYNC_GPIO_NUM;
    config.pin_href = HREF_GPIO_NUM;
    config.pin_sccb_sda = SIOD_GPIO_NUM;
    config.pin_sccb_scl = SIOC_GPIO_NUM;
    config.pin_pwdn = PWDN_GPIO_NUM;
    config.pin_reset = RESET_GPIO_NUM;
    config.xclk_freq_hz = 20000000;
    config.frame_size = FRAMESIZE_UXGA;
    config.pixel_format = PIXFORMAT_JPEG; // for streaming
    //config.pixel_format = PIXFORMAT_RGB565; // for face detection/recognition
    config.grab_mode = CAMERA_GRAB_WHEN_EMPTY;
    config.fb_location = CAMERA_FB_IN_PSRAM;
    config.jpeg_quality = 12;
    config.fb_count = 1;

    // if PSRAM IC present, init with UXGA resolution and higher JPEG quality
    //                      for larger pre-allocated frame buffer.
    if (config.pixel_format == PIXFORMAT_JPEG) {
        if (psramFound()) {
            config.jpeg_quality = 10;
            config.fb_count = 2;
            config.grab_mode = CAMERA_GRAB_LATEST;
        } else {
            // Limit the frame size when PSRAM is not available
            config.frame_size = FRAMESIZE_SVGA;
            config.fb_location = CAMERA_FB_IN_DRAM;
        }
    } else {
        // Best option for face detection/recognition
        config.frame_size = FRAMESIZE_240X240;
        config.fb_count = 2;
    }

    // camera init
    esp_err_t err = esp_camera_init(&config);
    if (err != ESP_OK) {
        Serial.printf("Camera init failed with error 0x%x", err);
        return;
    }

    Serial.println("Camera Start!!!");
    sensor_t *s = esp_camera_sensor_get();
    // initial sensors are flipped vertically and colors are a bit saturated
    if (s->id.PID == OV5640_PID) {
        s->set_vflip(s, 1); // flip it back
        // s->set_brightness(s, 1); // up the brightness just a bit
        // s->set_saturation(s, -2); // lower the saturation
    } else {
        s->set_vflip(s, 0);
    }
    // drop down frame size for higher initial frame rate
    if (config.pixel_format == PIXFORMAT_JPEG) {
        s->set_framesize(s, FRAMESIZE_QVGA);
    }


    startCameraServer();

}

void loop()
{
  Serial.println(ETH_POWER_PIN);
    // Do nothing. Everything is done in another task by the web server
    delay(10000);
}
`

Чёта ржу. Надеюсь, Вы ещё не успели туда питание подать?

Какого именно слова Вы не поняли в описании пинов INTn?

Это я понял, но после того как отправил сообщение. Да там 3.3v, прозвонил. Никуда питание еще не подавал. Но если серьезно, в скетче с оф сайта с какого пина должно выходить питание. что за питание, я так и не соображу.

Чёта ржу

Рад что поднял вам настроение. Прошу прощение за тупизм, мозги уже не варят. Какого хрена она не пашет, не пойму. Я уже всю ее изучил мне кажется. И схему и плату.

Вы в настройках проекта, в Arduino IDE, выберите Tools->Core Debug Level->Verbose

Для начала.

Может быть увидите сообщения о том, что конкретно не нравится системе.

Как вам правильно указали - скорее всего пин CS выбран наобум.

скорее всего пин CS выбран наобум.

14 pin совпадает как с платой так и по схеме

В основном на всяких Nano и прочих брендованых. На нонеймах - нет такого.
Если на плате указаны пины как D0, D1 … A0, A1 , то да, там чехарда. Если просто номера - то это номера GPIO честные

В файле “utilities.h” тоже эти пины используются:

Спойлер

#define ETH_MISO_PIN 12
#define ETH_MOSI_PIN 11
#define ETH_SCLK_PIN 13
#define ETH_CS_PIN 14
#define ETH_INT_PIN 10
#define ETH_RST_PIN 9
#define ETH_ADDR 1

Tools->Core Debug Level->Verbose

Я получил это:

Спойлер

E (219) quad_psram: PSRAM ID read error: 0x00ffffff, PSRAM chip not found or not supported, or wrong PSRAM line mode
Guru Meditation Error: Core 0 panic’ed (LoadProhibited). Exception was unhandled.

Core 0 register dump:
PC : 0x40383e95 PS : 0x00060530 A0 : 0x80378485 A1 : 0x3fceb210
A2 : 0x3fc9f300 A3 : 0x00000000 A4 : 0x00060b20 A5 : 0x00000098
A6 : 0x00005d00 A7 : 0x3fca05d0 A8 : 0x00000000 A9 : 0x00000000
A10 : 0x00000075 A11 : 0x00000001 A12 : 0x3fc9d066 A13 : 0x00ffffff
A14 : 0x00000000 A15 : 0x00000000 SAR : 0x00000005 EXCCAUSE: 0x0000001c
EXCVADDR: 0x00000004 LBEG : 0x40056f5c LEND : 0x40056f72 LCOUNT : 0xffffffff

Backtrace: 0x40383e92:0x3fceb210 0x40378482:0x3fceb240 0x4200d6a2:0x3fceb260 0x4200ca1f:0x3fceb280 0x420144c7:0x3fceb2a0 0x42014502:0x3fceb2c0 0x40376ab1:0x3fceb2f0 0x403ccb70:0x3fceb340 0x403ccf35:0x3fceb380 0x403c8919:0x3fceb4b0 0x40045c01:0x3fceb570 0x40043ab6:0x3fceb6f0 0x40034c45:0x3fceb710