目录

更改server文件内容

esp32连接w5500

esp32代码


更改server文件内容

esp32连接W5500的第一步先去改server.h文件!!!!

我的文件在这个目录C:\Users\86185\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5\cores\esp32

改成如下


#ifndef server_h
#define server_h

#include "Print.h"

class Server: public Print
{
public:
    //virtual void begin(uint16_t port=0) =0;//20240123 yzp
    virtual void begin() = 0;
};

#endif

但是改完后wifi功能就无法使用了,如果下次需要记得改回来

esp32连接w5500

我的连接诶方式如下

MISO IO19
MOSI IO23
SCLK IO18
CS IO26
GND GND
3V3 3V3

网线插在路由器或电脑都可以

esp32代码

首先要先去github上下载Ethernet库GitHub - arduino-libraries/Ethernet: Ethernet Library for Arduino

然后下载完成用arduino运行一下代码

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

// 服务器的 IP 地址和端口
IPAddress serverIP(192, 168, 0, 144);  // 可以设置为静态 IP
uint16_t serverPort = 8552;  // 服务器端口
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};  // MAC 地址

EthernetServer server(serverPort);  // 创建一个 EthernetServer 对象,指定端口

void setup() {
  // 初始化以太网
  Ethernet.init(26);
  Serial.begin(115200);

  while (!Serial) {
    ;  // wait for serial port to connect. Needed for Leonardo only
  }

  delay(2000);
  Serial.println("COM0 setup OK!");

  Ethernet.begin(mac,serverIP);  // 初始化以太网连接
  delay(1000);

  // 检查以太网硬件状态
  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;
  }

  // 打印设备的 IP 地址
  Serial.print("ESP32 IP address: ");
  Serial.println(Ethernet.localIP());

  // 启动服务器并开始监听连接
  server.begin();
  Serial.println("Server is now listening for incoming connections...");
}

void loop() {
  // 检查是否有客户端连接
  EthernetClient client = server.available();
  if (client) {
    Serial.println("New client connected!");

    // 向客户端发送欢迎信息
    client.println("Hello Client! You are connected to the ESP32 Server.");

    // 持续接收并处理来自客户端的数据
    while (client.connected()) {
      if (client.available()) {
        char incomingByte = client.read();  // 读取客户端发送的数据
        Serial.write(incomingByte);         // 打印数据到串口监视器
        client.write(incomingByte);         // 将接收到的数据返回给客户端
      }
    }

    // 客户端断开连接
    Serial.println("Client disconnected.");
    client.stop();  // 关闭客户端连接
  }

  // 可以在这里加入定时任务或周期性响应等
  static unsigned long lastSendTime = 0;
  if (millis() - lastSendTime > 5000) {  // 每 5 秒发送一次消息给所有已连接的客户端
    lastSendTime = millis();
    EthernetClient client = server.available();
    if (client) {
      client.println("Sending data to client...");
    }
  }
}

代码我是通过其他博主的修改的,该博主链接如下ESP32-WROVER-DEV连接W5500实现有线网络_esp32 w5500-CSDN博客

然后是老规矩写个python测试一下

import socket

host = '192.168.0.144'  # ESP32 服务器的 IP 地址
port = 8552  # 服务器端口

# 创建客户端套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接到服务器
client_socket.connect((host, port))

print("Connected to server, waiting for data...")

while True:
    client_socket.sendall(b"Hello ESP32 Server!")
    try:
        # 接收服务器的数据
        response = client_socket.recv(1024)  # 每次接收最多1024字节

        if response:
            # 如果有数据返回,打印数据
            print("Received from server:", response.decode())
        else:
            # 如果没有数据,说明连接已关闭
            print("Connection closed by server.")
            break

    except Exception as e:
        print("Error occurred:", e)
        break

# 关闭连接
client_socket.close()

就可以进行TCP通讯了

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