在将ESP32与W5500芯片结合在一起的设置中尝试通过以太网显示网页时,我遇到了一个问题。
接线非常简单直接(ESP32 SPI直接连接到W5500 SPI,公共GND并由3.3V供电),并且显然可以工作,因为WiFi和以太网都被分配了IP地址,我可以对其进行ping操作都成功。
我实际上已经使用此设置已有一段时间了,但是直到我开始尝试显示一个有点沉重的网页时,我才开始注意到一些问题。
基本上,所有网页资源都存储在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 KB。令人惊讶的是,通过以太网加载网页速度非常慢,整个过程大约需要2.5秒。
为确保不是由我的代码引起的,我尝试通过WiFi使用相同的代码显示相同的网页,并且速度要快得多(0.8-1.2秒),这是可以预期的无线上网。
此外,我注意到通过以太网加载网页时,很多时候某些资源无法正确加载,导致网页崩溃:
再次确保不是我的代码中的错误,我尝试通过WiFi显示该网页并将其刷新100次。页面崩溃或资源加载失败一次。
在这里我开始怀疑这可能是由于SPI连接速度方面的某些问题,或者是ESP32与W5500之间的同步。由于我在硬件方面不是专家,所以我所能做的就是在代码中以SPI时钟速度进行一些测试,除非我进行了很多降低(除非加载页面,否则这没有什么区别)。
有人可以帮忙吗?我正在做一个项目,但我不想让它永远解决。