ESP-IDF 开发
本章节包含以下内容,请按需阅读:
ESP-IDF 入门教程
初次接触 ESP32 ESP-IDF 开发,想要快速上手?我们为您准备了一套通用的 入门教程。
- 第0节 认识 ESP32
- 第1节 搭建环境
- 第2节 运行实例
- 第3节 创建项目
- 第4节 使用组件
- 第5节 调试程序
- 第6节 FreeRTOS
- 第7节 驱动外设
- 第8节 Wi-Fi 编程
- 第9节 BLE 编程
请注意:该教程使用 ESP32-S3-Zero 作为教学示例,所有硬件代码均基于其引脚布局。在动手实践前,建议您对照手中的开发板引脚图,确认引脚配置无误。
配置开发环境
备注
以下环境设置适用于 Windows 10/11 系统,Mac/Linux 用户请参考 官方说明
-
下载并安装 Visual Studio Code。
-
在 VS Code 中,通过点击 VS Code 侧边活动栏中的
或使用快捷键(Ctrl+Shift+X)来打开 扩展 视图。然后,搜索 ESP-IDF 扩展并安装。

-
安装扩展后,VS Code 左侧活动栏中会出现
图标,点击该图标可查看 ESP-IDF 扩展的基本命令列表,在 Advanced 中选择 配置 ESP-IDF 扩展。

-
选择 Express 进入快速配置模式:

-
根据需要修改以下选项。
- 选择下载服务器:
- Espressif:使用乐鑫中国服务器,下载速度更快。
- Github:使用 GitHub 官方发布链接。
- ESP-IDF 版本:通常根据开发板要求选择对应版本,如无特殊要求建议使用最新的正式版本。对于 ESP32-S3-Touch-AMOLED-1.75C ,建议 Espressif IDF 版本 ≥ v5.5.0。
- ESP-IDF 容器安装地址:建议使用默认地址,或使用纯英文路径且路径中不包含空格。
- ESP-IDF 所需的工具安装地址:建议使用默认地址,或使用纯英文路径且路径中不包含空格。

- 选择下载服务器:
-
点击 Install 开始安装。你将看到一个显示安装进度的页面,包括 ESP-IDF 下载、ESP-IDF 工具下载安装以及 Python 虚拟环境创建的进度状态。

-
如果安装正确,你会看到所有设置已配置完成的提示,即可开始使用该扩展程序。

注意
注意:如果 ESP-IDF 安装失败或需要重新安装,可以尝试删除 C:\Users\%Username%\esp 和 C:\Users\%Username%\.espressif 文件夹后重试。
示例程序
ESP-IDF 示例程序位于 示例程序包 的 ESP-IDF 目录中。
| 示例程序 | 基础例程说明 |
|---|---|
| 01_AXP2101 | 通过移植后的 XPowersLib 驱动 AXP2101 获取电源相关数据 |
| 02_lvgl_demo_v9 | LVGL 演示 |
| 03_esp-brookesia | 展示完整手机风格 UI 系统,包含状态栏、导航栏、应用启动器和手势交互等组件 |
| 04_Immersive_block | 通过 QMI8658 六轴传感器采集加速度数据,驱动 LVGL 图形库渲染的随机几何图形跟随设备倾斜方向移动 |
| 05_Spec_Analyzer | 展示实时音频频谱可视化分析仪,以 64 条彩色对称频谱条 + 峰值跟踪的形式,直观呈现音频的频率分布 |
01_AXP2101
程序说明
- 本示例演示了在使用 ESP-IDF 移植 XPowersLib,通过移植后的 XPowersLib 驱动 AXP2101 获取电源相关数据
硬件连接
- 将开发板接入电脑
代码分析
i2c_init:初始化 I2C 主设备,为与其他设备(如 PMU)进行通信做准备- 配置 I2C 参数,包括设置主设备模式、指定 SDA 和 SCL 引脚、启用上拉电阻以及确定时钟频率
- 安装 I2C 驱动,将配置应用到实际的硬件上
pmu_register_read:从 PMU 的特定寄存器读取一系列字节数据- 进行参数检查,确保传入的参数有效,避免无效的读取操作
- 分两步进行 I2C 操作,先发送要读取的寄存器地址,然后读取数据。在读取过程中,根据要读取的字节长度进行不同的处理,确保数据的准确读取。同时,处理 I2C 通信过程中的错误情况,返回相应的状态码以便上层代码判断读取是否成功
运行效果
- 此示例不会点亮屏幕
- 串口监视器显示参数:芯片温度,是否正在充电,是否放电,是否待机状态,Vbus 是否连接,Vbus 是否良好,充电器状态,电池电压,Vbus 电压,系统电压,电池百分比

02_lvgl_demo_v9
程序说明
- 本示例运行 LVGL V9 的示例程序
硬件连接
- 将开发板接入电脑
运行效果
![]() | ![]() | ![]() |
|---|
03_esp-brookesia
程序说明
- 本示例展示完整手机风格 UI 系统,包含状态栏、导航栏、应用启动器和手势交互等组件
硬件连接
- 将开发板接入电脑
运行效果
04_Immersive_block
程序说明
- 本示例通过 QMI8658 六轴传感器采集加速度数据,驱动 LVGL 图形库渲染的随机几何图形跟随设备倾斜方向移动
硬件连接
- 将开发板接入电脑
代码分析
generate_random_shapes():随机图形生成- 初始化随机数种子(基于系统时间),重置图形计数
- 循环尝试生成图形,最多尝试 100 次获取有效位置(不与已生成图形重叠)
- 有效位置判定:图形中心在屏幕内,且与所有已生成图形无重叠
- 有效位置:更新 LVGL 对象位置(
lv_obj_set_pos),存入图形数组 - 无效位置:删除该 LVGL 图形对象,避免内存泄漏
perform_level_calibration():水平校准核心函数- 采集 200 个加速度样本,计算 X/Y 轴平均值作为偏差值(
accel_bias_x/y) - 检测样本波动范围(X/Y 轴范围大于 0.1 则判定校准不稳定,自动重试)
- 校准完成后设置
calibration_done标志,打印偏差信息
- 采集 200 个加速度样本,计算 X/Y 轴平均值作为偏差值(
运行效果
05_Spec_Analyzer
程序说明
- 本示例展示实时音频频谱可视化分析仪,以 64 条彩色对称频谱条 + 峰值跟踪的形式,直观呈现音频的频率分布
硬件连接
- 将开发板接入电脑
代码分析
timer_cb:LVGL 定时器回调函数,负责频谱可视化渲染- 画布与图层初始化:获取画布对象,初始化 LVGL 图层(图层渲染可提高刷新效率,避免闪屏),清屏(黑色背景)
- 基础参数计算:计算频谱条宽度(画布宽度 / 64)、画布中心 Y 坐标(用于对称绘制)、频谱条间隙
- 遍历渲染 64 条频谱条
- 图层渲染完成:调用
lv_canvas_finish_layer提交图层渲染,更新画布显示
lv_example_canvas_10:画布初始化- 静态绘制缓冲区定义:使用
LV_DRAW_BUF_DEFINE_STATIC定义 300×150 像素的 RGB565 格式绘制缓冲区 - 画布创建:创建 LVGL 画布对象,设置尺寸并居中显示,绑定静态绘制缓冲区
- 定时器创建:创建 33ms 定时器,绑定
timer_cb回调函数,并将画布对象作为用户数据传入,实现定时渲染
- 静态绘制缓冲区定义:使用
运行效果



