ESP32 连接W5500 TCP收发数据
esp32连接W5500的第一步先去改server.h文件!!!!我的文件在这个目录C:\Users\86185\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5\cores\esp32改成如下但是改完后wifi功能就无法使用了,如果下次需要记得改回来。
·
目录
更改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
我的连接诶方式如下
|

网线插在路由器或电脑都可以
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通讯了
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)