ESP32开发-通过ENC28J60模块实现以太网设备

发布于:2025-05-01 ⋅ 阅读:(35) ⋅ 点赞:(0)

要实现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
​步骤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. 网络调试​

  1. ​查看串口输出​​:确保ESP32获取到IP(如192.168.1.100)。
  2. ​电脑Ping测试​​:
    • 确保电脑与ESP32在同一局域网。
    • 打开命令提示符,执行:
      ping 192.168.1.100
    • 若超时,检查防火墙或路由器设置。
    • 效果

网站公告

今日签到

点亮在社区的每一天
去签到