133浏览
查看: 133|回复: 0

[ESP8266/ESP32] ESP32-S3 AI CAM移植小智手把手教程

[复制链接]
本帖最后由 岑剑伟 于 2025-5-15 16:20 编辑

    ESP32-S3 AI CAM移植小智手把手教程

    ESP32-S3 AI 智能摄像头模块 专为智能家居和物联网打造。它集成多种硬件,如 OV3660 摄像头、麦克风等。具备强大 AI 处理能力,支持 TensorFlow Lite 等技术,可实现边缘图像与语音识别。能在黑暗环境全天候监控,应用于智能安防、家庭看护等多个场景。本教程通过硬件适配指南 + 移植流程 + 编译方法的完整链条,不仅解决了 “如何在特定板卡上运行小智机器人” 的具体问题,更提供了一套可复用的小智移植构建方法,对推动边缘计算技术的普及、降低智能设备开发成本、激发创新应用具有实际价值。
ESP32-S3 AI CAM移植小智手把手教程图1


一、硬件资源配置
  ESP32-S3 采用 Xtensa® 32 位 LX7 双核处理器,主频高达 240MHz,具备强大的运算能力,可满足多种复杂任务需求,如 AI 运算、图像和语音处理等。内存:内置 512KB SRAM、384KB ROM 存储空间,模组搭配 16MB Flash 和 8MB PSRAM,可存储大量数据和程序,为运行复杂应用提供了充足的内存空间。

    1.摄像头组件

◦传感器:选用 OV3660 传感器,200W 像素,支持可见光和 940nm 红外感光,能适应不同光照环境,在白天和夜晚都可采集图像数据。

◦镜头参数:可视角度达 160°,焦距 0.95,光圈 2.0,畸变 < 8%,可获取大视角图像,且图像质量较高,为图像识别和监控应用提供清晰图像源。

◦红外补光灯:由 GPIO47 控制,在弱光或黑暗环境下自动开启,配合红外感光功能,实现夜视监控。

     2.音频组件

◦麦克风:集成 I2S PDM 麦克风,用于采集声音信号,实现语音识别、录音等功能。

◦功放与喇叭接口:搭载 MAX98357 I2S 功放芯片,通过 MX1.25 - 2P 喇叭接口连接外部喇叭,实现语音播放、语音对话等功能。

3.其他组件

◦环境光传感器:LTR - 308 环境光传感器(ALS),通过 GPIO8 和 GPIO9 与处理器相连,用于检测环境光强度,获取环境光数据,为自动调节摄像头参数或其他与环境光相关的功能提供依据。

◦功能按键:设有复位按键(RST)和 BOOT 按键(GPIO0),复位按键用于重启板卡,BOOT 按键在启动过程中用于进入特定的启动模式,方便程序烧录和系统调试。

◦SD 卡槽:支持插入 SD 卡,用于扩展存储容量,可存储大量图像、视频、音频数据或其他文件。

◦板载 LED 灯:由 GPIO3 控制,可用于指示板卡工作状态,如烧录状态、运行状态等 。
     项目移植之前需要清晰理解板卡硬件组成,引脚配置参数。

音频解码模块

功能模块

引脚名称

GPIO

功能描述

MIC

PDM_CLK

38

PDM 麦克风时钟信号,用于同步麦克风数据传输

MIC

PDM_DATA

39

PDM 麦克风数据信号,传输采集的音频数据

MAX98357

BCLK

45

MAX98357 音频芯片的位时钟,用于音频数据的位同步

MAX98357

LRCLK

46

MAX98357 音频芯片的左右声道时钟,区分左右声道音频数据

MAX98357

DIN

42

MAX98357 音频芯片的音频数据输入引脚,输入音频信号

MAX98357

GAIN

41

MAX98357 音频芯片的增益控制引脚,调节音频增益

MAX98357

MODE

40

MAX98357 音频芯片的工作模式设置引脚,设置芯片工作模式

