ESP32以太网(ETH)环境和参数配置,基于内部mac和外部PHY(LAN8720A)

文章详细介绍了使用ESP32进行以太网开发的过程,包括理论知识如MAC和PHY芯片、RJ45接口,以及开发步骤,如使用VScode创建工程、idf.py编译和烧录。在遇到内存问题和配置错误时,作者提供了配置和解决方法,最后通过ping测试验证了配置的成功。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ESP32在网上的资料很多,但问题也各式各样。由于ESP32主要做wifi功能,因此对于以太网的资料也很少。相对应的开发板也很少。

本人使用的是淘宝上购买的雨甄机电的带网口的开发板(如下图)安信可ESP-32S

参考资料主要以热心博主《兴趣使然_》的(5条消息) ESP32 单片机学习笔记 - 06 - (以太网)Ethernet转Wifi_esp32 以太网_兴趣使然_的博客-CSDN博客这篇文章。

对于我一个小白来说,先得学习一些理论知识。

首先,以太网是局域网的通讯方式,以太网是具有TCP/IP协议,以太网常用接口有RJ45接口。

然后以太网的组成包括mac和phy芯片和RJ45的座子。然后一个芯片说支不支持网络说的是是否具有内部mac,不支持的就需要外接W5500等模块(W5500就是把mac和phy组合到一个芯片上,然后利用SPI的方式和主板通信)。(mac和phy芯片中间有种通信方式叫RMII或MII,类似于SPI的东西,对于运用来说,两者主要区别就是一个的信号线多,一个的信号线少)。(理论知识太多了,我也看不到太懂,这就是我的理解)。

然后利用VS code 创建一个工程,创建工程之前需要先下载ESP的插件,下载方法网上很多。下载完毕后,打开vscode,此时快捷方式输入ctrl+shift+p,打开工程示例。

打开工程示例后,根据左边的目录找到ethernet>>basic

选中目标项目后进行创建

此时项目创建完成(也可以使用idf工具创建,但代码不好编辑查找)

由于vs code编译较慢,因此,采用idf编译,烧录和观察,采用vs cod来编辑代码

此时打开idf工具,找到此项目(由于idf工具没有ls等命令,只有cd,因此需要记得自己项目保存的位置)

因为第一次编译较慢,因此我们先编译一下(骗人的,第一次编译慢,之后每次改配置编译都慢),输入编译命令 idf.py build

等待编译完成

编译完成后,我们先将代码烧录进入开发板,由于我采用的开发板是带烧录功能的,因此直接使用type C线接好就可以烧录。输入烧录命令idf.py -p COM7 flash  (COM7具体情况来输入)

烧录完成后,此时可以运行一下观察现象(一般情况下,此时运行没有问题,就算完成了,但没有问题是基本不可能的,接坑才刚刚开始)

输入运行命令:idf.py -p COM7 monitor

此时观察log

我们出现的现象是

从打印我们可以看出是内存的问题,此时我们就需要修改配置了,修改方法有两种

方法一:采用idf工具修改,输入配置命令:idf.py menuconfig

输入命令idf.py menuconfig打开配置界面,进入Serial flasher config,按需将Flash size改为自己的大小。比较常用的两个模组:安信可ESP-32S乐鑫ESP32-WROOM-32,flash都是4MB。连续按Esc退出,按y保存。

此时再编译烧录,发现代码已经正常运行,不需要再进行修改(这就结束了吗?哦呜阔斯诺特)我们的代码之所以能正常运行,是因为之前已经进行了配置,正常情况下你可能会出现以下问题

  1. 不断重启
  2. 复位超时

  1. w550错误

这些都是配置的问题,如果配置不对,你是解决不了这些问题的。

接下来就看看我们的配置(idf工具自行配置,作者英文不好,也不擅长使用命令,配置方式还是配置命令到配置界面配置)

按照如下方式进行配置:

不配置时钟会导致不断重启,参考(5条消息) 66 ESP32 ethernet\basic实验记录_esp32 以太网_Chasing_Chasing的博客-CSDN博客进行时钟配置

配置完毕后再编译代码烧录观察。如果不出意外就会出现正常打印到

Ethernet Started

看起来是正常了。但是等待一段时间后,后出现错误打印,也可能是我哪里配置的原因,反正是正常可用了(如下):

此时是因为网线没插或者网线坏了等原因,我们只需要接入正常网线即可出现如下打印,此时,网口配置完成(如果还出现错误,则需要自行排查了)

