
ES8389音频编解码器接入xiaozhi-esp323步让ESP32语音助手听清说响【免费下载链接】xiaozhi-esp32An MCP-based chatbot | 一个基于MCP的聊天机器人项目地址: https://gitcode.com/GitHub_Trending/xia/xiaozhi-esp32xiaozhi-esp32 是一个基于 MCP 的 ESP32 语音聊天机器人固件它把麦克风采集、语音上传、大模型对话、语音播报串成一条链路。这条链路里把数字音频和真实喇叭、麦克风互相转换的是音频编解码器芯片。如果你手上的开发板用的是 ES8389这篇文章带你把它正确接好、配好并快速定位没声音的问题。ES8389 是一款常见的模拟音频 Codec编解码器芯片I2S 接口传音频数据I2C 接口传控制指令既能驱动麦克风采集也能推动小功率喇叭。30秒速览它是什么一颗模拟音频编解码器芯片负责 ESP32 数字音频与麦克风/喇叭之间的相互转换。解决什么让设备听得见、说得出支持全双工边听边说的语音对话。适合谁手上是 ATK-DNESP32S3-Box2、ESP32-S31-Korvo-1 等带 ES8389 的板子或想给自己的板子加 ES8389 的开发者。难度懂基本 GPIO 概念即可代码层面只需改配置 一段实例化。它能做什么在固件里承担什么角色ES8389 在固件里由 Es8389AudioCodec 类驱动向上对接 AudioService 的采集/播放队列向下驱动 I2S 与 I2C 外设。项目数值说明采样位深16 bit输入输出统一 16bit PCM输入/输出采样率各板自定常见 24 kHz驱动里要求二者相等输入通道默认 1单声道唤醒词与 AEC 都基于单声道输出通道1 或 2立体声输出时单声道数据自动复制到左右声道输入增益默认 40 dB在input_gain_中设定功放控制可选 PA_EN 引脚无独立功放时传GPIO_NUM_NC效果层面你按下小智小智唤醒、问话、它用语音回答你——整个过程中的采集 → 上传 → 下载 → 放音就是 ES8389 在跑。动手前要知道两类接口别接错ES8389 对 ESP32 有两条独立的对话通道接线前先分清I2C控制口SDA/SCL 两根线用来告诉芯片打开输入、设增益、放音。固件里默认地址是ES8389_CODEC_DEFAULT_ADDR。I2S数据口BCLK位时钟、WS字时钟/声道、DOUTESP32→ES8389、DINES8389→ESP32、MCLK主时钟通常是采样率的 256 倍。其他准备你的开发板目录在 main/boards/ 下含config.h引脚宏、config.json构建标识、xxx_board.cc板级类。若没有独立功放PA_EN 传GPIO_NUM_NC有功放则传对应 GPIO固件在放音时会拉高它。仓库里写好的参考板ATK-DNESP32S3-Box2WiFi、ATK-DNESP32S3-Box24G、ESP32-S31-Korvo-1。跟着做把 ES8389 挂到你的开发板假设你在 main/boards/ 下新建了my-es8389-board/按下面四步走。在config.h里填引脚。把原理图上的引脚映射成宏#define AUDIO_INPUT_SAMPLE_RATE 24000 #define AUDIO_OUTPUT_SAMPLE_RATE 24000 #define AUDIO_I2S_GPIO_MCLK GPIO_NUM_38 #define AUDIO_I2S_GPIO_BCLK GPIO_NUM_40 #define AUDIO_I2S_GPIO_WS GPIO_NUM_42 #define AUDIO_I2S_GPIO_DIN GPIO_NUM_39 #define AUDIO_I2S_GPIO_DOUT GPIO_NUM_41 #define AUDIO_CODEC_I2C_SDA_PIN GPIO_NUM_48 #define AUDIO_CODEC_I2C_SCL_PIN GPIO_NUM_47 #define AUDIO_CODEC_ES8389_ADDR ES8389_CODEC_DEFAULT_ADDR预期宏无编译错误引脚与原理图一致。在板级.cc里实例化 codec。在GetAudioCodec()中返回一个Es8389AudioCodecvirtual AudioCodec* GetAudioCodec() override { static Es8389AudioCodec audio_codec( i2c_bus_, I2C_NUM_0, AUDIO_INPUT_SAMPLE_RATE, AUDIO_OUTPUT_SAMPLE_RATE, AUDIO_I2S_GPIO_MCLK, AUDIO_I2S_GPIO_BCLK, AUDIO_I2S_GPIO_WS, AUDIO_I2S_GPIO_DOUT, AUDIO_I2S_GPIO_DIN, GPIO_NUM_NC, AUDIO_CODEC_ES8389_ADDR, true); return audio_codec; }参数含义I2C 总线、端口、输入/输出采样率、MCLK/BCLK/WS/DOUT/DIN、PA_EN无则NC、芯片地址、是否使用 MCLK。注册板型。在 Kconfig.projbuild 与 main/CMakeLists.txt 里加一条选择项config.json里写好type、target、name。流程参考 自定义开发板指南。编译烧录。python scripts/build.py my-es8389-board或用idf.py set-target esp32s3 idf.py menuconfig选中板型后idf.py build flash monitor。预期固件生成并成功烧入monitor 出现下一节的日志。确认成功看三处现象串口日志出现Es8389AudioCodec initialized与Duplex channels created来自 es8389_audio_codec.cc 的ESP_LOGI。开机提示音喇叭里能听到欢迎 TTS。对话可用说唤醒词绿灯亮起问你是谁能听到语音回答。如果前两条日志都有但喇叭没声多半是 PA_EN 或硬件音量问题跳到下一节。常见坑速查现象可能原因动作有日志但完全没声PA_EN 未拉高 / 无功放直驱检查是否应把GPIO_NUM_NC改为实际 PA 引脚量 PA_EN 电平有电流声或爆音MCLK 未接或频率错确认 MCLK 引脚已接且板级use_mclktrue与硬件匹配录音电平偏低输入增益不足调整input_gain_默认 40或检查 MIC 偏置双声道输出只有左声数据未复制到 R 声道驱动已自动做单→双复制确认走了output_channels_2分支下一步ES8389 是小智语音链路里最低调的一环接好它你才真正拥有能听能说的小型语音助手。想深入直接读 es8389_audio_codec.cc 里CreateDuplexChannels与Write两个函数就能看清数据是怎么流进 I2S 通道的。【免费下载链接】xiaozhi-esp32An MCP-based chatbot | 一个基于MCP的聊天机器人项目地址: https://gitcode.com/GitHub_Trending/xia/xiaozhi-esp32创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考