CAM 模块

引脚名称

GPIO

功能描述

XCLK

5

摄像头时钟信号,为摄像头工作提供时钟基准

Y9

4

摄像头图像数据输出引脚 7,传输图像数据

Y8

6

摄像头图像数据输出引脚 6,传输图像数据

Y7

7

摄像头图像数据输出引脚 5,传输图像数据

Y6

14

摄像头图像数据输出引脚 4,传输图像数据

Y5

17

摄像头图像数据输出引脚 3,传输图像数据

Y4

21

摄像头图像数据输出引脚2,传输图像数据

Y3

18

摄像头图像数据输出引脚 1,传输图像数据

Y2

16

摄像头图像数据输出引脚 0,传输图像数据

VSYNC

1

摄像头垂直同步信号,用于图像垂直方向的同步

HREF

2

摄像头水平参考信号,用于图像水平方向的同步

PCLK

15

摄像头像素时钟信号,为像素数据传输提供时钟

SIOD

8

可能是 I2C 数据引脚(备用或复用)

SIOC

9

可能是 I2C 时钟引脚(备用或复用)
其他模块

功能模块

引脚名称

GPIO

功能描述

ALS

SDA

8

用于 ALS(环境光传感器)的 I2C 数据引脚,传输传感器数据

ALS

SCL

9

用于 ALS(环境光传感器)的 I2C 时钟引脚,为 I2C 通信提供时钟

ALS

INT

48

ALS(环境光传感器)中断引脚,传感器状态变化时产生中断信号

SD

MO

11

SD 卡接口的主输出引脚,用于 SD 卡向主控传输数据

SD

MI

13

SD 卡接口的主输入引脚,主控向 SD 卡传输数据

SD

SCLK

12

SD 卡接口的串行时钟引脚,为 SD 卡通信提供时钟

SD

CS

10

SD 卡接口的片选引脚,选中 SD 卡进行通信

Other

LED

3

通用 LED 控制引脚,可控制 LED 亮灭

Other

IR

47

红外功能引脚,用于红外相关功能(如红外遥控)

Other

BOOT

0

启动相关引脚,可能用于设置启动模式等

Other

SDA

8

可能用于其他 I2C 设备的数据传输引脚

Other

SCL

9

可能用于其他 I2C 设备的时钟传输引脚

Other

TX

43

通用异步收发传输器(UART)发送引脚,用于数据发送

Other

RX

44

通用异步收发传输器(UART)接收引脚,用于数据接收


二、移植小智板卡文件构建

    基于 ESP32-S3 AI CAM 板卡核心参数完成小智聊天机器人移植的教程,包括硬件适配、音频驱动、系统配置、编译优化等方面内容。

1.准备工作

(1)在vscode代码编辑器里安装好 ESP-IDF 开发环境,版本需满足小智项目要求(如≥5.3)。

(2)用git工具克隆最新版本的小智源码到本地。(github.com/78/esp32-xiaozhi)

2.硬件适配

◦参看移植小智必须的硬件引脚参数,用于设置board文件夹里的config文件。如最关键的音频解码芯片及引脚参数。


    扬声器模块采用MAX98357A功率放大器,支持PCM/TDM输入,无需外部MCLK信号,具备低EMI、高效能(92%效率)、抗干扰等特性,适配智能音箱等场景。

MAX98357 I2S 功放芯片管脚定义

• LRC(Left/Right Clock):左右声道时钟信号,用于同步左右声道的音频数据传输。

• DIN(Data IN):实际上是音频数据输出引脚,用于输出音频数据。

• BCLK(Bit Clock):位时钟信号,用于同步音频数据的每一位传输。

• GAIN(增益控制):用于调节音频信号的放大倍数,本案例中没作相应的处理。

•MODE       音频芯片的工作模式设置引脚,设置芯片工作模式,本案例中没作相应的处理。

