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 作为教学示例,所有硬件代码均基于其引脚布局。在动手实践前,建议您对照手中的开发板引脚图,确认引脚配置无误。
配置 ESP-IDF 开发环境
对于 ESP32-S3-Touch-LCD-1.46 开发板,需要使用 ESP-IDF V5.4.1 以上版本。
以下内容以 Windows 系统为例,使用 VS Code + ESP-IDF 扩展 的方式进行开发。Mac/Linux 用户请参考 官方说明。
安装 ESP-IDF 开发环境
-
前往 ESP-IDF Installation Manager 下载 ESP-IDF 安装管理器。这是乐鑫最新推出的跨平台安装工具,下文将演示如何使用其离线安装功能。
在页面中点击 Offline Installer 标签,然后在筛选栏中选择 Windows 操作系统和你要安装的版本。

确认选择无误后,点击下载按钮。浏览器将自动同时下载两个文件:一个是 ESP-IDF 离线整合包(.zst),另一个是 ESP-IDF 安装器(.exe)。

请耐心等待两个文件下载完成。
-
下载完成后,双击运行 ESP-IDF 安装器(eim-gui-windows-x64.exe)。
启动后,可在右上角将界面语言切换为中文。

安装工具会自动检测同一目录下是否存在离线整合包。点击 从存档安装。

接下来,选择安装路径。建议使用默认路径;若需自定义,请确保路径中不包含中文或空格。确认无误后,点击 开始安装。

-
当看到如下界面时,表示 ESP-IDF 已安装成功。

-
建议同时安装驱动程序。点击 完成安装,然后点击 安装驱动程序。

安装 Visual Studio Code 与 ESP-IDF 扩展
-
下载并安装 Visual Studio Code。
-
安装时建议勾选 通过 Code 打开操作添加到 Windows 资源管理器文件上下文菜单,以便快速打开项目文件夹。
-
在 VS Code 中,点击侧边活动栏中的
扩展图标(或使用快捷键 Ctrl + Shift + X)打开 扩展 视图。
-
在搜索框中输入 ESP-IDF,找到 ESP-IDF 扩展并点击安装。

-
当 ESP-IDF 扩展版本 ≥ 2.0 时,扩展会自动检测并识别上述步骤中安装的 ESP-IDF 环境,无需手动配置。
示例程序
ESP-IDF 示例程序位于 示例程序包 的 ESP-IDF 目录中。
| 示例程序 | 基础例程说明 |
|---|---|
| 01_ESP32-S3-Touch-LCD-1.46-Test | 测试板载设备功能 |
01_ESP32-S3-Touch-LCD-1.46-Test
程序说明
- 本示例演示了板载各个设备的功能,页面一显示 SD Card,Flash Size,Battery Voltage 等参数,页面二为音乐播放界面;另外,此示例增加语音识别功能。
硬件连接
- 将 SD 卡插入开发板中
- 将开发板接入电脑
代码解释
Driver_Init():初始化硬件、驱动和系统所需的资源,并创建一个任务来循环执行硬件驱动- 硬件初始化:
Driver_Init()负责初始化多个硬件模块,如电源管理、时钟、I2C 总线、外部 I/O、传感器等 - 任务创建:
xTaskCreatePinnedToCore()创建了一个 FreeRTOS 任务Driver_Loop,并将其绑定到核心 0。这意味着Driver_Loop函数将不断循环执行,处理硬件的相关操作。此任务将与其他任务并发运行,有助于硬件驱动的实时性 - 模块化设计:初始化函数将各硬件初始化分散到不同的模块,易于维护和扩展。如果有新硬件需要支持,只需在这里添加初始化代码即可
- 硬件初始化:
Driver_Loop():这个函数在 FreeRTOS 任务中循环运行,定期执行各硬件驱动的工作。它是大部分硬件驱动操作的核心部分- 循环执行硬件驱动:
Driver_Loop()中定期调用多个硬件驱动的循环函数,如QMI8658_Loop()、PCF85063_Loop()、BAT_Get_Volts()和PWR_Loop(),这些都是实时执行的硬件操作QMI8658_Loop():处理与 QMI8658 传感器的交互,读取传感器数据PCF85063_Loop():处理 PCF85063 时钟模块,更新时间BAT_Get_Volts():获取当前电池电压,以确保设备电池电量满足要求PWR_Loop():执行电源管理任务,监控电源状态、控制电源的开启或关闭
- 循环执行硬件驱动:
- 定时任务:通过
vTaskDelay(pdMS_TO_TICKS(100)),Driver_Loop()函数每 100 毫秒延时一次,这有助于确保任务不会占用过多 CPU 资源,也避免对硬件进行过于频繁的操作 - 删除任务:
vTaskDelete(NULL)是用来删除当前任务的,但由于while(1)是一个死循环,实际上这行代码永远不会执行
运行效果
-
LCD 屏幕显示


