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-ePaper-3.97 ,建议 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_E-Paper_Example | 3.97inch e-Paper 墨水屏幕示例程序 |
| 02_Mic_test | 扬声器播放麦克风录到的声音 |
| 03_Music | 挂载 SD 卡,读取播放 SD 卡中的音乐 |
| 04_SD_Test | 挂载 SD 卡,读取 SD 卡中的图片并刷新显示 |
| 05_QMI8658A | 六轴陀螺仪例程 |
| 06_I2C_PCF85063 | RTC 例程 |
| 07_I2C_SHTC3 | 温湿度传感器例程 |
| 08_ESP32-S3_e-Paper-3.97 | 集成了文件浏览、时钟、日历、闹钟、天气、网络配置、音频播放、电子阅读器功能 |
01_E-Paper_Example
程序说明
- 本示例演示了 3.97 寸墨水屏 ESP-IDF 本地例程,实现墨水屏初始化清屏,显示图片,绘制基础图形、文字,局部刷新动态显示时间。
硬件连接
- 将开发板接入电脑
代码解释
-
显示预设图片 :
#if 1
ESP_LOGI(TAG,"2.show BMP");
EPD_Init_Fast();
EPD_Display(gImage_image);
vTaskDelay(pdMS_TO_TICKS(2000));
#endif -
绘制基础图形、中英文文字、数字,并刷新显示 :
#if 1
ESP_LOGI(TAG,"3.Paint_NewImage");
EPD_Init();
Paint_NewImage(Image_Mono, EPD_WIDTH, EPD_HEIGHT, 0, WHITE);
Paint_SelectImage(Image_Mono);
Paint_Clear(WHITE);
// Drawing on the image
Paint_DrawPoint(5, 10, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT);
Paint_DrawPoint(5, 25, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT);
Paint_DrawPoint(5, 40, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT);
Paint_DrawPoint(5, 55, BLACK, DOT_PIXEL_4X4, DOT_STYLE_DFT);
Paint_DrawLine(20, 10, 70, 60, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawLine(70, 10, 20, 60, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawLine(170, 15, 170, 55, BLACK, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
Paint_DrawLine(150, 35, 190, 35, BLACK, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
Paint_DrawRectangle(20, 10, 70, 60, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
Paint_DrawRectangle(85, 10, 130, 60, BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawCircle(170, 35, 20, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
Paint_DrawCircle(170, 85, 20, BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawNum(5, 180, 123456789, &Font24, BLACK, WHITE);
Paint_DrawString_CN(5, 100,"你好 abc", &Font16_UTF8, BLACK, WHITE);
Paint_DrawString_CN(5, 130, "微雪电子", &Font24_UTF8, WHITE, BLACK);
EPD_Display_Base(Image_Mono);
vTaskDelay(pdMS_TO_TICKS(2000));
#endif
运行效果
- 墨水屏刷新显示

02_Mic_test
程序说明
- 演示如何获取麦克风的数据,然后再通过扬声器播放。
硬件连接
- 将开发板接入电脑
代码分析
i2c_master_Init();:初始化 I2C 总线。user_ui_init();:初始化全局 ui。user_button_init();:初始化 audio 接口。
运行效果
-
屏幕无显示效果
-
长按 BOOT 按键即可进入录音模式,对着 MIC 说话,3 秒后自动结束
-
单击 BOOT 按键,播放刚刚录的声音,(如果没有录音的情况下,播放的声音会很刺耳)
-
串口打印:

03_Music
程序说明
- 挂载 SD 卡,读取播放 SD 卡中的音频
硬件连接
- 将开发板接入电脑
- 喇叭接入 SPK 接口
代码分析
_sdcard_init();:初始化 SD 卡并读取 SD 卡音频文件。i2c_master_init();:初始化 I2C 总线,为 ES8311 音频编解码器的配置指令传输提供通信链路。audio_player_play(audio_fp);:启动音频播放器,读取打开的 MP3 文件并通过 ES8311 驱动扬声器播放。
运行效果
- 屏幕无显示效果
- 喇叭播放音频
04_SD_Test
程序说明
- 该例程通过读取 SD 卡中的 BMP 图片并在墨水屏上刷新显示
硬件连接
- 将开发板接入电脑
- 将当前程序 bmp 文件夹放入 SD 卡根目录,插入 SD 卡模块
代码分析
_sdcard_init();:初始化 SD 卡并读取 SD 卡音频文件。epaper_port_init();:初始化墨水屏底层硬件端口(引脚、通信总线等)EPD_Init();/EPD_Clear();:初始化墨水屏驱动参数,清屏显示白色背景GUI_ReadBmp("/sdcard/bmp/100x100.bmp", 50, 50);/EPD_Display_Fast(BlackImage);:读取 SD 卡中 BMP 图片,快速刷新显示图片GUI_ReadBmp_4Gray("/sdcard/bmp/3in97_4Gray.bmp", 0, 0);/EPD_Display_4Gray(BlackImage);:读取并显示 SD 卡中 4 灰度 BMP 图片
运行效果
-
读取显示 sd 卡图片



05_QMI8658A
程序说明
- 该例程通过读取 SD 卡中的 BMP 图片并在墨水屏上刷新显示
硬件连接
- 将开发板接入电脑
- 将当前程序 bmp 文件夹放入 SD 卡根目录,插入 SD 卡模块
代码分析
epaper_port_init();/EPD_Init();/EPD_Clear();绘制数值后调用 EPD_Display_Partial 局部刷新墨水屏:初始化墨水屏底层硬件端口、驱动参数,清屏显示白色背景i2c_master_init();:初始化 I2C 总线,为 QMI8658 传感器的配置和数据读取提供通信链路xTaskCreate(qmi8658_test_task, "qmi8658_test_task", 4096, i2c_bus_handle, 5, NULL);:创建 FreeRTOS 任务执行 QMI8658 传感器数据读取逻辑qmi8658_is_data_ready(&dev, &ready);:检测传感器数据是否就绪,仅当数据就绪时读取数据。qmi8658_read_sensor_data(&dev, &data);:读取传感器的加速度、陀螺仪、温度、时间戳数据,串口打印数据draw_qmi8658_data_to_epaper(&data);:绘制数值后调用EPD_Display_Partial局部刷新显示数据
运行效果
-
墨水屏局部刷新显示六轴陀螺仪传感器数据

06_I2C_PCF85063
程序说明
- 该示例使用板载 PCF85063 RTC 芯片,实现 3.97 寸墨水屏结合 I2C 接口 RTC 实时时钟模块动态显示功能
硬件连接
- 将开发板接入电脑
代码分析
epaper_port_init();/EPD_Init();/EPD_Clear();绘制数值后调用 EPD_Display_Partial 局部刷新墨水屏:初始化墨水屏底层硬件端口、驱动参数,清屏显示白色背景i2c_master_init();:初始化 I2C 总线,为 PCF85063 RTC 模块的配置和时间读取提供通信链路。PCF85063_init();:初始化 PCF85063 RTC 模块,完成时钟寄存器默认配置。PCF85063_GetTime();/PCF85063_SetTime();:读取 RTC 当前时间,设置默认时间。xTaskCreate(rtc_test_task, "rtc_display", 4096, NULL, 5, NULL);:创建 FreeRTOS 任务执行 RTC 时间读取和显示逻辑display_time_on_epaper():绘制数值后调用EPD_Display_Partial局部刷新显示数据
运行效果
-
墨水屏局部刷新显示时间

07_I2C_SHTC3
程序说明
- 该示例使用板载 SHTC3 温湿度传感器,实现 3.97 寸墨水屏动态显示温湿度数据功能
硬件连接
- 将开发板接入电脑
代码分析
epaper_port_init();/EPD_Init();/EPD_Clear();绘制数值后调用 EPD_Display_Partial 局部刷新墨水屏:初始化墨水屏底层硬件端口、驱动参数,清屏显示白色背景i2c_master_init();:初始化 I2C 总线。i2c_shtc3_init();:初始化 SHTC3 温湿度传感器 模块。xTaskCreatePinnedToCore(i2c_SHTC3_loop_task, "i2c_SHTC3_loop_task", 3 * 1024, NULL , 2, NULL,0);:创建 FreeRTOS 任务i2c_SHTC3_loop_task():获取温湿度数值并打印,调用EPD_Display_Partial局部刷新显示数据
运行效果
-
墨水屏局部刷新显示温湿度

08_ESP32-S3_e-Paper-3.97
程序说明
- 该示例集成了文件浏览、时钟、日历、闹钟、天气、网络配置、音频播放、电子阅读器 8 大核心功能,实现墨水屏菜单化交互,按钮选择控制
硬件连接
- 使用 USB 线将开发板接入电脑
代码分析
app_main()中完成 NVS、SD 卡、I2C 外设(传感器 / 时钟 / 音频)、按键、墨水屏的初始化,从 NVS 加载配置(WiFi 使能、工作模式),根据模式创建对应任务;void user_Task(void *arg)负责绘制墨水屏主菜单(8 个功能图标 + 文字)、响应按键事件(上下选择、确认进入子页、全局刷新、关机)、管理墨水屏低功耗(5 秒无操作睡眠、10 分钟无操作软关机)、刷新顶部状态栏(时间 / 电量 / WiFi 状态);file_browser_task();文件浏览模块page_clock_show();时钟模块page_calendar_show();日历模块page_alarm_menu();闹钟模块page_weather_city_select();天气模块page_handle_network_key_event();网络配置模块page_audio_main();音频播放模块page_fiction_file();电子阅读器模块
运行效果
-
烧录程序完成后进入配置网络界面,通过连接墨水屏显示的 wifi 名称进行网络配置

-
网络配置完成进入主页面,通过 拨轮按键与 BOOT 和 PWR 侧边按钮控制

-
文件浏览模块
- 读取 SD 卡所有目录文件

- 读取 SD 卡所有目录文件
-
时钟模块
- 刷新显示温湿度,时间,电池电量

- 刷新显示温湿度,时间,电池电量
-
日历模块
- 刷新显示日历

- 刷新显示日历
-
闹钟模块
-
闹钟模块主界面,可设置闹钟提醒

-
通过拨轮按键控制(单击确认,上下拨动选择闹钟/设置时间,双击退出模块)
-
单击拨轮按键,选择闹钟,可以进行闹钟设置

-
通过拨轮按键进行闹钟设置(单击确认设置时/分/开关/保存,上下拨动设置时间)

-
双击拨轮按键/boot 按键退出模块
-
-
-
天气模块(需要先开启 WIFI 连接)
- 天气模块主界面,显示日期,温湿度,和近 4 天的天气信息

- 天气模块主界面,显示日期,温湿度,和近 4 天的天气信息
-
网络配置模块
- 控制 WIFI 开启/关闭,显示连接 WIFI 的详细信息

- 控制 WIFI 开启/关闭,显示连接 WIFI 的详细信息
-
音频播放模块
- 通过拨轮按键控制选择,可播放内置音频,TF 卡音频和录音

- 播放音频

- 录音,保存到 TF 卡中

- 通过拨轮按键控制选择,可播放内置音频,TF 卡音频和录音
-
电子阅读器模块
-
电子阅读器模块主界面

-
单击确认读取 TF 卡的。txt 文件,上下拨动拨轮按键控制翻页

-
上下拨动拨轮按键两次,进入字体设置界面

-
单击拨轮按键/boot 按键,进入书签管理,集成增加书签和读取书签功能

-