(什么是正常网线呢?一般情况下,未插入网线时,RJ45亮橙(黄)色灯,当网线正常时亮绿灯,可以数据交互时橙(黄)色灯闪烁,所以我们的正常情况为:绿灯亮起,橙(黄)色灯闪烁。

如何检验是否正常工作,一般我们采用的都是ping的方式,也就是拿两个网线将电脑和ESP32都接到同一个路由器,电脑上打开命令窗口,然后输入指令ping 192.168.1.1查看连接情况,ping通了就可以证明配置完成且可用。

此时,配置完成。

<think>好的,我需要帮助用户了解如何在ESP32上使用LAN8720网卡与MicroPython进行网络编程。首先,我得确认用户的需求,他们需要配置教程示例代码。 首先,我需要回顾ESP32MicroPython的基础知识。ESP32是一款支持Wi-Fi蓝牙的微控制器,而MicroPython是它的一个开发环境,允许用Python进行编程。LAN8720是一个以太网物理层(PHY)芯片,用于实现有线网络连接。用户可能已经知道如何搭建MicroPython环境,但需要具体配置LAN8720。 接下来,我需要确定硬件连接。LAN8720通常通过RMII接口连接到ESP32,所以需要检查引脚连接是否正确。例如,ESP32的GPIO17连接到LAN8720的nINT/REFCLK,GPIO16作为RMII的参考时钟,其他数据引脚如GPIO21、GPIO19、GPIO22、GPIO25、GPIO26、GPIO27也需要正确连接。此外,电源复位引脚也需要处理。 然后,软件配置部分。用户需要加载支持LAN8720的MicroPython固件。可能需要使用自定义固件或者检查现有固件是否包含LAN8720驱动。在MicroPython中,初始化网络接口需要使用特定的模块,如`network`,并配置PHY类型引脚。 示例代码部分,我需要展示如何初始化LAN8720,获取IP地址,并进行基本的网络操作,如HTTP请求。代码应该包括导入必要的模块、配置PHY参数、激活网络接口以及处理网络异常。 同时,我需要考虑用户可能遇到的问题,比如固件不支持LAN8720,引脚连接错误,或者网络配置问题。因此,在常见问题部分要提供检查固件版本、验证引脚连接、检查硬件等建议。 最后,确保引用相关的资料,比如用户提供的引用[1]关于MicroPython的环境搭建ESP系列的支持,引用[3]提到的MicroPython在物联网嵌入式中的应用场景,这些可以增强回答的可信度。 总结步骤:硬件连接、固件准备、软件配置、示例代码、常见问题处理。确保每一步都清晰,并符合用户的需求。同时,生成相关问题,帮助用户深入理解,比如如何调试网络连接或优化性能。</think>### ESP32使用LAN8720与MicroPython网络配置教程 #### 硬件准备 1. **ESP32开发板**:需支持RMII接口(如ESP32-WROVER系列) 2. **LAN8720模块**:需连接RMII接口时钟信号 3. **引脚连接**: - `GPIO17` → LAN8720 `nINT/REFCLK` - `GPIO16` → 外部25MHz晶振(若需外部时钟) - `GPIO21`(RMII_TX_EN), `GPIO19`(RMII_TXD0), `GPIO22`(RMII_TXD1) - `GPIO25`(RMII_RXD0), `GPIO26`(RMII_RXD1), `GPIO27`(RMII_CRS_DV) - `GPIO23` → LAN8720复位引脚(低电平有效) #### 软件配置 1. **固件要求**:需使用支持LAN8720的自定义MicroPython固件[^1] ```bash # 编译固件时需启用LAN8720驱动 make BOARD=GENERIC_ETH SUBMODULES=eth/phy/lan8720 ``` 2. **网络初始化代码**: ```python import network import time def init_ethernet(): eth = network.LAN(mdc_pin=23, mdio_pin=18, power_pin=12, phy_type=network.PHY_LAN8720) eth.active(True) # 等待连接 for _ in range(20): if eth.isconnected(): break time.sleep(1) if eth.ifconfig()[0] == '0.0.0.0': raise RuntimeError("以太网连接失败") return eth ``` #### 示例代码(HTTP请求) ```python import usocket def http_get(): eth = init_ethernet() addr_info = usocket.getaddrinfo("example.com", 80) s = usocket.socket() s.connect(addr_info[0][-1]) s.send(b"GET / HTTP/1.1\r\nHost: example.com\r\n\r\n") response = s.recv(4096) s.close() print(response.decode()) ``` #### 常见问题排查 1. **时钟配置**: - 若使用外部时钟:需配置`CLKOUT`引脚输出25MHz时钟 - 若使用内部时钟:需设置`REFCLK`引脚为输入模式 2. **网络诊断**: ```python def network_status(): eth = network.LAN() print("连接状态:", eth.isconnected()) print("IP配置:", eth.ifconfig()) print("MAC地址:", eth.config('mac')) ``` #### 性能优化建议 - 启用硬件流控制:配置`ETH_RSVD_PINS`避免GPIO冲突 - 调整缓冲区大小:修改`#define MICROPY_PY_LWIP_SOCKET_RAW 1` 提高吞吐量
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值