Я столкнулся с проблемой при попытке отобразить веб-страницу через Ethernet в настройке, которая объединяет ESP32 с чипом W5500.
Подключение довольно простое и прямолинейное (ESP32 SPI подключается напрямую к W5500 SPI, общему GND и питается от 3,3 В), и, очевидно, работает, поскольку как WiFi, так и Ethernet назначаются IP-адреса, и я могу пинговать их оба успешно.
На самом деле я уже давно пользуюсь этой настройкой, но только когда я начал пытаться отобразить несколько здоровенную веб-страницу, я начал замечать некоторые проблемы.
По сути, все ресурсы веб-страниц хранятся в SPIFFS. И, как и следовало ожидать, когда клиент (браузер) отправляет GET-запросы для получения определенного скрипта или страницы, приведенный ниже код обрабатывает его. Я использую Arduino:
void serve_file(Client *client, char* file_name, char* content_type) {
File webFile;
webFile = SPIFFS.open("/" + String(file_name));
Serial.println("Now sending: " + String(file_name));
client->println("HTTP/1.1 200 OK");
client->println("Content-Length: " + String(webFile.size()));
client->println("Content-Type: " + String(content_type));
client->println("Connection: close");
client->println();
if (webFile) {
while (webFile.available()) {
int num_bytes_read;
unsigned char byte_buffer[1024];
num_bytes_read = webFile.read(byte_buffer, 1024);
client->write(byte_buffer, num_bytes_read);
}
webFile.close();
}
}
Теперь у меня не было проблем с отображением основных веб-страниц с использованием этого кода. Недавно я попытался отобразить веб-страницу с некоторыми диаграммами и определенным красочным дизайном, который не требовал огромных дополнительных ресурсов, всего лишь несколько библиотек .css и .js объемом ~ 500 КБ. Удивительно, но загрузка веб-страницы через Ethernet была ужасно медленной, всего ~ 2,5 с.
Чтобы убедиться, что это был не мой код, я попытался отобразить ту же веб-страницу, используя тот же код, но через Wi-Fi, и это было намного быстрее (0,8 - 1,2 с), что является скоростью, ожидаемой через Wi-Fi.
Кроме того, я заметил, что при загрузке веб-страницы через Ethernet некоторые ресурсы часто не загружались должным образом, вызывая сбой страницы:
Чтобы еще раз убедиться, что это не связано с ошибкой в моем коде, я попытался отобразить веб-страницу через WiFi и обновить ее 100 раз. Ни разу страница не вылетала или ресурс не загружался.
Именно здесь я начал подозревать, что это может быть связано с некоторыми проблемами со скоростью соединения SPI или синхронизацией между ESP32 и W5500. Поскольку я не эксперт в области аппаратного обеспечения, все, что я мог сделать, это немного поиграть с тактовой частотой SPI из кода, который не имел значения, за исключением случаев, когда я сильно уменьшал его (загрузка веб-страницы потребовалась бы целую вечность).
Может кто-нибудь помочь с этим? Я работаю над проектом, и я не хочу, чтобы это решило меня навсегда.