跳到主要内容

ESP-IDF

本章节包含以下部分,请按需阅读:

ESP-IDF 入门教程

初次接触 ESP32 ESP-IDF 开发,想要快速上手?我们为您准备了一套通用的 入门教程

请注意:该教程使用 ESP32-S3-Zero 作为教学示例,所有硬件代码均基于其引脚布局。在动手实践前,建议您对照手中的开发板引脚图,确认引脚配置无误。

配置 ESP-IDF 开发环境

信息

ESP32-S3-AUDIO-Board 开发板,需要使用 ESP-IDF V5.5.1 以上版本。

备注

以下内容以 Windows 系统为例,使用 VS Code + ESP-IDF 扩展 的方式进行开发。Mac/Linux 用户请参考 官方说明

安装 ESP-IDF 开发环境

  1. 前往 ESP-IDF Installation Manager 下载 ESP-IDF 安装管理器。这是乐鑫最新推出的跨平台安装工具,下文将演示如何使用其离线安装功能。

    在页面中点击 Offline Installer 标签,然后在筛选栏中选择 Windows 操作系统和你要安装的版本。

    下载 EIM 和整合包

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

    下载 EIM 和整合包2

    请耐心等待两个文件下载完成。

  2. 下载完成后,双击运行 ESP-IDF 安装器(eim-gui-windows-x64.exe)

    启动后,可在右上角将界面语言切换为中文。

    切换 EIM 语言

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

    自动检测整合包

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

    选择安装路径
  3. 当看到如下界面时,表示 ESP-IDF 已安装成功。

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

    用 ESP-IDF 安装管理器安装驱动

安装 Visual Studio Code 与 ESP-IDF 扩展

  1. 下载并安装 Visual Studio Code

  2. 安装时建议勾选 通过 Code 打开操作添加到 Windows 资源管理器文件上下文菜单,以便快速打开项目文件夹。

  3. 在 VS Code 中,点击侧边活动栏中的 扩展图标 扩展图标(或使用快捷键 Ctrl + Shift + X)打开 扩展 视图。

  4. 在搜索框中输入 ESP-IDF,找到 ESP-IDF 扩展并点击安装。

    在 VS Code 中搜索并安装 ESP-IDF 扩展

  5. ESP-IDF 扩展版本 ≥ 2.0 时,扩展会自动检测并识别上述步骤中安装的 ESP-IDF 环境,无需手动配置。

示例程序

ESP-IDF 示例程序位于 示例程序包ESP-IDF 目录中。

示例程序基础例程说明
01_factory出厂程序,运行语音唤醒和识别,同时按键控制播放 MP3 及灯光控制
02_esp_sr运行 ESP-SR 例程,实现语音唤醒和识别
03_mp3_play播放 TF 内的 MP3
04_lvgl9_3_example运行 LVGL9.3 demo

01_factory

程序说明

  • 本示例集成语音唤醒与识别功能,支持通过按键控制 MP3 播放,同时搭配 RGB 灯效联动
  • 程序需要带 MP3 文件的 SD 卡才可按键控制播放 MP3。

硬件连接

  • 将 SD 卡插入开发板中
  • 将开发板接入电脑

代码分析

  • esp_board_init:初始化 I2C、I2S、ES8311 以及 ES7210 等外设
    • 配置 I2C 参数,包括设置主设备模式、指定 SDA 和 SCL 引脚、启用上拉电阻以及确定时钟频率
    • 配置 I2S 参数,将配置应用到实际的硬件上
    • 初始化 ES8311 播音 codec
    • 初始化 ES7210
  • tca9555_driver_init:tca9555_driver_init():
    • 将 tca555 挂载到 I2C 总线设备上
    • 配置 IO 口输入输出
  • esp_sdcard_init:挂载 TF 卡
  • Speech_Init:初始化 esp-sr,实现语音唤醒和识别:
    • 创建两个任务,一个给 ESP-SR 模型输入 I2S 数据,一个是解析识别结果
    • Speech_register_callback() 是注册识别结果回调函数,用户可根据需求定义回调函数的处理逻辑,同一识别结果可对应多种业务操作,无需修改语音识别模块本身。
  • Audio_Play_Init:初始化 MP3 播放器,实现播放、暂停、恢复、停止、调节音量等功能
  • RGB_Example:WS2812 初始化及相关演示效果
  • key_module_init:初始化按键,实现短按及长按
    • key_register_callback() 为按键注册回调函数,处理用户逻辑
  • Search_mp3_Music:寻找 TF 卡根目录下的 MP3, 并存储文件名及 MP3 文件数量

