很多玩ESP32的朋友都是从Arduino IDE入的门,点两下编译、插上USB就下载,确实爽。但项目稍微复杂一点——代码上了几千行、要跑多任务、要调WiFi和低功耗、想改一下分区表,Arduino IDE那套“隐藏细节”的设计就开始拖后腿了。我大概是在第二个实际项目时彻底转到了VSCode + ESP-IDF,从那以后再也没回Arduino写过ESP32。这不是因为Arduino不好,而是IDF才是ESP32这颗芯片的完整打开方式。
这篇东西就是把我从安装到踩坑、从建工程到烧录调试整个流程重新走了一遍之后整理的,适合两类人看:一是Arduino已经玩熟、想往专业嵌入式走的;二是刚拿到ESP32、听人说别用Arduino IDE直接用IDF,结果卡在安装那一步心态炸裂的。文章里没有半句“官方文档随手能搜到”的水话,所有步骤都是我自己一步步点过、跑过、炸过又重新修好的,照做基本能一次过。
1. 为什么我劝你从Arduino IDE迁到VSCode + ESP-IDF
1.1 Arduino IDE的“甜”与“痛”
Arduino IDE最大的功劳是降低了单片机开发的门槛,就像自动挡汽车,给油就走,不用管离合和换挡逻辑。你写个pinMode、digitalWrite就能点亮LED,网上随便一搜都是教程,生态极其丰富。这个优点必须承认,我至今仍会用它给一些非常简单的传感器测试代码做验证,十秒钟就能跑起来。
但它的“痛”也随着项目变大越来越明显。
第一是编译速度。Arduino对ESP32的编译是把所有代码(包括你没用到的库)整体打包处理,工程稍微大一点,每次编译动辄一两分钟,改一行代码重新编译也要等半天。第二是代码补全几乎等于没有。Arduino IDE 2.0有所改善,但和VSCode的智能提示相比,差距仍然明显,写结构体、查函数定义都要自己来回翻。第三是工程结构太“平”了。Arduino默认只有一个.ino文件,代码多了只能靠多个页签拆,但头文件、静态库、自定义组件的组织全靠手搓,维护起来非常痛苦。
最关键的一点是:Arduino的框架在ESP32之上又封装了一层,很多芯片底层的操作你碰不到。比如我想改一下WiFi的底层对时序敏感的中断处理,想在ESP32上跑FreeRTOS来管理任务优先级,Arduino的API完全不够用,最后还是得去翻IDF的文档。
1.2 ESP-IDF:ESP32真正的完整开发框架
ESP-IDF是乐鑫官方为ESP32系列芯片提供的完整开发框架,它不仅仅是“编译器加库”,而是一整套东西:基于CMake的构建系统、FreeRTOS实时操作系统、各种芯片外设驱动、WiFi蓝牙协议栈的完整实现、还有menuconfig这样的配置工具。
用Arduino的比喻来说,IDF更像是“手动挡加工具箱”。你既要管油门刹车,也要管换挡时机,但换来的是对整台车的完全控制。刚上手的时候会觉得麻烦,但熟悉之后,你调一个外设、定位一个bug的效率和深度是Arduino做不到的。
举个例子:在Arduino里想用PWM输出精确频率,通常就是analogWrite,但底层用的是哪一个定时器、分辨率是多少、跟WiFi哪个外设冲突了,Arduino帮你隐藏了。而在IDF里,ledc驱动组件把定时器、通道、中断这些全部摊开给你,你用的时候会明确知道自己占用了哪颗定时器,跟WiFi的共存关系也能自己控制。这就是为什么很多需要量产的项目,代码都跑在IDF上而不是Arduino上。
1.3 一套VSCode环境能干什么
VSCode在这里的角色是“外壳”,提供编辑、搜索、终端、调试一体化体验。装上乐鑫官方ESP-IDF插件后,VSCode不仅能写代码,还能直接调用IDF的编译、烧录、串口监视器、menuconfig,连调试器都可以从插件里一键启动。
我日常的工作流是这样的:左边开着VSCode写C代码,右边分屏开串口监视器随时看日志,编译快捷键一键执行,烧录也一键完成,出问题了还能直接打断点进GDB调试。整个过程不用切窗口,不用记一堆命令,对Windows用户特别友好。
所以这篇文章的核心目标就一个:把VSCode + ESP-IDF这条开发链路给你打通,让你从Arduino顺利过渡到一个更专业、更适合深度开发的工具链。
2. 环境搭建前的准备工作(先避一半坑)
2.1 必备软件清单与版本选择
先列出需要安装的东西,每个后面我都会说明为什么要这个、哪个版本稳。
- VSCode:建议从官网下载User Installer版本,装完后在“帮助-关于”里确认版本不低于1.70,太旧的版本在插件市场上会有兼容问题。
- Python:ESP-IDF运行时的很多工具脚本依赖Python,插件装的时候也会自己搞一个虚拟环境。如果你系统里已经装了Python,建议用3.11或3.12,不要用3.13这种过新的,有些依赖包还没有适配。
- Git:IDF的拉取和版本管理、组件下载都依赖Git,Windows建议用默认配置一路Next装完。
- ESP-IDF插件:在VSCode扩展商店搜“ESP-IDF”或扩展ID“espressif.esp-idf-extension”,认准乐鑫官方出品,别装错了同名插件。
这里要强调一个很多人忽略的点:版本选择不要盲目追新。ESP-IDF每半年左右会发一个新版本,比如v5.1、v5.2、v5.3,但很多第三方组件和教程还没有完全跟上。我目前建议稳定使用的版本是v5.1或v5.2的release版,基础好、资料多、坑少。你想尝鲜可以直接装最新版,但遇到问题网上搜解决方案时,很多旧帖子可能对不上,排查起来更累。
2.2 安装路径与Python虚拟环境:很多人栽在这里
在正式开始安装之前,有一个非常重要的事情先做:确定你的工作路径和IDF安装路径不能有中文、空格和特殊符号。
这个是我自己踩过最大的坑之一。一开始图省事,把ESP-IDF直接装在了D:\代码工具\esp-idf这种目录下面,结果Python虚拟环境创建的时候各种报错,编译的时候路径解析也乱了,找了好几个小时才意识到问题。后来全部改成D:\esp_idf,一次通过。
原因是IDF的构建系统里大量使用了Python脚本和CMake,这两者对路径中的空格和中文支持并不好。Windows下如果你用默认的C:\Users\你的用户名\esp,一般情况下只要用户名不是中文就行。如果登录账号是中文名,我建议干脆把IDF装到另一个纯英文目录,比如D:\esp32\idf。这个刀得先架好,后面才少挨一刀。
另外说一下Python虚拟环境。IDF安装时会创建一个venv虚拟环境,把工具链和Python依赖都隔离在里面。这样做的好处是:你系统里其他项目的Python版本随便换,都不会影响ESP32的开发环境。所以如果你看到安装过程里出现“Creating virtual environment”之类的提示,不用慌,等就行。
2.3 网络问题:安装卡0%的真正原因和解决方案
几乎所有人第一次装ESP-IDF都会遇到安装进度卡住,最常见的一个现象就是进度条停在0%,或者某个工具链下载到一半就断。这个问题根源在于:IDF在安装过程中需要从GitHub拉取代码和工具链,而国内直连的稳定性实在是一言难尽。
我不推荐用任何需要额外配置的特殊网络手段,纯靠公共办法解决。第一推荐的是用乐鑫官方提供的国内镜像源。新版本的IDF安装脚本本身支持镜像设置,在Git clone时可以直接用Gitee上的乐鑫官方镜像仓库,速度通常能跑到几MB每秒。第二推荐是下载官方离线安装包,Gitee或乐鑫官网的下载页面有现成的离线包,把整个工具链和IDF打包好,下载完直接本地安装,能彻底绕开在线下载的不稳定问题。
更详细的卡0%排查方法,我放在后面的“常见问题避坑速查”章节里写,这里你只需要先有这个意识:安装卡住十有八九不是你的电脑问题,是网络问题,换源、用离线包、多试几次,比反复删了重装有用得多。
2.4 VSCode插件装不上怎么办:离线VSIX安装方案
有些朋友反映在VSCode插件市场里搜索“ESP-IDF”结果搜不到,或者点击安装后一直转圈。这个情况我见过不少,原因一般是两个:VSCode版本太低,或者插件市场接口不稳定。
解决办法很简单:打开浏览器,访问VSCode插件市场的网页,直接搜索“ESP-IDF”,进入对应插件页面后能下载一个.vsix文件。下载完成后回到VSCode,按Ctrl+Shift+P,输入“Install from VSIX”,选择刚下载的文件,过一小会儿插件就装好了。这个方法也适用于其他插件装不上、或者想固定插件版本的场景。
3. 保姆级实操:一步步搭好VSCode + ESP-IDF
3.1 VSCode基础配置:中文界面与必要设置
装好VSCode先做几件小事,能省后面很多麻烦。
第一是装中文语言包。在扩展商店搜“Chinese (Simplified)”,安装后右下角会提示重启,重启后界面就是中文了。这个纯粹是个人偏好,如果你英文界面无障碍,这步可以跳过。
第二是建议装几个和ESP32开发相关的辅助插件。比如C/C++ Extension Pack(微软官方那套,提供代码补全和调试支持)、EditorConfig for VS Code(统一代码风格)、Error Lens(把错误信息直接标在代码行上,看起来非常直观)。有几个主推插件是这个插件“一定要装”的:C/C++、Code Runner、ESP-IDF,这三个是基础;可选项是Serial Monitor、GitLens。这些都属于提升舒适度的工具,测试过不会和ESP-IDF插件打架。
第三是设置一下用户代码片段和自动保存。写作过程中建议打开文件-首选项-设置,搜索autosave,把自动保存改成afterDelay,避免ESP32开发板调试时频繁手动保存代码。别小看这个,后面改代码烧录的时候,忘保存导致烧了旧代码,我就遇到过好几次。
3.2 安装ESP-IDF插件并进入配置向导
装完插件后,注意VSCode左侧会出现一个乐鑫的图标,那个就是插件主面板。但更关键的入口是命令面板。
按Ctrl+Shift+P,输入ESP-IDF,在命令列表里找到ESP-IDF: Configure ESP-IDF Extension(中文界面可能是“配置ESP-IDF扩展”),回车启动配置向导。
这时会弹出一个非常长的配置表单,几个关键位置分别是:
ESP-IDF Path(或“ESP-IDF安装目录”):选择你希望IDF安装到哪里。之前说过,纯英文无空格路径。Python Venv Path:虚拟环境目录,一般让插件自动创建就行。ESP-IDF Tools Path:工具链目录,包括编译器、调试器、烧录工具等,同样放纯英文路径。- Git Path:自动识别即可。
这些配置看起来复杂,但其实核心就一句话:选好一个干净的安装目录,剩下的交给插件。配置向导随后会在后台自动下载ESP-IDF源码和工具链,耗时取决于网络和电脑性能,快的话十分钟左右,慢的话半小时也有。
3.3 Express模式安装与手动安装的选择
在配置向导里,插件会给你几种安装方式,主要是Express(快速安装)和Advanced(高级安装)两种。
Express模式下,插件会帮你下载预编译的IDF源码和工具链,然后自动创建Python虚拟环境。你只需要选目录,其他全自动。这个是我最推荐的首次安装方式,前提是网络稳定。如果网络不好,可以套用之前说的离线包方案,先把IDF解压好,再在Advanced模式下指定已解压的路径。
Advanced模式还支持把插件连接到一个已有的、你手动Git clone的IDF环境。比如你之前已经用Git命令把代码拉下来了,那就可以在这个模式里填已有的路径,跳过源码下载环节。灵活是灵活,但首次接触不建议走这条路,因为手动clone的代码往往缺少子模块,后续编译又会报错。
这里顺便说一个我自己的观察:不少新手在安装时报错之后,第一反应是卸载插件重来。其实很多报错在日志里已经写得很清楚了,大部分是网络超时或路径不合法。与其反复删装,不如按上面的方案定位。卸载重装只是在浪费时间。
3.4 验证安装:我踩过的一次“假成功”坑
配置完成后,插件状态栏底部会出现一个版本号,看起来像是装好了。但第一次安装时我就栽在“看起来装好了”上。
强忍着激动,我打开一个ESP-IDF示例工程准备编译,结果一上来就报python not found,然后又是一堆ninja: error: loading 'build.ninja'。查了半天才发现,虽然插件提示安装完成,但工具链的路径没有被正确写入到VSCode的配置里。
正确的验证方式是:按Ctrl+Shift+P,输入ESP-IDF: Show ESP-IDF Version,确认能输出版本号;然后找一个官方示例工程(后面马上讲怎么建),按编译快捷键Ctrl+Alt+B(不同的插件版本快捷键略有差异,也可以在命令面板里找ESP-IDF: Build your project),如果能顺利编译出bin文件,才叫真成功。
如果你在这步就报错,建议直接看末尾常见问题速查表,大概率能找到你的情况。
4. 你的第一个ESP-IDF工程:从创建到烧录
4.1 用插件模板创建hello_world工程
环境搞定之后,创建工程比想象中简单得多。按Ctrl+Shift+P,输入ESP-IDF: New Project(或“新建工程”),向导会列出官方模板列表,第一项就是hello_world。
选好模板之后,设置工程名称和位置,插件会自动把模板文件复制过去。和Arduino那套“一个.ino打天下”完全不一样,你会看到一个多文件的工程结构:main目录下有main.c(或app_main.c)、CMakeLists.txt、Kconfig.projbuild,工程根目录还有CMakeLists.txt和sdkconfig.defaults。没接触过CMake的人第一次看到会有点慌,但IDF已经帮你把构建流程整理得很规范,照着模板改就行。
创建完成后,VSCode底部会提示“是否打开新窗口”,直接确认就行,你的工程会在一个新窗口里打开。
4.2 工程目录结构与核心文件解读
先说最核心的main/main.c。在ESP-IDF里,入口函数不叫main,而是叫app_main,系统启动时会自动调用它。这就解释了为什么很多Arduino迁移过来的人头两天对着void loop()找半天入口。
一个最小的hello_world主程序长这样:
#include <stdio.h> #include "freertos/FreeRTOS.h" #include "freertos/task.h" void app_main(void) { printf("Hello World!\n"); vTaskDelay(pdMS_TO_TICKS(1000)); }注意这里printf是重定向到串口输出的,烧录之后用串口监视器能看到Hello World每隔一秒打印一次。这个vTaskDelay就是一个简单的延时函数,单位是系统tick,pdMS_TO_TICKS(1000)表示延时1000毫秒。
CMakeLists.txt是构建脚本,告诉构建系统哪个源文件要参与编译、要链接哪些组件。IDF的一大特色是“组件化”(component)开发:所有可复用的功能都被组织成一个个组件,比如nvs_flash、wifi_provisioning、esp_http_server,你只需要在CMakeLists.txt里用REQUIRES指明依赖,构建系统会自动把它们加进来。
第一次接触CMake不用慌,大部分情况下只需要在main目录下的CMakeLists.txt里维护一行REQUIRES列表就够了。真正复杂的CMake语法,玩到后面需要自己写组件时再学也不迟。
4.3 编译、烧录、打开串口监视器
在ESP-IDF插件环境下,编译和烧录都不需要手动敲命令,虽然手敲命令也是一种可以接受的尝试,但插件集成的操作更符合工程快速落地的风格。
编译:按Ctrl+Alt+B,或在命令面板里输入ESP-IDF: Build your project。第一次编译会比较慢,因为要构建所有依赖,后面就快了。
烧录:先把ESP32开发板用USB线连到电脑,然后在VSCode底部状态栏找到端口号(一般是COM3、COM4,在macOS/Linux下是/dev/ttyUSB0一样的形式)。点击状态栏里的端口号,选择对应串口,接着按Ctrl+Alt+F(或在命令面板里选“ESP-IDF: Flash your project”)开始烧录。烧录过程中需要关注是否提示“Connecting”卡住,如果卡住通常要按住开发板上的BOOT键。
烧录完成后按Ctrl+Alt+D(“ESP-IDF: Monitor”)打开串口监视器,就能看到程序输出了。退出监视器按Ctrl+]。这套流程习惯之后,效率比Arduino IDE还要快。
4.4 menuconfig与sdkconfig:IDF的灵魂
IDF和Arduino最大的不同之一,是很多工程配置不是在代码里改的,而是通过menuconfig这个菜单式配置界面完成。
在命令面板里输入ESP-IDF: Menuconfig,会弹出类似BIOS界面的蓝屏菜单。在这里你可以配置:
Serial flasher config:串口波特率、烧录模式Partition Table:分区表选哪个方案(单应用、双OTA、自定义)Component config:各式各样的外设功能开关,比如FreeRTOS的Tick Rate、WiFi buffers大小、蓝牙协议栈是否启用
改动后保存,配置会写到工程根目录的sdkconfig文件里。这个文件很重要,不要手删也不要提交到Git(一般加进.gitignore),因为你自己的配置可能和其他人的不一致,删了编译又会被重新生成,但会导致一些默认配置丢失,引发一些匪夷所思的行为。
我个人习惯是工程里放一个sdkconfig.defaults,把常用配置固定下来,然后复制一份sdkconfig是编译时的实际配置。这样团队协作时,大家能用同样的默认配置起步。
4.5 从Arduino迁移代码时要注意什么
如果你之前有Arduino的ESP32代码,不要想着直接复制粘贴到IDF就能跑,两者API差别非常大。几个最常见的迁移坑:
delay()要换成vTaskDelay,同时头文件要包含FreeRTOS。Serial.println()要换成printf,或者用IDF的日志系统ESP_LOGI。pinMode、digitalWrite要换成gpio_set_direction、gpio_set_level,这些函数更接近寄存器操作。- Arduino的库管理器点一下就能装库,比如
DHT.h。IDF的库管理则通过组件注册中心,在main/CMakeLists.txt里声明依赖,或者用idf.py add-dependency命令添加组件。第一次会觉得“怎么这么麻烦”,但好处是版本管控和源码可读性强很多,出现问题你能直接进库源码里查。
举一个真实的例子:我之前用Arduino写过DHT22温湿度读取,三行代码搞定。迁到IDF后发现需要自己处理时序或者找一个官方维护的组件,最后我选了esp-idf-lib里的DHT组件,编译时自动下载,用起来也不算复杂,只是需要写一行i2c或者gpio的配置。这个过程逼着我去理解了传感器驱动的底层协议,收获远大于那三行代码本身。
5. 常见问题避坑速查(实测总结)
5.1 安装进度卡在0%怎么办
这个是高频问题,几乎每个新装环境的朋友都会问。根据我自己的经验,卡0%的原因基本可以分成三类,分别对应用三种解法:
网络下载工具链失败。特征是在日志里看到
Failed to download或者Error: Timed out。解法是切换到乐鑫国内镜像源,或者直接用离线安装包。如果你已经运行到一半,可以把失败的下载任务多重试几次,有时第二次就通了,但成功率不稳定。Python虚拟环境创建失败。特征是日志里出现
Failed to create virtual environment。最常见是系统Python版本过高或路径含中文。解法是改路径,或者手动确认Python 3.11可用,然后在配置向导里手动指定Python解释器路径。权限问题。Windows下安装到Program Files等系统目录导致插件写文件失败。解法是重新装到用户目录或纯英文自定义目录,避免管理员权限介入。
你还能做的一件事是打开插件输出面板,在VSCode的“输出”里选择“ESP-IDF Extension”,把日志完整拷出来,贴在搜索引擎里,基本都是现成的答案。
5.2 串口不识别、烧录失败
这个在新手期特别常见。如果你烧录时报错Failed to connect to ESP32,或者Wrong boot mode detected,先不要慌,大概率不是硬件坏了,而是进入下载模式没成功。
ESP32的烧录机制是:上电时如果某些特定管脚的电平满足条件,芯片会进入下载模式。大多数开发板上是一个BOOT(或IO0)按键。正确做法是:按住BOOT键不放,点击烧录,看到终端开始连接时再松开BOOT键,然后再按一下板子上的复位键。
如果串口列表里根本找不到设备,那就要检查驱动。CP2102、CH340这类USB转串口芯片需要安装对应驱动,尤其Windows系统经常是第一次插不识别,装完驱动后立刻好。
5.3 终端找不到idf.py
有些朋友喜欢在VSCode内置终端手动敲idf.py build等命令,结果提示idf.py: command not found。这其实是正常的,因为你没有在终端里激活IDF的虚拟环境。
在IDF的开发环境里,你需要在终端先执行类似:
. $HOME/esp/esp-idf/export.shWindows下一般是这样:
%USERPROFILE%\esp\esp-idf\export.ps1或者在VSCode里直接用插件提供命令,而不是自己敲。我自己更建议用插件命令,因为插件已经帮你处理了环境变量,手动敲命令有时忘了先加载环境,反而容易出问题。
这里需要特别提醒一句:IDF很多工具链的路径依赖是在安装时写进环境变量了,但你如果换了一个IDF版本或者删除了旧的安装目录,环境变量可能残留,导致插件指向了不存在的路径。遇到诡异报错,先重开VSCode,再检查环境变量里IDF_PATH指向是否正确。
5.4 编译报错与路径问题
编译时最常见的错误是:
No such file or directory:通常是头文件路径没配好,需要检查CMakeLists.txt里的REQUIRES和SRC_DIRS。undefined reference:某个函数没找到实现,大概率是漏了链接对应组件。ninja: error: loading 'build.ninja':构建缓存损坏,删除build目录重新编译。
最后面这个build目录问题在频繁切换分支或者改版本时会遇到。遇上了别纠结,直接把build目录删掉,重新Build,一般都能解决。
另外一个很隐蔽的坑是:如果你的工程里有多个同名源文件,CMake可能会把它们全编译,冲突时会报一些很奇怪的重复定义错误。保持目录结构清晰、文件名唯一,能省大量排查时间。
5.5 其他典型陷阱
- 所有开发板都能用同一套IDF吗?不是的。ESP32、ESP32-S3、ESP32-C3是不同的芯片,编译时要通过
idf.py set-target esp32s3设置目标芯片。插件里也可以选择目标芯片,选错会出现烧录失败或下载不了的问题。 - Windows防火墙弹出Python或OpenOCD的联网申请,尽量允许,否则后面某些组件下载、调试连接都会受影响。
- WSL环境下使用VSCode + ESP-IDF时,USB串口的透传需要额外配置,不建议首次使用WSL。等你在Windows原生环境完全跑通了,再研究WSL也不迟。
6. 进阶玩法与我的实战体会
6.1 自定义components管理代码
当你项目慢慢变大,把全部代码塞在main目录里会变得难以维护。IDF的组件化设计这时候就体现出威力了。
你可以把某个功能模块独立成一个组件,在工程根目录下建一个components目录:
my_project/ ├── main/ ├── components/ │ └── my_led_control/ │ ├── include/ │ ├── my_led_control.c │ └── CMakeLists.txt └── CMakeLists.txt在main/CMakeLists.txt里用REQUIRES my_led_control引用,之后整个工程都能用它,还能顺便写出独立的单元测试。这个习惯我强烈建议从第二个项目开始就建立,等代码量到几万行的时候,你会感谢自己当初没那么懒。
6.2 调试与日志系统
刚从Arduino转过来的人往往习惯用printf打天下,但IDF给了更好的日志系统。ESP_LOGx系列宏支持等级控制,比如ESP_LOGI正常输出,ESP_LOGE错误,ESP_LOGV最详细的调试日志。运行时可以通过menuconfig设置哪些模块打印到什么级别,不会像printf一样全糊在屏幕上。
再加上VSCode的调试功能,按Ctrl+Alt+D(这里注意在插件设置里可以更改快捷键绑定)打开调试会话,就能在代码里打断点看变量,像调试桌面程序一样调嵌入式程序。这功能第一次用可能会被震到,建议至少从一个简单的工程试一次。
6.3 从Arduino过渡的切身体会
我自己的经历是:从Arduino到IDF的头一周确实难受。API不熟、构建系统复杂、遇到问题连该搜什么关键词都不知道,有一次光是解决WiFi连接失败就花了两天。但熬过第一周之后,你会发现自己对ESP32的认知完全上了一个台阶,再回头用Arduino写点小东西,能大概猜出底层在做什么。
现在我的建议是:小项目、快速原型,Arduino仍然可以是你的第一选择,它胜在快捷;但凡是准备做成品、做量产、或者要长期维护的固件,直接上ESP-IDF,把底层控制权握在自己手里。
比如网上经常有人问ESP32的蓝牙和WiFi能不能同时使用。这个问题在Arduino里有时候要靠试,但在IDF里,你可以清清楚楚地看到两个协议栈的存在和资源配置方式,通过menuconfig调整内存分配和行为模式,自己判断甚至解决共存问题,而不是把希望寄托在框架的黑盒封装上。
如果你玩到后面开始碰LAN8720这类以太网模块,就会更体会IDF的好处——官方直接提供Ethernet驱动组件,各种PHY芯片的支持都有现成的实现,配置好PHY地址和GPIO引脚就能跑,比起Arduino生态里东拼西凑的第三方库,可靠性高了不是一点半点。
环境搭建只是翻过了一座山,翻过去之后,前面是一大片可以自由驰骋的地方。