ESP32-WROVER-DEV连接W5500实现有线网络

发布时间:2024年01月23日

目的:ESP32-WROVER-DEV相机模块连接W5500模块,实现有线网络的连接。

开发环境:Arduino 2.1.1

可以实现的功能:可以使用web的ping访问,ESP32的LED IO2闪烁。

硬件连接如下图:

模块硬件的导线连接

W5500

ESP32-WROVER

导线颜色

W5500-5V

连接5V-USB

W5500-GND

连接GND-USB

W5500-MISO

12灰

W5500-MOSI

13白

W5500-SCS

15褐

W5500-SCLK

14紫

2 橙

Arduino的设置

第一步:修改server代码,

修改文件:

C:\Users\lenovo\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.9\cores\esp32\server.h.

class Server: public Print

{

public:

????//virtual void begin(uint16_t port=0) =0;//20240123 yzp

virtual void begin() = 0;

};

以上修改只能使用于使用ESP32和W5500实现有线以太网通讯。

第二步:针对硬件连接,匹配ESP32的IO,修改内容如下:

#define SCK 14

#define MISO 12

#define MOSI 13

#define SS 15

将上面的4行定义直接添加在SPI.H文件开始部分,文件位置查看编译过程中出现的:“使用缓存库文件依赖项:

C:\Users\lenovo\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.9\libraries\SPI\src\SPI.h

第三步:主程序代码如下:

#include <Ethernet.h>

#define LED_BUILTIN 2

//#define SCK 14

//#define MISO 12

//#define MOSI 13

//#define SS 15

IPAddress ip(192,168,2,211);

EthernetServer server(80);

byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};

boolean alreadyConnected = false; // whether or not the client was connected previously

uint16_t xi = 0;

void setup()

{

? delay(4000);

? ? //Ethernet.init(SS);

? ? Serial.begin(115200);

? ? while (!Serial)

? ? {

? ? ; // wait for serial port to connect. Needed for Leonardo only

? ? }

? ? delay(2000);

? ? Serial.println("COM0 setup OK!");

? ? pinMode(LED_BUILTIN, OUTPUT);

? ? Serial.println("LED_BUILTIN = " + String(LED_BUILTIN));

? ? Serial.println("SCK ?= " + String(SCK)); ? ?

? ? Serial.println("MISO = " + String(MISO));

? ? Serial.println("MOSI = " + String(MOSI));

? ? Serial.println("SS ? = " + String(SS));//Serial.println("SS ? = " + String(SPI.pinSS()));//

? ? Ethernet.init(SS);

? ? delay(2000);

? ? Ethernet.begin(mac, ip);

? ? // start the server

? ? auto hwStatus = Ethernet.hardwareStatus();

? ? switch (hwStatus)

? ? {

? ? ? ? case EthernetNoHardware:

? ? ? ? ? Serial.println("No Ethernet hardware");

? ? ? ? ? break;

? ? ? ? case EthernetW5100:

? ? ? ? ? Serial.println("Ethernet W5100 installed");

? ? ? ? ? break;

? ? ? ? case EthernetW5200:

? ? ? ? ? Serial.println("Ethernet W5200 installed");

? ? ? ? ? break;

? ? ? ? case EthernetW5500:

? ? ? ? ? Serial.println("Ethernet W5500 installed");

? ? ? ? ? break; ? ? ? ? ?

? ? }

? ? auto link = Ethernet.linkStatus();

? ? Serial.print("Link status: ");

? ? switch (link)

? ? {

? ? ? case Unknown:

? ? ? ? Serial.println("Unknown");

? ? ? ? break;

? ? ? case LinkON:

? ? ? ? Serial.println("ON");

? ? ? ? break;

? ? ? case LinkOFF:

? ? ? ? Serial.println("OFF");

? ? ? ? break;

? ? }

? ? server.begin();

? ? Serial.print("server start at IP address: ?");

? ? Serial.println(Ethernet.localIP());

}

void loop()

{

? ? // wait for a new client:

? ? EthernetClient client = server.available();

? ? xi++;

? ? if (xi > 40000)

? ? {

? ? ? ? xi = 0;

? ? ? ? digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));

? ? }

? ? // when the client sends the first byte, say hello:

? ? if (client)

? ? {

? ? ? if (!alreadyConnected)

? ? ? {

? ? ? ? // clear out the input buffer:

? ? ? ? client.flush();

? ? ? ? Serial.println("We have a new client");

? ? ? ? client.println("Hello, client!");

? ? ? ? alreadyConnected = true;

? ? ? }

? ? ? if (client.available() > 0)

? ? ? {

? ? ? ? // read the bytes incoming from the client:

? ? ? ? char thisChar = client.read();

? ? ? ? // echo the bytes back to the client:

? ? ? ? server.write(thisChar);

? ? ? ? // echo the bytes to the server as well:

? ? ? ? Serial.write(thisChar);

? ? ? }

? ? }

}

第四步:编译上传成功后,串口可以看到网络启动,网络ping有响应。观察结果如下:

文章来源:https://blog.csdn.net/qq_23313467/article/details/135776719
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。