• GND(Ground):接地引脚,用于电路的接地连接。

• Vin:电源输入引脚,工作电压范围是 2.5V 到 5.5V。

模块特性

• 输入电压范围:2.5V 到 5.5V。

• 默认增益:9dB。

• 输出模式:默认输出为左右声道混合输出((L+R)/2)。

• 适用负载:支持 4Ω 到 8Ω 的扬声器,最大输出功率为 3W。

   根据产品的音频解码硬件的参数 MAX98357 I2S 功放芯片、I2S PDM麦克风,没有其他辅助解码芯片的参与,因此,采用NoAudioCodecSimplexPdm 方案即可。 解决完了音频解码方案,其他按照套路即可,因为这款摄像头也没有屏幕,提供的扩展引脚也只能支持uart模式,没法外接oled屏幕,因此 较为简单,非常适合练手。

config.h 文件
  1. #ifndef _BOARD_CONFIG_H_
  2. #define _BOARD_CONFIG_H_
  3. #include <driver/gpio.h>
  4. #define AUDIO_INPUT_SAMPLE_RATE  16000
  5. #define AUDIO_OUTPUT_SAMPLE_RATE 24000
  6. #define AUDIO_I2S_MIC_GPIO_WS   GPIO_NUM_41
  7. #define AUDIO_I2S_MIC_GPIO_SCK  GPIO_NUM_40
  8. #define AUDIO_I2S_MIC_GPIO_DIN  GPIO_NUM_42
  9. #define AUDIO_I2S_SPK_GPIO_DOUT GPIO_NUM_18
  10. #define AUDIO_I2S_SPK_GPIO_BCLK GPIO_NUM_17
  11. #define AUDIO_I2S_SPK_GPIO_LRCK GPIO_NUM_16
  12. #define BUILTIN_LED_GPIO        GPIO_NUM_45
  13. #define BOOT_BUTTON_GPIO        GPIO_NUM_10
  14. #define TOUCH_BUTTON_GPIO       GPIO_NUM_NC
  15. #define VOLUME_UP_BUTTON_GPIO   GPIO_NUM_15
  16. #define VOLUME_DOWN_BUTTON_GPIO GPIO_NUM_9
  17. #define RESET_NVS_BUTTON_GPIO     GPIO_NUM_10
  18. #define RESET_FACTORY_BUTTON_GPIO GPIO_NUM_NC
  19. #endif // _BOARD_CONFIG_H_
复制代码


把所有适配好的板卡内容放入最新版本的小智项目 boards文件夹下面,关键的一步完成了。

ESP32-S3 AI CAM移植小智手把手教程图2

三、适配重要参数修改

项目main文件夹下CMakeLists.txt文件修改:

(1)因为摄像的音频方案是现成的不需要在CMakeLists.txt文件里整太多东西。

# 根据 BOARD_TYPE 配置添加对应的板级文件 处添加:

在dfrobot之前已有产品k10 附近添加:
  1. elseif(CONFIG_BOARD_TYPE_DF_ESP32_S3_AI_CAM)
  2. set(BOARD_TYPE "df-esp32-s3-ai-cam")
复制代码


CONFIG_BOARD_TYPE_DF_ESP32_S3_AI_CAM 这个名字最好经过深思熟虑,不要过后自己都不知道,当然也要让别人好知道。 “df-esp32-s3-ai-cam” 就是我们板卡支持的文件夹名字,也不可以随意。如果想发布 还要经虾哥审核的,还要遵循虾哥要求执行,但不建议去发布,因为我们自己玩就可以了,不要给虾哥添乱,系统已经很大了,加入虾哥自动升级是稍微方便一点,只要自己会编译,主动权还是在自己手里的。
ESP32-S3 AI CAM移植小智手把手教程图3

(2)项目main目录Kconfig.projbuild文件修改:

