ESP32播放MP3音乐-无需SD卡-WM8978-ESP32解码MP3

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. 烧录我上传的固件文件(见文末)

ESP32播放MP3音乐-无需SD卡-WM8978-ESP32解码MP3_第1张图片
完成烧录
ESP32播放MP3音乐-无需SD卡-WM8978-ESP32解码MP3_第2张图片

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音乐,立体音。

ESP32播放MP3音乐-无需SD卡-WM8978-ESP32解码MP3_第3张图片

打开串口可以查看播放进度

划重点-代码实现流程:

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的资源,那么可以私聊我或者评论里留下你的邮箱,我有时间会把资源发到你邮箱。

代码我整理后再放出

END

你可能感兴趣的:(IOT,ESP32)