运行效果

唤醒词以及识别命令
  • 唤醒词:Hi,Esp
  • 命令词:
  1. 灯光变成红色
  2. 灯光变成蓝色
  3. 灯光变成绿色
  4. 灯光变成白色
  • 此示例不会点亮屏幕
  • 本程序默认启用语音识别,唤醒词为 "hi esp"(识别要求较为严格,发音需要标准,语速放缓)
  • 以下提供测试音频 MIC 测试音频(请注意,每次 hi esp 唤醒失败的话请重新将音频调至该次唤醒词播放处重新播放)
  • 测试音频中之所以播放两次唤醒词,是由于当前固件版本首次唤醒需要聚焦设备(比喻),并且当前固件并不允许关闭该功能
  • K2 按键可以控制 MP3 播放,暂停
  • k1 按键短按增加音量,长按上一首播放
  • K3 按键短按减小音量,长按下一首播放
  • 播放时灯光会循环亮起,识别到唤醒词 "hi,esp" 之后灯光开始闪烁,6 秒内无任何识别词将超时退出识别

02_esp_sr

程序说明

  • 本示例运行 ESP-SR 示例程序,演示语音唤醒和语音识别功能

硬件连接

  • 将开发板接入电脑

运行效果

唤醒词以及识别命令
  • 唤醒词:Hi,Esp
  • 命令词:
  1. Turn on the backlight
  2. Turn off the backlight
  3. Backlight is brightest
  4. Backlight is darkest
  • 此示例不会点亮屏幕
  • 打开串口监视器
  • 本程序默认启用语音识别,唤醒词为 “hi esp”(识别要求较为严格,发音需要标准,语速放缓)
  • 以下提供测试音频 MIC 测试音频(请注意,每次 hi esp 唤醒失败的话请重新将音频调至该次唤醒词播放处重新播放)

03_mp3_play

程序说明

  • 本示例开机扫描 TF 卡根目录下的 MP3 文件,并播放

硬件连接

  • 将 SD 卡插入开发板中
  • 将开发板接入电脑

运行效果

  • 此示例不会点亮屏幕
  • 会自动扫描 TF 根目录下的 MP3 文件

04_lvgl9_3_example

程序说明

  • 本示例演示了板载各个设备的功能,屏幕 2 显示 SD Card,Flash Size 等参数,屏幕 1 为音乐播放界面;另外,此示例增加语音识别功能。
  • 程序仅在连接带 MP3 文件的 SD 卡、屏幕和摄像头时才可完整运行

硬件连接

  • 将 SD 卡插入开发板中
  • 将开发板接入电脑
  • 接入 1.47 inch lcd 屏幕

代码分析

  • lcd_driver_init():初始化屏幕
  • touch_driver_init(): 初始化触摸
  • lvgl_driver_init():初始化 LVGL
  • Camera_Driver_Init():初始化摄像头配置参数

运行效果

LCD 屏幕显示参数说明(点击展开)
参数功能说明
SD Card显示 SD 卡的大小连接 SD 卡,若识别失败请将 SD 卡格式化为 FAT32 格式(首次识别失败请等待一会后复位下再查看)
Flash Size显示 Flash 大小当前板载 16MB Flash
RTC Time显示 RTC 时间显示当前 RTC 时间 RTC 时间与当前时间不一致,是因为掉电状态下并不能留存数据,如需要保持 RTC 时间正常,则需连接 RTC 电池并更新 RTC 时间
Backlight brightness亮度滑动条调节屏幕亮度
  • 页面 2 为播放 SD 卡根目录下的 mp3 音频的 UI 页面
  • 本程序默认启用语音识别,唤醒词为 "hi esp",唤醒后,背光变暗后即可说出指令(背光未变暗则表示未被唤醒,识别要求较为严格,发音需要标准,语速放缓)
  • 以下提供几种格式的 MIC 测试音频(请注意,每次 hi esp 唤醒失败的话请重新将音频调至该次唤醒词播放处重新播放)
  • 测试音频中之所以播放两次唤醒词,是由于当前固件版本首次唤醒需要聚焦设备(比喻),并且当前固件并不允许关闭该功能