-
LCD 屏幕显示参数说明
参数 功能 说明 SD Card 显示 SD 卡的大小 连接 SD 卡,若识别失败请将 SD 卡格式化为 FAT32 格式(首次识别失败请等待一会后复位下再查看) Flash Size 显示 Flash 大小 当前板载 16MB Flash Battery Voltage 电池电压 连接电池时可检测到电池电压 Angular deflection 显示板子角度偏移 显示三个方向的偏移 RTC Time 显示 RTC 时间 显示当前 RTC 时间
RTC 时间与当前时间不一致,是因为掉电状态下并不能留存数据,如需要保持 RTC 时间正常,则需连接 RTC 电池并更新 RTC 时间Wireless scan 显示扫描到的 WIFI 个数 扫描结束会在末尾显示 ..OK Backlight brightness 亮度滑动条 调节屏幕亮度 -
页面 2 为播放 SD 卡根目录下的 mp3 音频的 UI 页面
-
本程序默认启用语音识别,唤醒词为 “hi esp”,唤醒后,背光变暗后即可说出指令(背光未变暗则表示未被唤醒,识别要求较为严格,发音需要标准,语速放缓)
-
以下提供几种格式的 MIC 测试音频(请注意,每次 hi esp 唤醒失败的话请重新将音频调至该次唤醒词播放处重新播放)
-
请不要在使用喇叭播放音频时进行语音识别
-
测试音频中之所以播放两次唤醒词,是由于当前固件版本首次唤醒需要聚焦设备(比喻),并且当前固件并不允许关闭该功能
// 指令
Turn on the backlight
Turn off the backlight
Backlight is brightest
Backlight is darkest
切换为中/英文识别模型
- 环境初始状态默认为英文识别环境,按照以下步骤可切换为中文识别模型或英文识别模型
- 【切换为中/英文识别模型】
- 若工程中存在以下两个文件,则删除这两个文件
- 进入文件 sdkconfig.defaults,找到此处。

- 使用 "#" 注释①处则切换为英文识别模型
- 使用 "#" 注释②处则切换为中文识别模型
- 若工程中存在以下两个文件,则删除这两个文件
- 【切换为中/英文识别模型】
生成语音控制指令
环境准备
- 检查电脑是否有 Python 环境
- 打开命令行:win+r ->输入 cmd

- ①. 输入
python --version出现 Python 版本号,则表示已安装 - ②. 输入
where python查看 Python 安装位置- C 盘下的 Python 环境为安装 VS Code 时自动安装的 Python 环境
- E 盘下是以下步骤用到的 Python 环境
- ①. 输入
若没有安装环境请查看 Python 环境安装教程,已安装请继续
- 命令行输入
pip install g2p_en安装 g2p_en 包 - 安装 资源包 放在对应用户的
C:\Users\用户名、AppData\Roaming路径下,双击解压文件 - 命令行输入
pip install pypinyin安装 pypinyin 库
生成中文拼音
- 下载 中文指令生成文件
- 命令行切换路径至中文指令生成文件夹下(路径因人而异,以下仅参考)
cd /d E:\download\Generate_Chinese_command - 命令行执行
multinet_pinyin.py生成中文拼音例:python multinet_pinyin.py "要转为拼音的中文"python multinet_pinyin.py "你好微雪电子"
生成英文音素
- 下载 英文指令生成文件
- 命令行切换路径至英文指令生成文件夹下(路径因人而异,以下仅参考)
cd /d E:\download\Generate_English_command - 命令行执行 gen_sr_commands.py 生成音素指令
例:
python gen_sr_commands.py "要转为音素的英文"python gen_sr_commands.py "hello waveshare"
指令修改
- Arduino 下

- ESP-IDF 下
- 中文指令

- 英文指令

- 中文指令