要实现ESP32与ENC28J60模块连接并使电脑能够Ping通,需完成以下步骤:
1. 硬件连接
确保ESP32与ENC28J60正确连接(SPI接口):
ENC28J60引脚 | ESP32引脚 |
---|---|
SCK | GPIO18 |
MISO | GPIO19 |
MOSI | GPIO23 |
CS | GPIO5 |
INT | 无需连接 |
VCC | 3.3V |
GND | GND |
注意:ENC28J60需3.3V供电,避免使用5V。
2. 软件配置
步骤1:安装库
- ENC28J60驱动库:推荐使用
EthernetENC
(兼容ESP32)。- Arduino库管理中搜索并安装
EthernetENC
。
- Arduino库管理中搜索并安装
步骤2:示例代码
以下是完整的ESP32与ENC28J60通信代码,包含静态IP配置和网络状态监控,确保电脑可以Ping通:
#include <SPI.h>
#include <EthernetENC.h> // 或使用 UIPEthernet.h
// 网络配置(DHCP或静态IP二选一)
#define USE_DHCP true // 启用DHCP自动获取IP
//#define USE_DHCP false // 启用静态IP
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // MAC地址(需唯一)
// 静态IP配置(仅在USE_DHCP=false时生效)
IPAddress staticIP(192, 168, 1, 100); // ESP32的IP
IPAddress subnet(255, 255, 255, 0); // 子网掩码
IPAddress gateway(192, 168, 1, 1); // 网关
IPAddress dnsServer(8, 8, 8, 8); // DNS服务器
EthernetClient client;
void setup() {
Serial.begin(115200);
delay(1000); // 等待串口稳定
Serial.println("Initializing ENC28J60...");
// 初始化SPI(ESP32默认SPI引脚)
SPI.begin(18, 19, 23, 5); // SCK=18, MISO=19, MOSI=23, CS=5
// 启动以太网
#if USE_DHCP
if (Ethernet.begin(mac) == 0) {
Serial.println("DHCP Failed! Check cable or restart.");
while (1);
}
#else
Ethernet.begin(mac, staticIP, dnsServer, gateway, subnet);
#endif
// 打印网络信息
printNetworkDetails();
}
void loop() {
Ethernet.maintain(); // 维持DHCP租约(如果使用DHCP)
// 示例:每5秒打印一次连接状态
static unsigned long lastPrint = 0;
if (millis() - lastPrint >= 5000) {
lastPrint = millis();
Serial.print("Link Status: ");
Serial.println(Ethernet.linkStatus() == LinkON ? "Connected" : "Disconnected");
}
}
// 打印网络详细信息
void printNetworkDetails() {
Serial.println("\nNetwork Configuration:");
Serial.println("----------------------");
Serial.print("MAC Address: ");
for (byte i = 0; i < 6; i++) {
Serial.print(mac[i], HEX);
if (i < 5) Serial.print(":");
}
Serial.println();
Serial.print("IP Address: ");
Serial.println(Ethernet.localIP());
Serial.print("Subnet Mask: ");
Serial.println(Ethernet.subnetMask());
Serial.print("Gateway: ");
Serial.println(Ethernet.gatewayIP());
Serial.print("DNS Server: ");
Serial.println(Ethernet.dnsServerIP());
Serial.println("----------------------");
Serial.println("Try pinging this IP from your computer!");
}
3. 网络调试
- 查看串口输出:确保ESP32获取到IP(如
192.168.1.100
)。 - 电脑Ping测试:
- 确保电脑与ESP32在同一局域网。
- 打开命令提示符,执行:
ping 192.168.1.100
- 若超时,检查防火墙或路由器设置。
- 效果