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

news/2024/11/23 16:48:44/

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

代码我整理后再放出

END


http://www.ppmy.cn/news/345212.html

相关文章

ESP32S3蓝牙学习系列---Beacon信标之Eddystone

Beacon技术和Eddystone Beacon是一种基于BLE的技术,以固定间隔广播发送固定格式的数据。信号强弱以RSSI相对强度来表示,遇到障碍物信号会很弱。 Beacon信标本质是一种蓝牙广播标准,该标准不是蓝牙技术联盟所制定的标准,它被称为“…

合宙ESP32C3上手使用

概述 经典款是有ch343 ttl 转usb 需要安装驱动 GPIO20/21 新款使用usb 直连不需要驱动 USB GPIO18/19 ESP32C3 是ESP-RISC-V CPU 是基于 RISC-V ISA 的 32 位内核,包括基本整数 (I),乘法/除法 (M) 和压缩 (C) 标准扩展。ESP-RISC-V CPU 内核具有 4 级有序…

基于M5StickC Plus的可定时电子沙漏电子沙漏(LCD+软SPI+Arduino/C++)

目录 项目介绍硬件介绍开发环境搭建硬件结构及说明软件结构及说明软SPI驱动类LED矩阵操作类矩阵沙的动态效果计算电子沙漏顶层类硬件定时器(及中断服务)与非阻塞延时函数硬件定时器非阻塞延时 LED矩阵刷新间隔外设初始化主循环按键扫描主循环的主循环 功…

【esp32-s3】7.1 I2S——录音及存储

文章目录 1 前言2 硬件3 代码4 结果 1 前言 本章介绍下使用mic录制音频存放到tf卡中。 使用的是官方示例:https://gitee.com/EspressifSystems/esp-idf/tree/master/examples/peripherals/i2s/i2s_audio_recorder_sdcard 2 硬件 主要两块,tf卡的spi接线…

乐鑫esp32-c2开发板 烧录演示

一、准备工作 数据线X 1 、 四博智联 ESPC2-12 开发板 X 1 二、环境搭建 1、进入https://code.visualstudio.com 官网下载VSCODE软件 2、安装完成后安装乐鑫插件如下图 3、插件安装完后,查看- 命令面板(快捷键CtrlShiftP)。 4、输入config…

[论文笔记] Atos: A Task-Parallel GPU Scheduler for Graph Analytics

Atos: A Task-Parallel GPU Scheduler for Graph Analytics Atos: 用于图分析的任务并行 GPU 调度程序 [Paper] [Slides] ICPP’22 摘要 提出了 Atos, 一个特别针对动态不规则应用的任务并行 GPU 动态调度框架. 支持消除依赖关系的应用的任务并行公式来暴露额外的并发性除了…

led显示屏是如何扫描驱动的

LED显示屏的扫描驱动是指将图像信号分解并按行或按列逐行/逐列地驱动LED点阵,以显示完整的图像。以下是LED显示屏常见的两种扫描驱动方式: 静态扫描驱动: 静态扫描驱动是最简单和最常见的驱动方式。在静态扫描驱动中,每个LED像素都…

js的一些工具函数以及方法

部分方法复制于:20 个 JS 工具函数助力高效开发 reduce 举例:数组求和 let a[1,3,6,5,7]; let init0;//累加的初始值,默认为0,可不写 let ba.reduce((pre,cur,index,arr)>{console.log(当前要加序号:,index);cons…