ESP-IDF
本章节包含以下部分,请按需阅读:
ESP-IDF 入门教程
通用开发流程可参考 ESP-IDF 入门教程:
- 第0节 认识 ESP32
- 第1节 搭建环境
- 第2节 运行实例
- 第3节 创建项目
- 第4节 使用组件
- 第5节 调试程序
- 第6节 FreeRTOS
- 第7节 驱动外设
- 第8节 Wi-Fi 编程
- 第9节 BLE 编程
通用教程以 ESP32-S3-Zero 为例。本产品的 SDK 版本、目标芯片和接线以本页配置及各示例说明为准。
配置 ESP-IDF 开发环境
以下以 Windows 系统为例,使用 VS Code + ESP-IDF 扩展 打开、编译和烧录示例。
当前示例使用 ESP-IDF 6.2.0-dev-08e0d30a74ad 开发版,目标为 esp32s31(Preview)。通用教程中的 V5.5.2 不适用于本产品;首次安装请按下方指定版本说明操作。
以下流程已核对示例及乐鑫扩展源码,尚未完成 VS Code 全流程编译、烧录和实板验证。
开始前准备
- ESP32-S31-Zero 开发板。
- 支持数据传输的 USB Type-C 线缆。
- Windows 电脑。
- 使用 Wi-Fi 或 BLE 示例时,确认天线选择电阻与所用通路匹配。可使用板载陶瓷天线;切换至 IPEX 一代接口后,需连接适用的 2.4 GHz 外接天线。
- 从 ESP32-S31-Zero 示例程序入口 下载并解压完整工程。
UART、I2C 和综合测试所需的接线与外设见对应示例。首次连接时先断开扩展设备,通过 Type-C 接口连接电脑。
安装 Visual Studio Code 与 ESP-IDF 扩展
-
下载并安装 Visual Studio Code 编辑器。
安装时可勾选“通过 Code 打开”相关资源管理器上下文菜单选项,以便打开工程目录。
-
启动 VS Code,点击侧边活动栏中的扩展图标,或按 Ctrl + Shift + X 打开“扩展”视图。
-
搜索
ESP-IDF,安装乐鑫发布的 ESP-IDF 扩展。
安装 ESP-IDF 开发环境
首次使用时安装指定版本的 ESP-IDF。已经安装该版本的电脑可以直接进入 打开示例工程。
首次安装:获取指定 SDK 并安装配套工具
-
安装 Git for Windows 工具。在不含中文和空格的开发工具目录打开 Windows PowerShell,执行以下命令:
git clone --no-checkout https://github.com/espressif/esp-idf.git esp-idf-s31git -C esp-idf-s31 checkout 08e0d30a74ad0bfd5a34933142b80f45619ee410git -C esp-idf-s31 submodule update --init --recursive -
下载并运行最新版 ESP-IDF Installation Manager 安装工具,选择自定义安装(Expert Installation)。保留默认目标选择;若要求选择版本,先选
master。到安装路径步骤时,选择上一步生成的esp-idf-s31文件夹本身。安装器会使用该目录中已经检出的指定提交,而不是重新下载
master。按提示完成前置依赖、工具链和 Python 环境安装。此方式见 EIM 自定义安装说明。 -
安装完成后回到 VS Code,按
Ctrl+Shift+P,运行 "ESP-IDF: Select Current ESP-IDF Version",选择路径指向esp-idf-s31的环境。 -
在命令面板运行 "ESP-IDF: Open ESP-IDF Terminal",执行一次以下命令,使组件管理器与示例配套版本一致:
python -m pip install "idf-component-manager==3.1.2"
打开示例工程
-
在 VS Code 中选择“文件” > “打开文件夹”,打开
examples/esp-idf/02_blink_rgb。打开后,资源管理器顶层应能看到
CMakeLists.txt、sdkconfig.defaults和main文件夹。每个示例都是独立工程,打开所需示例的文件夹即可。 -
按
Ctrl+Shift+P,运行 "ESP-IDF: Select Current ESP-IDF Version",选择上文安装的esp-idf-s31环境。 -
在命令面板运行 "ESP-IDF: Set Espressif Device Target",选择
esp32s31(Preview)。扩展会自动处理预览目标参数,不要选择esp32s3。
首次配置需要联网下载组件。建议使用新解压的示例;复用旧工程或切换框架前,先备份原有的 sdkconfig、dependencies.lock 和构建目录。
所有示例保留 16 MiB Flash、DIO 和 80 MHz 配置。该配置不等于实装 Flash 容量,详见 Flash 容量说明。
编译与下载
以下以 02_blink_rgb 为例,在 VS Code 命令面板中完成编译、下载和查看日志。
-
运行 "ESP-IDF: Build Your Project" 编译工程。首次编译会下载依赖,等待任务成功结束,确认
build目录中生成固件。 -
通过 Type-C 接口连接开发板。运行 "ESP-IDF: Select Port to Use (COM, tty, usbserial)",选择开发板对应的端口。
-
运行 "ESP-IDF: Flash Your Project",如提示选择下载方式,选择 UART,通过 USB 串口下载。
若无法自动进入下载模式,按住 BOOT,按下并松开 RESET,再松开 BOOT,重新确认端口后下载。下载完成后如仍停留在下载模式,松开 BOOT 并按 RESET 启动程序。
-
运行 "ESP-IDF: Monitor Device" 查看串口日志,并观察 RGB LED 是否依次显示红、绿、蓝并熄灭。按
Ctrl+]退出监视器。
使用其他示例时,在 VS Code 中打开对应的示例文件夹,重复上述操作。需要修改 Wi-Fi 等工程选项时,运行 "ESP-IDF: SDK Configuration Editor (Menuconfig)",保存配置后重新编译、下载。
示例程序
每个示例都是独立工程。选择下表中的示例,在 VS Code 中打开 examples/esp-idf/ 下对应文件夹,按 编译与下载 操作。以下“运行效果”描述源码预期行为,不代表实板测试记录。示例 11 需要配套转接板及外接设备,不能作为裸板的通用自检程序。
| 示例目录 | 功能 | 额外条件 |
|---|---|---|
| 01_gpio_output | 将 15 路引出 GPIO 设为高电平 | 断开外部输出源和负载 |
| 02_blink_rgb | 控制板载 RGB LED | 无需外接 LED |
| 03_chip_info | 打印芯片和 Flash 信息 | USB 控制台 |
| 04_boot_button | 读取 BOOT 按键 | USB 控制台 |
| 05_uart_loopback | UART1 发送、接收及比较 | GPIO58 与 GPIO59 跳线 |
| 06_i2c_scan | 扫描外部 I2C 设备 | 外部设备及适当上拉 |
| 07_wifi_scan | 扫描附近 Wi-Fi 热点 | 天线通路正确 |
| 08_wifi_sta | 连接指定 Wi-Fi 热点 | 天线通路正确及 2.4 GHz 热点 |
| 09_wifi_ap | 创建 Wi-Fi SoftAP | 天线通路正确及无线终端 |
| 10_ble_advertiser | BLE 广播与连接事件 | 天线通路正确及 BLE 调试工具 |
| 11_board_test | 综合测试 | 匹配的触摸屏转接板、SD 卡转接板及外接设备 |
| 12_wifi_performance | Wi-Fi 吞吐与链路诊断 | 天线通路正确及 iperf 2.x 对端 |
01_gpio_output:GPIO 输出
【程序说明】
此示例将 GPIO0~6、GPIO46~51、GPIO58 和 GPIO59 共 15 路信号配置为推挽输出,并保持高电平。
【操作步骤】
- 运行前断开这些引脚上的外部输出源和负载,避免信号冲突。
- 编译并下载
01_gpio_output。 - 用万用表或逻辑分析仪相对 GND 检查电平。
【运行效果】
所列引脚应保持高电平。程序只设置输出,不执行回环测量,也不周期翻转电平。串口中的配置日志不等于全部引脚已通过电气测试。
02_blink_rgb:RGB LED
【程序说明】
此示例通过 GPIO60 使用 RMT 外设发送 WS2812 数据,控制板载 WS2812B-1010。颜色数据按 GRB 顺序发送,不能通过简单翻转 GPIO60 电平替代颜色数据。
【操作步骤】
- 通过 Type-C 接口连接开发板,无需外接 LED。
- 编译并下载
02_blink_rgb,观察板载 RGB LED。
【运行效果】
源码循环依次为红色 1 秒、绿色 1 秒、蓝色 1 秒、熄灭 0.5 秒。检查实际颜色及顺序是否与该设置一致。
03_chip_info:芯片信息
【程序说明】
此示例读取并打印目标名称、CPU 核心数、芯片修订号、基础 MAC 地址、功能位和 Flash 信息。
【操作步骤】
编译并下载 03_chip_info,打开 USB 控制台,记录芯片信息及 Flash 读取结果。
【运行效果】
控制台输出芯片信息,重点区分两项 Flash 输出:
Physical Flash:通过esp_flash_get_physical_size()读取的物理容量。Configured flash size:工程设置的 Flash 容量。
两项数值可能不同。原理图标注 32 MiB 器件,而工程保留 16 MiB 配置;实际结果以所用开发板的读取值为准。
04_boot_button:BOOT 按键
【程序说明】
此示例将 GPIO61 配置为上拉输入,读取低有效 BOOT 按键,并通过延时确认电平变化。
【注意事项】
正常启动时松开 BOOT。按住 BOOT 的同时复位会选择下载模式,此时不会进入按键示例的正常运行流程。
【操作步骤】
- 编译并下载
04_boot_button,打开 USB 控制台。 - 程序运行后,按下并松开 BOOT,观察日志。
【运行效果】
串口按状态变化输出 Button PRESSED 或 Button RELEASED。
05_uart_loopback:UART 回环
【程序说明】
程序使用 UART1,通过 GPIO58(TX)发送带序号的字符串,经跳线回送至 GPIO59(RX),接收后逐字节比较。UART 配置如下:
| 参数 | 设置 |
|---|---|
| UART | UART1 |
| 波特率 | 115200 |
| 数据格式 | 8 位数据、无校验、1 位停止位,无硬件流控 |
【操作步骤】
- 断电并断开 GPIO58、GPIO59 上的其他外接设备。
- 将 H2 第 2 脚 GPIO58(UART1 TX)与第 1 脚 GPIO59(UART1 RX)短接。
- 上电后编译并下载
05_uart_loopback,打开 USB 控制台。无需将 UART1 接到电脑。
【运行效果】
收到的数据长度与内容均一致时输出 PASS,否则输出 FAIL 并提示检查跳线。
06_i2c_scan:I2C 扫描
【程序说明】
程序每轮扫描 0x08~0x77,输出地址表和设备数。外部设备接线如下:
| 信号 | GPIO | 接口 |
|---|---|---|
| SDA | GPIO52 | J2 第 19 脚 |
| SCL | GPIO53 | J2 第 21 脚 |
原理图中的相关外部上拉电阻标注为未装配选项,应按外设和总线要求提供适当的 3.3 V 上拉。
【操作步骤】
- 断电后按上表连接适用于 3.3 V 逻辑电平的外部 I2C 设备,并确认共地及 SDA、SCL 上拉条件。
- 上电后编译并下载
06_i2c_scan,打开 USB 控制台。
【运行效果】
地址表示应答设备,-- 表示未收到应答,UU 表示探测超时。未接设备时显示 0 个设备可以是正常结果,不能预设板上有固定地址的 I2C 从设备。
07_wifi_scan:Wi-Fi 扫描
【程序说明】
程序使用 STA 模式扫描热点,每轮打印热点总数,最多显示 20 条记录,包含信道、RSSI、认证模式和 SSID。
【操作步骤】
- 确认板载天线通路;使用外接天线时,完成通路切换并连接适用的 2.4 GHz 天线。
- 编译并下载
07_wifi_scan,打开 USB 控制台查看扫描结果。
【运行效果】
每轮完成后延时 10 秒再扫描。扫描结果受周围热点、天线及环境影响,不预设固定热点数量。
08_wifi_sta:连接 Wi-Fi
【程序说明】
此示例连接指定的 2.4 GHz Wi-Fi 热点,并输出连接状态和获取的 IPv4 地址。
【操作步骤】
确认天线通路,打开 08_wifi_sta 工程的 menuconfig,在 "Example Configuration" 中设置以下内容:
- "Wi-Fi SSID":待连接的 2.4 GHz 热点名称。
- "Wi-Fi password":热点密码。
- "Maximum connection retries":最大重试次数。
保存配置,重新编译并下载 08_wifi_sta,打开 USB 控制台。
【运行效果】
程序在获取 IPv4 地址后输出 IPv4 address:;连接失败时会按配置重试,达到次数上限后输出失败信息。
该示例演示热点连接和地址获取,获得地址不等于已验证互联网访问。分享工程或截图前移除本地 Wi-Fi 凭据。
09_wifi_ap:创建 SoftAP
【程序说明】
此示例创建本地 SoftAP,未实现互联网共享或 NAT 路由。示例允许空密码开放网络,使用时应按实际需求设置。
【操作步骤】
- 确认天线通路,打开
09_wifi_ap工程的menuconfig。 - 在 "Example Configuration" 中配置 SoftAP 名称、密码、信道和最大连接数。
- 保存配置,重新编译并下载
09_wifi_ap。 - 通过电脑或手机连接所设热点,观察 USB 控制台。
【运行效果】
控制台记录终端加入、离开事件。终端提示无互联网连接时,应结合本地连接状态判断结果。
10_ble_advertiser:BLE 广播
【程序说明】
此示例使用 NimBLE,广播设备名 ESP32-S31-Zero。该示例未定义串口透传服务,不能将其作为蓝牙串口示例使用。
【操作步骤】
- 确认天线通路,编译并下载
10_ble_advertiser。 - 通过支持 BLE 扫描的工具查找
ESP32-S31-Zero。 - 连接设备后再断开,观察 USB 控制台中的连接状态。
【运行效果】
程序在连接和断开时输出日志,并在连接失败或断开后恢复广播。
11_board_test:综合测试
【程序说明】
此工程包含 Flash、PSRAM、CPU/RAM、GPIO60 RGB LED,以及外接显示、触摸、SD 和 GPIO54 指示灯等测试。显示、触摸和 SD 卡测试需要连接匹配的触摸屏转接板、SD 卡转接板及外接设备。GPIO54 指示灯为外接器件,不能据此认定开发板另有一颗板载状态灯。
【硬件条件】
运行前需确认转接板、外接设备、引脚及供电与工程匹配。整套转接板及外接设备的兼容性仍待验证,未连接对应设备时不能要求全部项目通过。
| 项目 | 工程当前设置与范围 |
|---|---|
| LCD | 外接 800 × 480 RGB565 显示,像素时钟 16 MHz;这是工程配置,不是裸板显示规格 |
| 触摸 | 外接 GT911,使用 GPIO52、GPIO53、GPIO38、GPIO7;启动时探测 0x14、0x5D |
| 连续触摸跟踪 | 默认关闭,只保留启动检测;启动检测成功不等于运行中触摸已验证 |
| SD | 外接卡座,GPIO20~25,4 位 SDMMC,运行时钟配置为 20 MHz |
自动测试会擦写专用 testdata 分区的首个 4 KiB 扇区,SD 测试会创建、读回并删除临时文件。运行前确认分区用途并备份数据。LCD 启动后会将 GPIO33、GPIO34 改作 RGB 数据线,USB Serial/JTAG 控制台随之不可用;仅在显示启动失败、未完成引脚接管时保留交互控制台。
【操作步骤】
- 断电后,按工程引脚及供电要求连接已确认匹配的转接板及外接设备,核对分区用途并备份数据。
- 检查
11_board_test的 PSRAM、显示、触摸和 SD 配置。 - 触摸通信仍有待验证问题。如需启用连续采样,在 "Board test" > "Enable continuous touch sampling and touch marker" 中启用对应选项;默认保持关闭。
- 确认硬件条件后,编译并下载
11_board_test,按测试项目检查日志及外设现象。
【结果判断】
启动触摸检测成功不等于连续跟踪已验证。LCD 启动成功后,USB 控制台不能继续用于观察日志。显示失败、触摸失败或 SD 失败应分别检查,不能由其他项目成功推断其通过。
12_wifi_performance:Wi-Fi 吞吐测试
【程序说明】
此示例提供 USB Serial/JTAG 控制台,用于 Wi-Fi 连接、链路信息、ping 及 TCP、UDP 吞吐测试。
【准备与操作】
确认天线通路,并准备运行 iperf 2.x 的电脑;iperf3 协议与该示例不兼容。编译并下载 12_wifi_performance,打开 USB 控制台。
下载启动后,在 wifi-perf> 控制台输入 help 查看命令。STA 模式连接命令如下,将尖括号中的内容替换为本地参数:
sta_connect <SSID> <PASSWORD>
rf_info
ping <GATEWAY_IP>
吞吐测试需先启动接收端。下表中的 <PC_IP> 为电脑地址,<DUT_IP> 为开发板地址。
| 方向 | 电脑端命令 | 开发板控制台命令 |
|---|---|---|
| TCP,开发板发送 | iperf -s -i 1 | iperf -c <PC_IP> -i 1 -t 60 |
| TCP,开发板接收 | iperf -c <DUT_IP> -i 1 -t 60 | iperf -s -i 1 |
| UDP,开发板发送 | iperf -s -u -i 1 | iperf -c <PC_IP> -u -b 20M -i 1 -t 60 |
| UDP,开发板接收 | iperf -c <DUT_IP> -u -b 20M -i 1 -t 60 | iperf -s -u -i 1 |
电脑通过有线网络连接测试路由器,可减少电脑自身无线链路对测试的影响。记录天线、供电、信道、带宽、方向、RSSI、吞吐率及 UDP 丢包情况;结果不预设为固定速率。
【结果判断】
rf_info 中的发射功率字段是软件配置值,不是实测射频功率。该示例用于功能及吞吐测试,不能替代 TRP、TIS 或射频认证测试。
问题排查
目标无法识别、Flash 容量不同、USB 中断或外设失败时,参见 ESP32-S31-Zero 常见问题。