在choice BOARD_TYPE

    prompt "Board Type" 之下  

  1. config BOARD_TYPE_DF_ESP32_S3_AI_CAM        
  2. bool "DFRobot ESP32-S3 AI智能摄像头模块"
复制代码

这个里的BOARD_TYPE_DF_ESP32_S3_AI_CAM 需要跟上面 CMakeLIists.txt 里  config BOARD_TYPE_DF_ESP32_S3_AI_CAM 名字一致。确保menuconfig里增加“DFRobot ESP32-S3 AI智能摄像头模块”选项。

ESP32-S3 AI CAM移植小智手把手教程图4

四、 系统配置与编译

•编译环境配置:打开 SDK 配置编辑器(menuconfig),选择 “DFRobot ESP32-S3 AI智能摄像头模块” 板卡选项(若之前配置正确会出现)。根据板卡的 Flash 参数(16MB Flash),配置 Flash 模式(如 QIO)、Flash 采样模式、Flash SPI 速度(如 80MHz )等参数,确保与板卡硬件一致。

编译条件注意事项:

  1. ## 编译配置命令
  2. **配置编译目标为 ESP32S3:**
  3. ```bash
  4. idf.py set-target esp32s3
  5. ```
  6. **打开 menuconfig:**
  7. ```bash
  8. idf.py menuconfig
  9. ```
  10. **选择板子:**
  11. ```
  12. Xiaozhi Assistant -> Board Type -> DFRobot ESP32-S3 AI智能摄像头模块
  13. ```
  14. **修改 psram 配置:**
  15. ```
  16. Component config -> ESP PSRAM -> SPI RAM config -> Mode (QUAD/OCT) -> Octal Mode PSRAM
  17. ```
  18. **修改 WiFi 发射功率 为 10: 不然没法联网**
  19. ```
  20. Component config -> PHY -> (10)Max WiFi TX power (dBm)
  21. ```
复制代码


•解决编译问题:编译过程中若遇到问题,且板卡设置失败,需删除项目中的 build 文件夹,重新设置板卡为 ESP32-S3,再执行编译命令。

•合并固件:编译成功后,根据 ESP32-S3 AI CAM 板卡的芯片类型(esp32s3)和 Flash 参数,使用以下命令合并固件(假设各分区文件位置和名称正确):

•在已经安装了 esptool库的python环境下运行以下脚本,需要进入到 项目的‘build” 文件夹里操作。
  1. python -m esptool --chip esp32s3 merge_bin --output merged_firmware.bin --flash_mode dio --flash_size 16MB --flash_freq 80m 0x0 bootloader/bootloader.bin 0x100000 xiaozhi.bin 0x8000 partition_table/partition-table.bin 0xd000 ota_data_initial.bin 0x10000 srmodels/srmodels.bin
复制代码



ESP32-S3 AI CAM移植小智手把手教程图5

五、烧录与测试

◦烧录固件:使用 ESP32-S3 AI CAM 板卡对应的下载工具(如官方推荐的烧录工具),选择正确的 COM 口(如 COMXX ,根据实际连接确定),设置波特率(如 921600),将合并后的固件(merged_firmware.bin)烧录到板卡中。

◦功能测试:烧录完成后,给板卡上电,测试小智聊天机器人功能。检查麦克风是否能正常采集语音,音频功放是否能正常播放声音,。通过与机器人进行语音对话,测试语音识别、智能对话功能是否正常,如询问常见问题,查看机器人能否正确回应。
ESP32-S3 AI CAM移植小智手把手教程图6

项目纯净版地址
https://gitee.com/genvex/xiaozhi_df_ai_cam_construt

后续可以在这个版本上添加各种io组件。
纯净版固件可以聊天唱歌,用刷机工具 0x0地址刷入完整固件,即可配网开始聊天。

配网地址:xiaozhi.me  ,其他过程不在此赘述。



merged_firmware.zip

1.46 MB, 下载次数: 2

纯净版固件

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail