搜索代码

ESP32教程41/55 - 使用Micro SD卡的MP3播放器 | SunFounder的ESP32物联网学习套件

ESP32教程41/55 - 使用Micro SD卡的MP3播放器 | SunFounder的ESP32物联网学习套件

在本教程中,我们将使用ESP32微控制器和微型SD卡创建一个MP3播放器。ESP32将读取存储在微型SD卡上的音频文件,并通过音频放大器和扬声器输出声音。该项目结合了多种组件,包括ESP32、音频放大器和微型SD卡,让您能够以简单的方式播放音乐。

在整个过程中,我们将讨论必要的接线、编码以及如何排查常见问题。如需更多视觉指导,请务必观看相关视频(视频中00:00处)。

硬件说明

本项目使用的主要组件包括ESP32微控制器、微型SD卡、音频放大器和扬声器。ESP32是一款功能强大的微控制器,内置Wi-Fi和蓝牙功能,非常适合物联网项目。它将负责音频播放的处理和控制。

微型SD卡用于存储MP3格式的音频文件。它连接到ESP32,使程序能够读取文件并将音频数据发送到放大器。音频放大器接收来自ESP32的数字信号,并将其放大以驱动扬声器,从而发出声音。

数据手册详情

制造商SunFounder
零件编号ESP32
逻辑/IO电压3.3 V
电源电压5 V
输出电流(每通道)最大2 A
峰值电流(每通道)最大3 A
PWM频率指导最高40 kHz
输入逻辑阈值0.3 x VCC(低电平),0.7 x VCC(高电平)
压降 / RDS(on) / 饱和0.15 V
热限制85 °C
封装WROOM-32
备注 / 变体兼容多种音频库

  • 确保微型SD卡格式化为FAT32格式。
  • 使用电阻连接音频放大器以防止失真。
  • 保持电源连接稳定以避免中断。
  • 在给系统上电前检查接线是否松动。
  • 监控串口输出以获取调试信息。
  • 使用低阻抗扬声器以获得更好的音质。
  • 为获得最佳性能,请确保ESP32在播放音频时不过载。

SD_MMC用于微型SD卡访问,AudioOutputI2S用于音频输出。

接线说明

ESP32-40-micro-sd-card-1
esp32-41-play-music-wriing

要连接各组件,首先连接电源。将ESP32的5 V连接到音频放大器的VCC引脚。接下来,将ESP32的接地引脚连接到放大器的接地引脚。ESP32的音频输出引脚(通常为GPIO25)应通过10 kΩ电阻连接到放大器的输入引脚。

对于扬声器,将其连接到音频放大器的输出引脚。请注意,扬声器没有极性,因此可以任意方向连接。将微型SD卡插入ESP32上的指定插槽。在给系统上电前,请务必仔细检查所有连接。

代码示例与讲解

在提供的代码中,我们首先包含音频播放和SD卡访问所需的库。主要标识符为mp3fileout,分别代表MP3生成器、音频文件源和音频输出。

AudioGeneratorMP3 *mp3;
AudioFileSourceSD_MMC *file;
AudioOutputI2S *out;

在这里,我们声明了MP3生成器和音频文件源的指针。在setup()函数中,我们初始化串口通信和SD卡。

void setup() {
  Serial.begin(115200);
  if (!SD_MMC.begin()) {
    Serial.println("SD card mount failed!");
  }
  file = new AudioFileSourceSD_MMC("/To Alice.mp3");
  out = new AudioOutputI2S(0, 1);
}

在此代码片段中,我们检查SD卡是否成功挂载。如果失败,将打印错误消息。然后我们设置MP3文件和音频输出模式。

void loop() {
  if (mp3->isRunning()) {
    if (!mp3->loop()) mp3->stop();
  } else {
    Serial.println("MP3 done");
    delay(1000);
  }
}

此循环检查MP3文件是否仍在播放。如果未播放,则打印一条消息表示播放已完成。完整代码将在文章下方加载以供进一步参考。

演示 / 预期效果

当所有接线完成并上传代码后,插入微型SD卡时,您应该能听到音频通过扬声器播放。插入卡后请务必重置ESP32。如果音频未播放,请检查接线并确保代码中的音频文件名正确(视频中05:00处)。

常见问题包括微型SD卡格式化不正确或使用不支持的音频文件格式。始终确保文件为MP3格式,并放置在根目录或指定的文件夹中。

视频时间戳

  • 00:00 开始
  • 2:19 项目介绍
  • 4:27 文档页面
  • 5:32 音频放大器接线
  • 8:00 为ESP32格式化microSD卡
  • 10:16 库和代码
  • 15:16 在Arduino IDE中选择ESP32开发板和COM端口
  • 16:58 使用ESP32从Micro SD卡播放歌曲
  • 19:14 使用18650电池的第二次演示

图像

speaker_pic
speaker_pic
audio_module
audio_module
ESP32-40-micro-sd-card-1
ESP32-40-micro-sd-card-1
esp32-41-play-music-wriing
esp32-41-play-music-wriing
842-ESP32 Tutorial 41/55- Arduino code for playing music from microSD card
语言: C++
#include "AudioFileSourceSD_MMC.h"
#include "AudioOutputI2S.h"
#include "AudioGeneratorMP3.h"
#include "SD_MMC.h"
#include "FS.h"

 // 为MP3生成器、文件源和输出声明指针。
AudioGeneratorMP3 *mp3;
AudioFileSourceSD_MMC *file;
AudioOutputI2S *out;

void setup() {
 // 开始串行通信。
  Serial.begin(115200);
  delay(1000);

 // 初始化SD卡。如果失败,打印错误信息。
  if (!SD_MMC.begin()) {
    Serial.println("SD card mount failed!");
  }

 // 从SD卡中打开MP3文件。将“/To Alice.mp3”替换为您自己的MP3文件名。
  file = new AudioFileSourceSD_MMC("/To Alice.mp3");

 // 在ESP32的内置DAC上设置I2S输出。
  out = new AudioOutputI2S(0, 1);

 // 将输出设置为单声道。
  out->SetOutputModeMono(true);

 // 用文件和输出初始化 MP3 生成器。
  mp3 = new AudioGeneratorMP3();
  mp3->begin(file, out);
}

void loop() {
 // 如果MP3正在运行,就循环播放。否则,停止播放。
  if (mp3->isRunning()) {
    if (!mp3->loop()) mp3->stop();
  }
 // 如果MP3没有运行,打印一条消息并等待1秒。
  else {
    Serial.println("MP3 done");
    delay(1000);
  }
}

文件📁

没有可用的文件。