ESP32 Урок 41/55 - MP3-плеер с использованием Micro SD карты | Обучающий набор SunFounder для ESP32 IoT
В этом руководстве мы создадим MP3-плеер с использованием микроконтроллера ESP32 и micro SD-карты. ESP32 будет считывать аудиофайлы, хранящиеся на micro SD-карте, и выводить звук через аудиоусилитель и динамик. Этот проект объединяет различные компоненты, включая ESP32, аудиоусилитель и micro SD-карту, что позволяет воспроизводить музыку простым способом.
В процессе мы рассмотрим необходимые подключения, программирование и способы устранения распространенных проблем. Для более наглядной инструкции обязательно посмотрите соответствующее видео (на видео в 00:00).
Объяснение аппаратного обеспечения
Основные компоненты, используемые в этом проекте, включают микроконтроллер ESP32, micro SD-карту, аудиоусилитель и динамик. ESP32 — это мощный микроконтроллер со встроенными возможностями Wi-Fi и Bluetooth, что делает его идеальным для проектов Интернета вещей. Он будет обрабатывать и управлять воспроизведением аудио.
Micro SD-карта используется для хранения аудиофайлов в формате MP3. Она подключается к ESP32 и позволяет программе считывать файлы и отправлять аудиоданные на усилитель. Аудиоусилитель принимает цифровой сигнал от ESP32 и усиливает его для управления динамиком, позволяя слышать звук.
Данные из технического описания
| Производитель | SunFounder |
|---|---|
| Номер детали | ESP32 |
| Логическое/IO напряжение | 3,3 В |
| Напряжение питания | 5 В |
| Выходной ток (на канал) | макс. 2 А |
| Пиковый ток (на канал) | макс. 3 А |
| Рекомендации по частоте ШИМ | до 40 кГц |
| Входные логические пороги | 0,3 x VCC (низкий), 0,7 x VCC (высокий) |
| Падение напряжения / RDS(on) / насыщение | 0,15 В |
| Тепловые пределы | 85 °C |
| Корпус | WROOM-32 |
| Примечания / варианты | Совместим с различными аудиобиблиотеками |
- Убедитесь, что micro SD-карта отформатирована в FAT32.
- Используйте резистор для подключения аудиоусилителя, чтобы предотвратить искажения.
- Поддерживайте стабильные соединения источника питания, чтобы избежать перебоев.
- Проверьте соединения на наличие ослабленных контактов перед подачей питания на систему.
- Следите за последовательным выводом для отладочной информации.
- Используйте динамики с низким импедансом для лучшего качества звука.
- Для наилучшей производительности убедитесь, что ESP32 не перегружен задачами во время воспроизведения аудио.
SD_MMC используется для доступа к micro SD, а AudioOutputI2S — для вывода аудио.
Инструкции по подключению


Чтобы соединить компоненты, начните с подключения источника питания. Подключите 5 В от ESP32 к контакту VCC аудиоусилителя. Затем подключите контакт заземления от ESP32 к контакту заземления усилителя. Выходной аудиоконтакт ESP32, обычно GPIO25, следует подключить к входному контакту усилителя через резистор 10 кОм.
Для динамика подключите его к выходным контактам аудиоусилителя. Обратите внимание, что динамик не имеет полярности, поэтому вы можете подключить его в любом направлении. Вставьте micro 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-карту!");
}
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 завершено");
delay(1000);
}
}
Этот цикл проверяет, воспроизводится ли MP3-файл. Если нет, выводится сообщение о завершении воспроизведения. Полный код будет загружен ниже статьи для дальнейшего ознакомления.
Демонстрация / Чего ожидать
Когда все будет подключено и код загружен, вы должны услышать воспроизведение аудио через динамик при вставленной micro SD-карте. Обязательно перезагрузите ESP32 после вставки карты. Если аудио не воспроизводится, проверьте подключения и убедитесь, что аудиофайл правильно назван в коде (на видео в 05:00).
Распространенные ошибки включают неправильное форматирование micro SD-карты или использование неподдерживаемых форматов аудиофайлов. Всегда убеждайтесь, что файлы находятся в формате MP3 и размещены в корневом каталоге или указанной папке по мере необходимости.
Временные метки видео
- 00:00 Начало
- 2:19 Введение в проект
- 4:27 Страница документации
- 5:32 Подключение аудиоусилителя
- 8:00 Форматирование microSD-карты для ESP32
- 10:16 Библиотека и код
- 15:16 Выбор платы ESP32 и COM-порта в Arduino IDE
- 16:58 Воспроизведение песни с помощью ESP32 с micro SD-карты
- 19:14 Вторая демонстрация с использованием батареи 18650
#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!");
}
// Откройте MP3 файл с карты памяти SD. Замените "/To Alice.mp3" на имя вашего собственного MP3 файла.
file = new AudioFileSourceSD_MMC("/To Alice.mp3");
// Настройте выход I2S на внутреннем ЦАП ESP32.
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);
}
}
Common Course Links
Common Course Files
Ресурсы и ссылки
-
Документация
Файлы📁
Нет доступных файлов.