跳到:
ESP32教程1/55 - SunFounder ESP32物联网学习套件软件与Arduino IDE简介 ESP32教程2/55 - 什么是ESP32、摄像头扩展板、开箱SunFounder的ESP32物联网套件 ESP32 教程 3/55 - 电阻、LED、面包板项目:你好 LED -ESP32 物联网学习套件 ESP32 教程 4/55 - 数据类型 定义变量 Int、bool、char、串口监视器 - ESP32 物联网套件 ESP32教程5/55 - LED调光,控制LED亮度 - ESP32物联网学习套件 ESP32 教程 6/55 - 使用 RGB LED 项目 2.3 - SunFounder 的 ESP32 物联网学习套件 ESP32教程7/55-在ESP32 Arduino编程中使用数组-SunFounder的ESP32物联网学习套件 ESP32 Tutorial 8/55 -Walking Light 74HC595 Shift register -SunFounder's ESP32 IoT Learning kit ESP32 教程 9/55 - 使用按钮切换LED,按下开,按下关 - SunFounder ESP32 物联网套件 ESP32教程10/55 - 使用七段数码管74HC595的数字计数器 - ESP32物联网学习套件 ESP32教程11/55 - 使用LCD1602 LCD2004与ESP32 - SunFounder的ESP32物联网学习套件 ESP32 教程 12/55 - 使用 SunFounder 的 ESP32 IoT 学习套件进行 WS2812 RGB 灯带 4 项目 ESP32教程13/55 - 使用有源蜂鸣器让Arduino发出蜂鸣声 | SunFounder的ESP32物联网学习套件 ESP32 教程 14/55 - 使用 SunFounder ESP32 IoT 学习套件播放自定义音乐音符 ESP32教程15/55 - 使用ESP32 L293D控制直流电机速度 | SunFounder的ESP32物联网学习套件 ESP32教程16/55 - 使用ESP32和L293D的迷你水泵 | SunFounder的ESP32物联网学习套件 ESP32 教程 17/55 - 使用 ESP32 和电位器控制舵机 - ESP32 物联网学习套件 ESP32教程18/55 - 使用ESP32检测倾斜 | SunFounder的ESP32物联网学习套件 ESP32 教程 19/55 - 使用红外传感器检测障碍物 | SunFounder 的 ESP32 物联网学习套件 ESP32 教程 20/55 - 循迹模块 | SunFounder 的 ESP32 物联网学习套件 ESP32教程21/55 - 使用PIR运动传感器检测人体 | SunFounder的ESP32物联网学习套件 ESP32教程22/55 - 使用LED Arduino感受光线 | SunFounder的ESP32物联网学习套件 ESP32 教程 23/55 - 使用ESP32读取电位器电压 | SunFounder的ESP32物联网套件 ESP32 教程 24/55 - 测量土壤湿度用于灌溉 | SunFounder 的 ESP32 IoT 学习套件 ESP32教程25/55 - 使用NTC和LCD测量温度 | SunFounder的ESP32物联网学习套件 ESP32教程26/55 - 使用操纵杆与Arduino采取行动 | SunFounder的ESP32物联网套件 ESP32 教程 27/55 - 使用超声波传感器测量距离 | SunFounder 的 ESP32 物联网学习套件 ESP32教程28/55 - DHT11温度传感器与LCD | SunFounder的ESP32物联网学习套件 ESP32 教程 29/55 - 使用ESP32读取红外遥控按键| SunFounder的ESP32物联网学习套件 ESP32教程30/55——使用Adafruit IO服务通过MQTT在网页上控制舵机 | SunFounder的ESP32物联网学习套件 ESP32教程31/55 - 带避障功能的LED灯带项目 | SunFounder的ESP32物联网学习套件 ESP32教程32/55 - 带LCD和蜂鸣器的汽车倒车距离警告 | SunFounder物联网学习套件 ESP32 教程 33/55 - 使用 SunFounder 的 ESP32 物联网学习套件制作数字骰子 ESP32 教程 34/55 - 使用RGB LED和旋钮实现颜色渐变 | SunFounder的ESP32物联网学习套件 ESP32教程35/55 - 植物监测器,土壤、温度和光照 | SunFounder的ESP32物联网学习套件 ESP32教程36/55 - 猜数字游戏 | SunFounder的ESP32物联网学习套件 ESP32教程37/55 - 使用蓝牙应用与ESP32 BLE | SunFounder的ESP32物联网学习套件 ESP32 教程 38/55 - 通过手机控制RGB LED | SunFounder的ESP32物联网学习套件 ESP32教程39/55 - 将ESP32用作蓝牙音乐播放器 | SunFounder的ESP32物联网学习套件 ESP32教程40/55 - 读写Micro SD卡 | SunFounder的ESP32物联网学习套件 ESP32教程41/55 - 使用Micro SD卡的MP3播放器 | SunFounder的ESP32物联网学习套件 ESP32教程42/55 - 使用相机拍照并保存到Micro SD卡 CAM-1 | SunFounder的ESP32套件 ESP32教程43/55 - 物联网互联网气象站 | SunFounder的ESP32物联网学习套件 ESP32教程44/55 - ESP32摄像头WiFi视频流网页服务器 CAM-2 | SunFounder的ESP32套件 ESP32教程45/55 - 带LED控制的定制流媒体服务器 CAM-3 l SunFounder的ESP32学习套件 ESP32教程46/55 - 使用HiveMQ MQTT进行远程温度监控 | SunFounder的ESP32套件 ESP32教程47/55 - 使用MQTT通过互联网实现WS2812 CheerLights | SunFounder的ESP32物联网套件 ESP32教程48/55 - 远程温度监控与LED控制MQTT | SunFounder的ESP32物联网套件 ESP32教程49/55 - 通过Adafruit IoT在互联网上控制直流电机 | SunFounder的ESP32套件 ESP32教程50/55 - 从世界任何地方控制RGB LED | SunFounder的ESP32套件 ESP32 Tutorial 51/55 - Temperature and Humidity over WiFi with DHT | SunFounder's ESP32 IoT Learning Kit ESP32教程52/55 - WS2812 CheerLights MQTT全局同步与LCD | SunFounder ESP32物联网套件 ESP32教程53/55 - 构建LCD网络时钟 | SunFounder的ESP32物联网学习套件 ESP32教程54/55 - 通过WiFi设置WS2812 LED灯带颜色 | SunFounder的ESP32物联网学习套件 ESP32教程55/55 - 如何测量12V、24V或100V直流电压 | 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卡访问所需的库。主要标识符为mp3、file和out,分别代表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
audio_module
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);
}
}