ESP32以太网通信实战指南

在ESP32上实现以太网通信需要外接以太网模块(因ESP32本身无内置以太网PHY芯片),常见方案有两种:

  • SPI接口以太网模块(如ENC28J60):成本低、接线简单,适合低速场景(10Mbps);
  • RMII接口以太网模块(如LAN8720):速率高(10/100Mbps),适合高速数据传输,但接线复杂,且仅部分ESP32型号支持(如ESP32-WROOM-32、ESP32-WROVER-E,ESP32-C3不支持RMII)。

本文以ENC28J60(SPI接口) 为例,详细讲解在ESP32上配置和使用以太网的完整流程(基于ESP-IDF框架),包含硬件连接、软件配置、代码实现及测试验证。

一、硬件准备与连接

1. 所需硬件

  • ESP32开发板(如ESP32-WROOM-32);
  • ENC28J60以太网模块(SPI接口,3.3V供电);
  • 网线(连接到路由器或交换机);
  • 杜邦线若干。

2. 引脚连接(ESP32 ↔ ENC28J60)

ENC28J60通过SPI与ESP32通信,核心引脚定义如下(可灵活修改,需与代码对应):

ESP32 引脚 ENC28J60 引脚 说明
3.3V VCC 电源(必须3.3V,不可接5V)
GND GND 共地
GPIO18 SCK SPI时钟线
GPIO23 MOSI SPI主机发/从机收
GPIO19 MISO SPI从机发/主机收
GPIO5 CS 片选信号(低电平有效)
GPIO2 RESET 模块复位(可选,不接则默认上电复位)

注意

  • ENC28J60的SPI速率建议≤10MHz(过高可能通信不稳定);
  • 若ESP32的GPIO5被占用,可改用其他GPIO(如GPIO15),需在代码中同步修改。

二、软件配置(基于ESP-IDF v5.0+)

1. 工程创建与组件配置

  • 新建ESP-IDF工程(可基于ethernet/basic示例修改);
  • 启用以太网组件:在menuconfig中配置(idf.py menuconfig):
    • 进入Component config → Ethernet → Ethernet type,选择SPI Ethernet
    • 选择芯片型号:SPI Ethernet chip selection → ENC28J60
    • 配置SPI引脚:
      • SPI MOSI GPIO number:23(与硬件连接一致);
      • SPI MISO GPIO number:19;
      • SPI SCK GPIO number:18;
      • SPI CS GPIO number:5;
      • (可选)SPI Reset GPIO number:2(若连接了RESET引脚);
    • 配置网络参数:
      • 选择Use DHCP(自动获取IP)或手动设置静态IP(Static IP address)。

三、完整代码实现(以太网初始化+TCP客户端示例)

以下代码实现以太网初始化、获取IP地址,并作为TCP客户端连接目标服务器(如本地电脑的TCP服务器),发送测试数据。

1. 头文件与宏定义

#include <stdio.h>
#include <string.h>
#include "esp_event.h"
#include "esp_log.h"
#include "esp_netif.h"
#include "esp_eth.h"
#include "esp_wifi.h"
#include "nvs_flash.h"
#include "lwip/err.h"
#include "lwip/sockets.h"
#include "lwip/sys.h"
#include <lwip/netdb.h>

// 以太网SPI配置(需与menuconfig一致)
#define ETH_SPI_HOST        SPI3_HOST
#define ETH_SPI_CS_PIN      5
#define ETH_SPI_SCK_PIN     18
#define ETH_SPI_MOSI_PIN    23
#define ETH_SPI_MISO_PIN    19
#define ETH_RESET_PIN       2

// TCP服务器配置(替换为实际服务器IP和端口)
#define TCP_SERVER_IP       "192.168.1.100"  // 目标服务器IP
#define TCP_SERVER_PORT     8080             // 目标服务器端口
#define TCP_SEND_BUF_SIZE   1024             // 发送缓冲区大小

static const char *TAG = "eth_example"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值