ESP32开发-通过ENC28J60模块实现以太网设备
要实现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 // 启用静态IPbyte 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_DHCPif (Ethernet.begin(mac) == 0) {Serial.println("DHCP Failed! Check cable or restart.");while (1);}#elseEthernet.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
- 若超时,检查防火墙或路由器设置。
- 效果