十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ESP32-S3开发实战:从环境搭建到BLE配网、I2S语音与圆屏驱动

ESP32-S3开发实战:从环境搭建到BLE配网、I2S语音与圆屏驱动 很多刚拿到 ESP32-S3 板子的朋友上来第一句都是“环境怎么搭”。说实话这颗芯片的开发和传统 Arduino 板子完全不是一个套路官方文档写得也不算友好光一个工具链就能劝退不少人。可 ESP32-S3 又是这几年做 AIoT 原型、带屏 HMI、语音交互最顺手的一颗芯片很多想做的项目离了它还真的不好办。这篇我把自己的完整流程整理出来从选型逻辑、IDF 环境搭建、第一个点亮 LED 的工程到 BLE 配网、I2S 麦克风采集、GC9A01 圆屏驱动这些高频需求一次讲完也把我在实际开发里踩过的坑都列成速查表。刚入手 S3 的新手可以参考被各种报错折磨的进阶玩家也能从中找到一些排查思路。1. 为什么是 ESP32-S3芯片定位和选型逻辑很多人在选型时并不清楚 S3 和早期 ESP32 的区别结果买回来发现很多代码和例程不能直接用白白浪费一天时间。这里先把这个芯片的底细说清楚。1.1 S3 相比老 ESP32到底强在哪ESP32-S3 最大的变化是主控内核从 Xtensa LX6 换成了双核 Xtensa LX7最高跑到 240 MHz单核性能比老 ESP32 提升了不少。更重要的是S3 增加了一组向量指令和 SIMD 扩展专门为轻量级 AI 推理、语音特征提取这类计算做了优化。做关键词唤醒、简单分类模型的时候S3 可以不用额外挂 MCU 就能跑起来这对小体积产品来说非常关键。另一个容易被忽略的点是 PSRAM。市面上常见的 S3 模组有 n8r8、n16r8 这类命名。以 n16r8 为例意思是 16MB Flash 加 8MB PSRAM。PSRAM 就是外挂的扩展内存跑 LVGL 做复杂界面、放帧缓冲、加载较大模型时这 8MB 内存可以直接决定项目的可行性。如果没有 PSRAM很多 GUI 方案连 240x240 的圆屏都跑不顺。S3 还内置了 USB OTG可以原生模拟出 USB CDC 和 JTAG。这意味着大部分开发板不需要外接 USB 转串口芯片插上线就能识别出一个串口同时还能直接用 JTAG 在线调试。配合 VSCode 的调试插件单步、打断点、看寄存器都比较方便这在 ESP32 时代是得另外买调试器的。1.2 适合用它做的几类场景先说最适合 S3 的几类应用。第一类是带屏 HMI比如智能家居面板、桌面摆件、仪表盘搭配 GC9A01 这类小圆屏用 LVGL 做界面PSRAM 越大的型号越从容。第二类是语音交互设备S3 有两个 I2S 外设接 INMP441 这类数字麦克风做语音采集配合 ESP-SR 离线语音识别可以做低成本的小型语音助手。第三类是 AI 视觉前端S3 可以接摄像头做简单的图像分类、人脸检测虽然跑不了大模型但做一些定点识别的场景足够了。第四类是传感器网关S3 的外设接口比较全SPI、I2C、UART、ADC 都有做多传感器数据汇聚再通过 Wi-Fi 或 BLE 上报也很顺手。1.3 什么时候别选它不推荐的场景也要提一下。如果项目只做简单的开关控制、不需要复杂计算选 ESP32-C3 或者 ESP8266 成本更低开发也更省心。如果有大量浮点运算或需要跑 Linux 级别的应用S3 的 MCU 架构依然吃力这时候应该考虑带 MPU 的芯片或树莓派方案。S3 在低功耗上做得不错但如果你追求的是纽扣电池供电、几个月不充电的极致低功耗产品还是得看专门的 BLE SoC比如 ESP32-C3 甚至更小封装的芯片。选型这事没有万能的关键是匹配需求和成本。2. 环境搭建方案怎么选环境搭建的第一步不是急着下载东西而是想清楚走哪条路。路线选错了后面够你折腾两三天。2.1 两条路线ESP-IDF 还是 ArduinoESP32-S3 官方支持的开发框架叫 ESP-IDF也就是 Espressif IoT Development Framework。这套框架是乐鑫自己维护的所有新特性、新外设驱动、AI 组件都会第一时间在里面更新编译、烧录、调试全链路都是官方工具链。缺点是学习曲线偏陡工程结构相对复杂新手第一次接触会觉得有些难以下手。另一条路线是 Arduino。Arduino 对 ESP32-S3 也有支持安装 boards 包之后就可以用 Arduino IDE 写代码语法简单生态里有大量现成库。但 Arduino 框架本质上是对 ESP-IDF 的封装很多 S3 的特性并没有暴露出来比如 USB CDC 的灵活配置、PSRAM 的精细管理、向量指令的使用等。用 Arduino 写简单传感器采集没问题但如果你想发挥这颗芯片的真正实力或者需要用到较新的外设驱动建议还是直接用 ESP-IDF。我的建议是如果是初步接触可以先在 Arduino 里用 Blink 把板子跑通建立信心。但真正做项目、深入研究 S3最好一步到位选择 ESP-IDF。因为没有哪种方式是“绕路的捷径”迟早都要面对官方工具链。2.2 推荐的组合VSCode IDF 插件在工具选择上我目前最推荐的是 VSCode 加 Espressif IDF 插件。这个组合的好处是VSCode 本身轻量插件市场发达代码提示、格式化、Git 集成都不错而 Espressif 官方插件把环境变量、工具链、编译命令、烧录、监视串口、OpenOCD 调试全部整合到了图形界面里你基本不需要手动敲太复杂的命令行。当然纯命令行流派也完全可行。我自己在 Linux 服务器上部署编译环境时就是纯命令行操作。但日常开发在 Windows 或 macOS 上我倾向于用 VSCode 插件。还有一个选择是 PlatformIO它的生态也很成熟对 ESP32-S3 支持不错但 PlatformIO 里的 ESP-IDF 版本更新往往滞后于官方而且有时候自定义组件会有些麻烦。如果你需求特别简单想用 Arduino 框架快速验证PlatformIO 倒是个不错的替代方案。2.3 理解环境变量帮你少踩一半的坑很多新手遇到的问题不是代码写错而是命令找不到。idf.py 本质上是一个 Python 脚本但它需要依赖若干环境变量来定位 ESP-IDF 目录、工具链路径、Python 虚拟环境等。Linux 和 macOS 上你可能需要执行source export.sh来设置这些变量Windows 上安装器会帮你自动配置好 cmd 和 PowerShell 的环境变量。理解这一点对调试非常重要。比如有人换了终端窗口后执行idf.py报“command not found”很可能就是因为新窗口没有重新加载环境变量。VSCode 插件之所以方便是因为它在后台替你完成了这些初始化工作你不用关心IDF_PATH指向哪里但你应该知道它存在否则遇到问题时很难排查。此外ESP-IDF 需要用到的依赖包括Python 3.8 以上版本、CMake、Ninja 构建工具、GCC 交叉编译器、OpenOCD 调试器、QEMU 模拟器等。这些组件如果全部手动安装版本兼容问题非常折磨人。所以官方提供的集成安装器或者 VSCode 插件的一键安装模式反而是最推荐给新手的方案。2.4 下载慢、网络不稳怎么办国内用户安装 ESP-IDF 时最常见的问题是 GitHub 下载慢或连接不稳定。官方其实提供了国内镜像和离线安装包。乐鑫官网的下载页面可以找到离线安装器离线包会把工具链、Python 环境、ESP-IDF 源码都打包好一次装完不用担心中途断连。另外乐鑫在官方文档里也提供了针对国内网络环境的镜像配置方法。具体做法是可以修改 pip 源、设置 GitHub 镜像等。如果你只使用官方离线包通常不需要额外的代理工具就能完成安装。我个人在给客户部署环境时优先使用离线安装包因为它的成功率和可复现性都比在线安装高很多尤其是在网络环境复杂的办公网里。3. 完整实操从空系统到点亮第一颗灯这一部分我按 Windows 和 Linux 两条线交叉来说明但主线是 Windows 加 VSCode这也是目前最多人使用的组合。如果你用的是 macOS操作思路完全一样只是个别命令路径不同。3.1 安装 ESP-IDF离线包还是在线包第一步是下载安装器。打开乐鑫官网的 ESP-IDF 下载页面能看到两大类安装器在线安装器和离线安装器。在线安装器体积小但是需要从 GitHub 拉取大量文件对国内网络不友好离线安装器体积较大通常在 1GB 上下但安装过程基本不需要网络依赖。我强烈建议首次安装的人选择离线安装器而且版本选择上优先选 v5.1 或 v5.2 这类 LTS 长期支持版本。不建议一上来就追最新版本因为新版本往往伴随一些生态适配问题很多第三方库还没跟上。选一个当前最稳定的 LTS 版本后续开发遇到问题的概率会小很多。安装时注意三点一是安装路径不要有中文和空格否则后续构建会出各种诡异问题二是关闭杀毒软件或把安装目录加入白名单因为编译时会产生大量临时文件杀毒软件实时扫描会显著拖慢速度甚至误删文件三是安装过程中不要随意中断等待它完成完整的组件部署。如果安装完成后安装器提示你“是否要将工具链添加到 PATH”建议勾选这样命令行使用起来更方便。3.2 配置 VSCode 插件并确认工具链安装好 ESP-IDF 后打开 VSCode在扩展市场搜索espressif会找到官方插件Espressif IDF。安装完成后按CtrlShiftP打开命令面板输入ESP-IDF: Configure ESP-IDF Extension进入配置界面。这里有两个选择如果你已经安装了独立的 ESP-IDF可以选择Use Existing Setup然后手动指定ESP-IDF文件夹路径和IDF Tools路径如果你没有单独安装过可以让插件自动下载安装。已经装了离线包的人建议直接选择现有安装避免重复下载。配置完成后可以打开一个终端输入idf.py --version验证环境变量是否生效。正常会输出类似v5.1.2的版本信息。接着建议在 VSCode 里试着打开一个 ESP-IDF 的示例工程看编译命令是否能正常触发。这样能尽早发现问题避免写完代码再排查环境。3.3 创建 hello_world 并完成首次编译ESP-IDF 安装目录下自带了大量官方示例在examples文件夹里可以按类别找到。最基础的工程是examples/get-started/hello_world我建议所有人都从它开始。用 VSCode 打开这个文件夹然后打开终端依次执行。idf.py set-target esp32s3 idf.py build第一次执行set-target时ESP-IDF 会根据选择的芯片型号生成sdkconfig配置文件。这一步相当于告诉构建系统你用的是哪款芯片不同的芯片会有不同的链接脚本和配置选项。如果你希望在 ESP32-S3 和 ESP32-C3 之间切换项目每次切换后都要重新执行这一步并且建议用idf.py fullclean清理一次旧构建产物。idf.py build会调用 CMake 和 Ninja 来编译整个工程。首次编译因为要生成系统组件和工具链缓存时间会比较长通常在几分钟到十几分钟不等具体取决于电脑性能。如果一切顺利终端末尾会出现类似Project build complete.的提示并生成build/hello_world.bin等文件。编译过程中如果报错优先检查路径是否包含中文、Python 版本是否兼容、依赖是否完整。3.4 烧录、串口监视以及 USB CDC 的一些区别编译通过后用 USB 线把开发板连接到电脑。这里有一个很容易踩的坑不要用那种只能充电、不能传输数据的“充电线”很多新手一晚上没进展最后发现是线的问题。连接后Windows 上可以在设备管理器里查看新增的串口设备。ESP32-S3 的 USB 原生接口通常显示为USB Serial或COMx具体编号因电脑而异。Linux 上可以用ls /dev/ttyACM*或ls /dev/ttyUSB*查看。执行烧录命令时指定串口。idf.py -p COM7 flash monitor-p后面跟着的是串口号。flash会把编译好的固件烧录到 Flashmonitor则打开串口监视器实时查看设备输出的日志。按Ctrl]可以退出监视器按重启键可以重新运行固件。需要注意S3 的 USB 原生接口在第一次插上时可能需要在电脑上安装驱动程序尤其是 Windows 系统。如果设备管理器里显示的是未知设备可以尝试用官方提供的驱动工具或更新操作系统自带的驱动。另外S3 还有 UART 串口引脚通常标注为 TX、RX如果板子上有专门的 USB 转串口芯片那么它出现的串口设备和 USB 原生 CDC 是两个不同的设备烧录前要看清楚默认配置。hello_world 程序本身不会点亮 LED但它的日志输出已经说明环境完全可用。此时你的工具链、烧录链路、串口监视都已经跑通后续所有工程都能在这条链路上正常流转。3.5 改造一个自己的 blink 工程接下来把 hello_world 改造成一个简单的 Blink 工程。ESP32-S3 的大多数开发板都板载了一颗 WS2812 RGB LED点亮的控制方式略有不同但更通用的做法是直接用普通 GPIO 控制 LED。首先在工程目录下新建一个main文件夹然后在里面新建main.c和CMakeLists.txt。最简单的代码是这样。#include stdio.h #include freertos/FreeRTOS.h #include freertos/task.h #include driver/gpio.h #include esp_log.h #define BLINK_GPIO 48 void app_main(void) { gpio_reset_pin(BLINK_GPIO); gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT); while (1) { gpio_set_level(BLINK_GPIO, 1); vTaskDelay(pdMS_TO_TICKS(500)); gpio_set_level(BLINK_GPIO, 0); vTaskDelay(pdMS_TO_TICKS(500)); } }GPIO 编号要根据自己板子的原理图确认。ESP32-S3-DevKitC 这类板子板载 WS2812 一般接到 GPIO48但这颗灯是 LED 驱动器不是直接高电平点亮而是通过时序数据控制颜色所以简单点灯实验里直接操作 GPIO48 不一定能正确点亮板载 RGB 灯。如果你用的是普通 LED 接到某个 GPIO直接按照上面的代码修改引脚编号即可。改完代码后再次执行。idf.py build flash monitor注意flash monitor会先编译再烧录再打开监视器。此时开发板会不断打印日志GPIO 上的 LED 会按照 500ms 的周期闪烁。第一次完全自己动手跑通的点灯过程虽然简单但意味着你已经掌握了 ESP-IDF 工程的基本闭环修改代码、编译、烧录、观察现象。4. 进阶实战三个高频需求一次讲完环境跑通只是开始实际项目里 S3 最常见的高频需求是配网、语音采集、屏幕显示。这一节我把这三块的核心思路和关键参数拆开讲每一块都能直接套用。4.1 BLE 配网让设备自己上网很多 S3 项目做的是无屏设备没有键盘也没有路由器配置界面这时候怎么让设备拿到 Wi-Fi 账号密码最常用的方案就是 BLE 配网。原理很简单设备上电后S3 的 BLE 模块开始广播一个特定名称的服务手机上的 APP 扫描到这个设备后通过 BLE 把 Wi-Fi 的 SSID 和密码发送给设备设备收到后用 Wi-Fi 模块连接路由器。连接成功后可以把 Wi-Fi 信息保存到 NVS 存储中下次上电直接读取并自动连接。使用 ESP-IDF 的wifi_provisioning组件可以快速实现。官方提供了示例examples/provisioning/ble_prov直接复制工程改一下ble_prov.c里的设备名和认证方式即可。手机端推荐使用乐鑫官方的Espressif BLE ProvisioningAPP。关键参数上需要注意 BLE 和 Wi-Fi 共存时的内存占用。S3 的内存足够但如果你同时跑 LVGL 和音频就要留意 PSRAM 的分配。另外配网过程建议加超时机制比如 5 分钟没有配网成功就进入低功耗状态这样可以延长电池设备的待机时间。还有一个容易被忽略的地方BLE 配网服务名称不要和蓝牙广播名称混淆有些新手在手机列表里找不到设备就是因为 APP 扫描的是服务名而不是广播名。4.2 I2S 数字麦克风采集语音数据语音交互是 S3 的核心卖点之一而采集语音的第一步是接对麦克风。最常用的数字麦克风是 INMP441这是一颗 I2S 接口的 MEMS 麦克风输出数字 PDM 转 I2S 数据可以直接接到 S3 的 I2S 外设。接线表如下以常见的开发板引脚分配为例。INMP441 引脚ESP32-S3 GPIOVDD3.3VGNDGNDSCKGPIO4BCLKWSGPIO5LRCKSDGPIO6DINL/RGND表示左声道L/R 引脚要注意INMP441 的 L/R 接地表示通过 WS 引脚的电平左声道/右声道选择接 3.3V 表示右声道。通常单麦克风接 GND 即可。如果你的采样数据全部是错误或噪声优先检查这个引脚的接法。ESP-IDF 里使用 I2S 驱动的核心代码结构大致如下。#include driver/i2s_std.h i2s_chan_config_t chan_cfg { .id I2S_NUM_0, .role I2S_ROLE_MASTER, .dma_desc_num 6, .dma_frame_num 240, }; i2s_std_config_t std_cfg { .clk_cfg { .sample_rate_hz 16000, .clk_src I2S_CLK_SRC_DEFAULT, }, .slot_cfg { .data_bit_width I2S_DATA_BIT_WIDTH_32BIT, .slot_bit_width I2S_SLOT_BIT_WIDTH_32BIT, .slot_mode I2S_SLOT_MODE_MONO, .slot_mask I2S_STD_SLOT_LEFT, }, .gpio_cfg { .mclk I2S_GPIO_UNUSED, .bclk GPIO_NUM_4, .ws GPIO_NUM_5, .dout I2S_GPIO_UNUSED, .din GPIO_NUM_6, }, };采样率方面做语音识别一般用 16kHz做音乐采集可以用 44.1kHz 或 48kHz。INMP441 内部是 24 位 ADC选择 32bit 数据位宽时读取到的数据放在高位转换为实际幅值时需要右移 8 位然后除以 8388608.0换算成 dBFS 或线性比例都行。DMA 缓冲区大小dma_frame_num越小延迟越低但 CPU 中断也更频繁越大越省 CPU但采集延迟也会变高。实际调优时可以慢慢尝试没有绝对最优的参数。4.3 GC9A01 圆屏好看的 HMI 从一颗圆屏开始GC9A01 是一颗 240x240 分辨率的圆形 TFT 屏幕市面上大多数 1.28 英寸圆屏都用这颗驱动芯片。它接口是 SPI所以接线非常灵活。常见的接法如下。屏幕引脚ESP32-S3 GPIOVCC3.3VGNDGNDSCL / SCLKGPIO12SDA / MOSIGPIO11DCGPIO9CSGPIO10RSTGPIO14BLGPIO21这里 GPIO 分配不是固定的S3 的 SPI 引脚可以映射到多个 IO关键是别和系统保留引脚冲突。S3 的 strapping 引脚包括 GPIO0、GPIO3、GPIO45、GPIO46这几个引脚在启动时有特殊作用最好避开。通用的经验是优先使用不常用的 GPIO同时注意避免和其他外设冲突。驱动方案推荐用 LovyanGFX 或 TFT_eSPI。ESP-IDF 里集成 LovyanGFX 组件比较方便它的色彩管理、字体渲染和触摸支持都比较完善。如果只是简单显示图片TFT_eSPI 更轻量。这两种库都支持自定义引脚配置配置完成后初始化屏幕、清屏、画圆、显示图片都是现成接口。圆屏和方屏最大的不同在于坐标系。方屏直接用 x、y 从左到右从上到下即可圆屏虽然底层也是 240x240 的矩形像素但显示区域是圆形四角像素物理上不存在。做仪表盘时你需要自己计算圆形表盘的半径、刻度角度和指针位置通常用三角函数计算坐标。另外 GC9A01 的色彩格式默认是 RGB565一张 240x240 的图片直接以 RGB565 数组方式存放占用约 115KB如果使用n16r8这类带 8MB PSRAM 的版本可以轻松放很多张图片和动画帧缓冲这也是我在推荐型号时优先选大 PSRAM 的原因。4.4 电源和引脚规划很多玄学问题的真正根源S3 开发板本身有稳压电路USB 供电时可以驱动 GPIO 上的大部分小外设。但如果你同时接了一块圆屏、一个麦克风、几个传感器和一个 Wi-Fi 模块就要注意电源的问题。Wi-Fi 发射瞬间电流可能达到几百毫安加上屏幕背光和 WS2812 灯带很容易把 3.3V 电压拉垮导致系统突然重启、串口输出乱码、外设不稳定。经验做法是小电流外设直接由开发板 3.3V 供电大电流外设使用独立的 3.3V 或 5V 稳压模块供电并且公共地线必须连在一起。如果使用锂电池供电尽量选择支持 2A 以上输出的升压模块或 LDO并且为屏幕背光单独做 PWM 调光避免一直全亮度工作。引脚规划上画原理图或飞线前先把所有外设的引脚写进一个表格标注功能、方向、电平要求避免两个设备共用同一个引脚导致冲突。5. 常见问题与排查速查表环境搭建和开发过程中我见过太多人卡在同一类问题上。这里我把高频故障整理成速查表并给出解决思路。5.1 先看日志再动手嵌入式开发的排查逻辑其实很统一先看串口日志再看硬件连接。很多新手一看到设备不工作就直接怀疑代码实际上百分之七八十的问题都能在启动日志里找到线索。S3 的 ROM bootloader 会输出芯片型号、Flash 大小、启动模式、复位原因等信息遇到无法烧录或反复重启的情况优先按住开发板上的 BOOT 键再执行烧录命令或者查看日志里rst:开头的行它会告诉你复位类型。5.2 高频问题速查现象根本原因解决办法电脑识别不到串口USB 线只支持充电或驱动未装换数据线确认设备管理器中 VID/PID安装官方驱动idf.py命令不存在环境变量未加载重新打开终端或执行export.shWindows 用 cmd 重新打开烧录时Failed to connect芯片进入下载模式失败按住 BOOT 键再烧录或检查串口号是否正确编译报 Python 相关错误Python 版本不匹配或依赖冲突使用官方安装的自带 Python或重新安装 ESP-IDF 离线包编译非常慢杀毒软件扫描或首次构建缓存添加白名单关闭实时防护合理用fullclean日志里不断rst:0x4005深度睡眠复位或看门狗复位检查CONFIG_ESP_SYSTEM_PANIC配置看日志上下文定位屏幕一直花屏SPI 速率过高或接线过长降低 SPI 频率缩短飞线检查电源地线麦克风采到全零L/R 引脚接错或 I2S 方向配置反了核对 L/R 电平检查din/dout是否配置正确Wi-Fi 连不上配网时 SSID 或密码编码问题使用官方 APP 重新配网检查 Wi-Fi 凭证保存到 NVS 是否成功程序一跑就重启电源电流不够换供电降低外设功耗分开供电5.3 几个我踩过的冷门坑除了上面的高频问题还有几个比较冷门但容易让人抓狂的坑。第一个是idf.py fullclean的时机。当你升级了 ESP-IDF 版本或者改了sdkconfig中的某些重要选项时不清除旧构建产物会出现各种奇怪链接错误。遇到“链接不到某个符号”这类问题先 fullclean 再 build。第二个坑是 Flash 大小和分区表不匹配。ESP-IDF 默认分区表可能假设 Flash 是 4MB如果你的板子是 16MB Flash 但没有启用CONFIG_ESPTOOLPY_FLASHSIZE_16MB系统可能只用了 4MB后续 OTA、存储大量资源文件时就会空间不足或分区偏移错误。修改sdkconfig里的 Flash 大小或者运行idf.py menuconfig手动配置分区表。第三个坑是 USB 原生 CDC 和 UART 串口的日志输出不一致。S3 开发板上通常有两套串口一套是板载 USB 转 UART 芯片的 UART0一套是原生 USB-Serial/JTAG 接口。默认日志可能输出到其中一个你在另一个串口里看不到日志就以为板子坏了。检查sdkconfig中的CONFIG_ESP_CONSOLE_UART_DEFAULT或CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG设置也可以直接打开两个串口监视器同时观察。6. 最后再分享一点我的实际做法做了这么多年嵌入式开发我最大的感受是环境搭建的本质不是安装一堆软件而是把所有工具链版本对齐。ESP-IDF、Python、CMake、Ninja、编译器、插件任何一个版本错位都可能让你卡在某个莫名其妙的报错上。所以我现在的做法是固定一个常用的 LTS 版本不轻易升级每次新项目开始前写一个环境说明文档记录 IDE 配置、工具链版本、依赖组件版本遇到疑难问题先在干净环境里跑官方示例确认环境没问题再改业务代码。如果你实在不知道怎么选环境我建议直接照着这一套来ESP-IDF v5.1 LTS、VSCode Espressif IDF 插件、离线安装包安装、开发板选择带 8MB PSRAM 的 n16r8 型号。这套组合我反复验证过稳定性和可复现性都很高适合大多数人从入门到进阶。等这套环境用熟了你自然就明白哪些组件可以替换、哪些参数可以调整届时再尝试最新版本也不迟。
返回列表