代码(作为TCP客户端)
#include <SPI.h>
#include <EthernetENC.h> // 使用EthernetENC库
// 网络配置
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // MAC地址
IPAddress ip(192, 168, 1, 100); // ESP32的IP
IPAddress serverIP(192, 168, 1, 150); // 电脑IP(网络调试助手)
const int serverPort = 8080; // 电脑端口
EthernetClient client; // TCP客户端
void setup() {
Serial.begin(115200);
delay(1000);
// 初始化ENC28J60
SPI.begin(18, 19, 23, 5); // SCK=18, MISO=19, MOSI=23, CS=5
Ethernet.begin(mac, ip);
Serial.println("ESP32 TCP Client Ready");
Serial.print("Local IP: ");
Serial.println(Ethernet.localIP());
}
void loop() {
// 如果未连接,尝试连接服务器
if (!client.connected()) {
Serial.println("Connecting to server...");
if (client.connect(serverIP, serverPort)) {
Serial.println("Connected to server!");
client.print("Hello from ESP32!"); // 连接后立即发送一条消息
} else {
Serial.println("Connection failed!");
}
delay(2000); // 重试间隔
}
// 如果已连接,检查是否有数据可读
if (client.available()) {
char c = client.read();
Serial.write(c); // 打印接收到的数据
}
// 示例:每5秒发送一次数据(可选)
static unsigned long lastSend = 0;
if (client.connected() && millis() - lastSend >= 5000) {
lastSend = millis();
client.print("ESP32 heartbeat"); // 定时发送心跳数据
Serial.println("Sent heartbeat");
}
}
功能说明
-
作为TCP客户端:
- 自动连接电脑(
192.168.1.150:8080
)。 - 连接成功后发送
"Hello from ESP32!"
。 - 每5秒发送一次心跳数据(
"ESP32 heartbeat"
)。
- 自动连接电脑(
-
接收数据:
- 实时打印从服务器(网络调试助手)接收的数据。
-
自动重连:
- 如果断开连接,每2秒尝试重连一次。
使用步骤
-
硬件接线:
- 确保ENC28J60与ESP32正确连接(SCK=18, MISO=19, MOSI=23, CS=5)。
- ENC28J60使用3.3V供电。
-
电脑端准备:
- 打开网络调试助手,选择TCP服务器模式,监听端口
8080
。 - 确保电脑IP为
192.168.1.150
(或修改代码中的serverIP
)。
- 打开网络调试助手,选择TCP服务器模式,监听端口
-
ESP32操作:
- 上传代码后,打开串口监视器(波特率115200)。
- 观察连接状态和接收到的数据。
效果: