Esp32开发板 - Ethernet以太网连接报错 - 不允许使用抽象类类型解决
使用VsCode ipo ide编程
使用Ethernet库报错 - 不允许使用抽象类类型
main.cop sic
® expected constructor. destructor, or type conversion before rtoken 所 31. 列刀
® 不允许使用抽象类类型-Ethernetserver~的对象 C/C++1322)斤 31. 列@
main.cppt厅 31,列15:纯点拟 西数"Server-begin,没有强制替代项
修改Server.h文件 - 官方库
文件
Server.h
修改:
virtual void begin(uint16_t port=0) =0;
替换:
virtual void begin() = 0;
并配置好io引脚,在w5100.cpp
修改w5100.cpp文件 - Ethernet库
文件
w5100.cpp
修改:
SPI.begin();
替换:
SPI.begin(int8_t(14), int8_t(12), int8_t(13), int8_t(15));
插入对应io引脚,根据实际情况选择
使用Ethernet.init(15);
设置cs输出,使用spi2引脚方法,QUADWP不连,esp32 - D4引脚连接w5500 - RST引脚,其他照常连接
相关测试代码
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip(192, 168, 0, 177);
EthernetServer server(80);
void setup()
{
Serial.begin(115200);
Ethernet.init(15);
Ethernet.begin(mac, ip);
// 查找以太网屏蔽器类型
if (Ethernet.hardwareStatus() == EthernetNoHardware)
{
Serial.println("未找到以太网屏蔽器");
while (true)
{
delay(1);
}
}
if (Ethernet.linkStatus() == LinkOFF)
{
Serial.println("以太网线未连接");
}
server.begin();
Serial.print("IP: ");
Serial.println(Ethernet.localIP());
}
void loop()
{
// listen for incoming clients
EthernetClient client = server.available();
if (client)
{
Serial.println("客户进入");
bool currentLineIsBlank = true; // 以空数据结束
while (client.connected())
{
if (client.available())
{
char c = client.read();
Serial.write(c);
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");
client.println("Refresh: 5");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
// 输出每个模拟输入引脚的值
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')
{
// 读下一数据
currentLineIsBlank = true;
}
else if (c != '\r')
{
// 没有数据
currentLineIsBlank = false;
}
}
}
delay(1);
client.stop();
Serial.println("客户离开");
}
}
最终测试结果