ESP32播放MP3音乐(无需SD卡和外置RAM)
无需SD卡,FLASH大小4MB,非常适合用于智能家居的语音提示或者在线播放音乐。
一般来说,一个语音提示文件的MP3格式的大小约5KB,而未压缩的wav格式的大小则为60KB左右。如果拿2MB的FLASH空间来存储MP3格式的语音提示文件,则其数量要远大于WAV格式。
wav格式或pcm格式是未压缩格式,ESP32可以直接播放的,无需解码
所需硬件:ESP32开发板(带32Mbit FLASH)、WM8978模块。
ESP32也可以使用内置的DAC来播放音乐,但据他人所言会影响其他资源的使用,故此处使用WM8978,同时也省去了一片功放芯片。
模块是某宝上买的,附送有资料,但除了I2C之外,其他的并不适用于ESP32。
1. 烧录我上传的固件文件(见文末)
完成烧录
2. 硬件连接
(WM8978) LRCK >>> (ESP32)GPIO 25
(WM8978) SCLK >>> (ESP32)GPIO 26
(WM8978) SDIN >>> (ESP32)GPIO 22
(WM8978) MCLK >>> (ESP32)GPIO 0
(WM8978) SCL >>> (ESP32)GPIO 15
(WM8978) MCLK >>> (ESP32)GPIO 14
模块3.3V供电,插入耳机。
3. 复位ESP32
复位后会循环播放固件里的MP3音乐,立体音。
打开串口可以查看播放进度
划重点-代码实现流程:
1. 使用I2C协议来配置WM8978模块
2. 初始化ESP32的I2S通信接口
3. 建立数据缓冲,大于4096字节
4. 从FLASH读取一个扇区(4096字节)
5. 转为解码所需的stream比特流形式(本例子用的是开源的mad MP3解码库)
6. 开始MP3解码
7. 解码4096字节完成后,把PCM数据通过I2S送入WM8978模块
8. 重复第四步,直至结束
坑:注意MP3数据不要一帧一帧(一帧大小有几百字节)地解码-播放,这会导致奇怪的声音出现(解码出错)。
测试固件下载链接:https://download.csdn.net/download/DTXK1024/11972783
固件的下载积分我调整不了,如果你是需要某宝花钱买才可以下载CSDN的资源,那么可以私聊我或者评论里留下你的邮箱,我有时间会把资源发到你邮箱。