ESP32 с MP3-плеером YX5300/YX6300 (Arduino IDE)
Это руководство по подключению модуля последовательного MP3-плеера YX5300 / YX6300 к ESP32, программируемому в Arduino IDE. Вы узнаете, как подключить MP3-плеер к ESP32 и воспроизводить звуки и музыкальные треки из файлов .mp3/.wav, хранящихся на карте MicroSD. В качестве примера проекта мы также покажем, как собрать MP3 аудиоплеер с кнопками управления и регулятором громкости.
В этом руководстве мы рассмотрим следующие темы:
Тестирование MP3-плеера YX5300 / YX6300 (воспроизведение звука)
ПРОЕКТ: MP3-плеер YX5300 / YX6300 с кнопками управления и регулятором громкости
Знакомство с модулем MP3-плеера YX5300 / YX6300
YX5300 / YX6300 — это недорогой модуль последовательного (UART) MP3-плеера, который можно подключить к микроконтроллерам (таким как ESP32, ESP8266 или Arduino) для воспроизведения файлов .mp3 или .wav, хранящихся на карте MicroSD, путём отправки последовательных команд.
Где купить?
Вы можете посетить страницу Maker Advisor Tools, чтобы сравнить цены на модуль YX5300 / YX6300 в разных магазинах:
Подключение MP3-плеера YX5300 / YX6300 к ESP32
Подключение MP3-плеера к ESP32 довольно простое, так как требуется всего два последовательных пина: RX и TX.
YX5300 / YX6300 |
ESP32 |
|---|---|
TX |
GPIO 16 (UART 2 RX) |
RX |
GPIO 17 (UART 2 TX) |
VCC |
VIN (5V) |
GND |
GND |
Согласно спецификациям продукта в руководстве, VCC работает с напряжениями от 3.2V до 5.2V. По результатам наших тестов, модуль работает наиболее стабильно при подключении к 5V (VIN).
* вы можете использовать любые другие пины RX/TX. Смотрите руководство по распиновке ESP32:
Вам также может быть полезно: ESP32 UART Communication (Serial): Set Pins, Interfaces, Send and Receive Data (Arduino IDE).
Мы подключим пин RX к GPIO 17, а пин TX к GPIO 16.
Важно: во всех проектах, использующих последовательные команды, необходимо подключать пины TX-RX и RX-TX. Однако, если код не работает правильно (не отправляет/не получает последовательные команды), возможно, потребуется поменять местами подключение и соединить RX-RX и TX-TX. Один из наших последовательных MP3-плееров поставлялся с неправильными маркировками на модуле, и единственный способ заставить его работать — подключить TX-TX и RX-RX.
Подготовка MicroSD карты
MP3-плеер YX5300 имеет слот для карты microSD, куда вы можете вставить карту microSD для хранения ваших файлов .mp3 или .wav. Вот основные спецификации, которые поддерживает модуль.
YX5300 |
Значение |
|---|---|
Поддерживаемые MicroSD карты |
MicroSD <= 32GB |
Формат карты |
FAT16 / FAT32 |
Форматы треков |
.mp3 / .wav |
Частоты |
8-48 kHz |
Перед продолжением руководства убедитесь, что вы отформатировали вашу карту microSD в FAT32. Следуйте следующим инструкциям для форматирования карты microSD или используйте программу, например SD Card Formatter (совместима с Windows и Mac OS).
1. Вставьте карту microSD в компьютер. Перейдите в Мой компьютер и щёлкните правой кнопкой мыши на SD-карте. Выберите Форматировать, как показано на рисунке ниже.
2. Появится новое окно. Выберите FAT32, нажмите Начать для запуска процесса форматирования и следуйте инструкциям на экране.
3. Для воспроизведения музыкальных треков вы должны правильно назвать папки и файлы, чтобы MP3-модуль мог получить к ним доступ. Вот пример структуры папок и имён файлов:
01/
001xxx.mp3
002xxx.mp3
003xxx.mp3
02/
004xxx.mp3
005xxx.mp3
03/
006xxx.mp3
007xxx.mp3
008xxx.mp3
Ваши папки должны иметь 2-значные имена, а каждый трек должен начинаться с 3-значного номера. Каждое имя трека должно быть уникальным. Примечание: максимум 99 папок с 255 песнями в каждой папке.
Например, начните с создания 2 папок на вашей карте microSD (назовите папки: 01 и 02):
4. Скопируйте файлы .mp3 или .wav, начиная с 001, 002 и 003. Имена файлов должны быть последовательными и начинаться с 3-значного числа.
5. Наконец, извлеките карту microSD из компьютера и вставьте её в модуль YX5300.
Вы можете нажать здесь, чтобы скачать архив .zip с бесплатными музыкальными файлами, использованными в этом проекте.
Подключение наушников или динамиков к модулю YX5300
YX5300 не поставляется с наушниками или динамиками, но вы можете использовать наушники, подобные показанным на изображении ниже, и подключить их к разъёму для наушников модуля.
Установка библиотеки YX5300 для ESP32 (совместима с YX6300)
Существует несколько библиотек для работы с последовательным модулем YX5300 и ESP32. Мы будем использовать библиотеку YX5300_ESP32 от bluejunimo (хотя библиотека называется YX5300 for ESP32, она также полностью совместима с модулем YX6300 без каких-либо дополнительных изменений).
Вы можете установить библиотеку через менеджер библиотек Arduino IDE. Найдите YX5300 for ESP32 и установите библиотеку от bluejunimo.
Подготовка Arduino IDE
Мы будем программировать плату ESP32 с помощью Arduino IDE. Убедитесь, что у вас установлен аддон ESP32. Следуйте следующему руководству:
Если вы предпочитаете использовать VSCode + PlatformIO, следуйте этому руководству:
Тестирование MP3-плеера YX5300 / YX6300 (воспроизведение звука)
Следующий код предоставлен библиотекой для тестирования модуля MP3-плеера. Вы проверите, работает ли модуль, если услышите воспроизведение аудиофайлов в наушниках или динамике.
/*********
Rui Santos & Sara Santos - Random Nerd Tutorials
Complete project details at https://RandomNerdTutorials.com/esp32-yx5300-yx6300-mp3-player-arduino/
Example based on the library example by bluejunimo https://github.com/bluejunimo/YX5300_ESP32/
*********/
#include <YX5300_ESP32.h>
// Connect to YX5300 Serial pins (RX and TX)
#define RX 16
#define TX 17
// mp3 object
YX5300_ESP32 mp3;
void setup() {
// Initialize connection with the YX5300/YX6300 module
mp3 = YX5300_ESP32(Serial2, RX, TX);
// Shows the hex commands being sent to the mp3 device (includes helpful errors)
Serial.begin(115200);
mp3.enableDebugging();
// Plays the first track stored on the microSD Card (Track Formats .mp3/.wav | Frequencies 8-48 kHz)
// MicroSD Card folder and file structure, example folder name 01 and file name 001xxx.mp3:
// 01/001xxx.mp3 01/002xxx.mp3 01/003xxx.mp3 02/004xxx.mp3
mp3.playTrack(1);
}
void loop() {
// put your main code here, to run repeatedly:
}
Как работает код
Давайте разберём, как работает код.
Подключение библиотеки YX5300_ESP32
Сначала вам нужно подключить библиотеку YX5300_ESP32.h, созданную bluejunimo, которая значительно упрощает работу с модулем MP3-плеера.
#include <YX5300_ESP32.h>
Инициализация YX5300
Установите пины RX и TX для YX5300 и создайте объект для модуля с именем mp3.
#define RX 16
#define TX 17
YX5300_ESP32 mp3;
setup()
В setup() начните с инициализации модуля с определённым последовательным каналом.
mp3 = YX5300_ESP32(Serial2, RX, TX);
Рекомендуем прочитать: ESP32 UART Communication (Serial): Set Pins, Interfaces, Send and Receive Data (Arduino IDE).
Включите последовательную связь и отладку MP3, чтобы видеть шестнадцатеричные последовательные команды, отправляемые на устройство. С включённой отладкой вы также увидите полезные сообщения об ошибках.
Serial.begin(115200);
mp3.enableDebugging();
Вы можете быстро воспроизвести первый трек, хранящийся на карте microSD, используя следующую команду:
mp3.playTrack(1);
Демонстрация
Загрузите предыдущий код на вашу плату ESP32. Он воспроизведёт первый трек, хранящийся на карте microSD. В мониторе последовательного порта должно отображаться подобное сообщение:
Если у вас подключены наушники или динамик к разъёму для наушников, вы должны слышать первый трек, хранящийся на карте microSD. Если у вас возникли проблемы, следуйте следующему разделу по устранению неполадок.
Устранение неполадок модуля MP3-плеера YX5300/YX6300
Если вы загрузили предыдущий код, но не слышите звука с модулем MP3-плеера YX5300/YX6300, это может быть одна из следующих проблем.
Ошибка подключения: во всех проектах, использующих последовательные команды, необходимо подключать пины TX-RX и RX-TX. Однако, если код не работает правильно (не отправляет/не получает последовательные команды), возможно, потребуется поменять местами подключение и соединить RX-RX и TX-TX. Один из наших последовательных MP3-плееров поставлялся с неправильными маркировками на модуле, и единственный способ заставить его работать — подключить TX-TX и RX-RX;
Недостаточно питания: согласно спецификациям продукта в руководстве, VCC работает с напряжениями от 3.2V до 5.2V. По результатам наших тестов, модуль работает наиболее стабильно при подключении к 5V (VIN);
Проблема с MicroSD картой: ваша карта microSD должна быть 32GB или менее и отформатирована в FAT16 / FAT32. Форматы треков должны быть .mp3 / .wav с частотами 8-48 kHz;
Неправильная структура папок / имена файлов: структура папок и файлов на вашей карте microSD неверна, пример папок и имён файлов: 01/001xxx.mp3 01/002xxx.mp3 01/003xxx.mp3 02/004xxx.mp3;
Проблема с наушниками/динамиком: мы рекомендуем проверить ваши наушники/динамики на другом устройстве, чтобы убедиться, что они работают.
ПРОЕКТ: MP3-плеер YX5300 / YX6300 с кнопками управления и регулятором громкости
В качестве примера проекта мы покажем, как собрать MP3-плеер с кнопками управления и регулятором громкости. Подготовив Arduino IDE с установленной библиотекой и вставив карту microSD с правильными папками и файлами, описанными ранее, в модуль YX5300, вы можете продолжить следовать этому руководству.
Необходимые компоненты
ESP32 Board (любая модель на ваш выбор)
Наушники / Динамик с разъёмом
3x Кнопки
1x Потенциометр
Вы можете использовать ссылки выше или перейти напрямую на MakerAdvisor.com/tools, чтобы найти все компоненты для ваших проектов по лучшей цене!
Схема подключения
Подключение MP3-плеера к ESP32 довольно простое, так как требуется всего два последовательных пина: RX и TX.
YX5300 / YX6300 |
ESP32 |
|---|---|
TX |
GPIO 16 (UART 2 RX) |
RX |
GPIO 17 (UART 2 TX) |
VCC |
VIN (5V) |
GND |
GND |
Согласно спецификациям продукта в руководстве, VCC работает с напряжениями от 3.2V до 5.2V. По результатам наших тестов, модуль работает наиболее стабильно при подключении к 5V (VIN).
Потенциометр/Кнопки |
ESP32 |
|---|---|
Потенциометр |
GPIO 4 |
Кнопка Play/Pause |
GPIO 5 |
Кнопка предыдущего трека |
GPIO 18 |
Кнопка следующего трека |
GPIO 19 |
Подключите все компоненты к вашему ESP32, используя таблицы выше или следуя схеме подключения ниже.
Код MP3-плеера
Загрузите следующий код, чтобы превратить ваш ESP32 в устройство MP3 аудиоплеера.
/*********
Rui Santos & Sara Santos - Random Nerd Tutorials
Complete project details at https://RandomNerdTutorials.com/esp32-yx5300-yx6300-mp3-player-arduino/
*********/
#include <YX5300_ESP32.h>
// Connect to YX5300 Serial pins (RX and TX)
#define RX 16
#define TX 17
// Global variables for the pushbuttons
const uint8_t pinBtnPlay = 5;
const uint8_t pinBtnPrev = 18;
const uint8_t pinBtnNext = 19;
// Bool variable to track if the audio is playing or paused
volatile bool isPlaying = true;
// Variables for debouncing the pushbuttons
const unsigned long DEBOUNCE_DELAY = 500; // in milliseconds
volatile unsigned long lastPressTime = 0;
// Analog input pin the potentiometer is attached to
const uint8_t potVolume = 4;
// Auxiliary volume variables
#define MIN_VOLUME 0
#define MAX_VOLUME 30
int current_volume = 0;
// mp3 object
YX5300_ESP32 mp3;
// Play/Pause Button Interrupt Service Routine (ISR)
void ARDUINO_ISR_ATTR buttonPlay() {
unsigned long now = millis();
if (now - lastPressTime > DEBOUNCE_DELAY) {
if(isPlaying) {
mp3.pause();
isPlaying = false;
}
else {
mp3.resume();
isPlaying = true;
}
}
lastPressTime = now;
}
// Previous Track Button Interrupt Service Routine (ISR)
void ARDUINO_ISR_ATTR buttonPrev() {
unsigned long now = millis();
if (now - lastPressTime > DEBOUNCE_DELAY) {
mp3.prev();
isPlaying = true;
}
lastPressTime = now;
}
// Next Track Button Interrupt Service Routine (ISR)
void ARDUINO_ISR_ATTR buttonNext() {
unsigned long now = millis();
if (now - lastPressTime > DEBOUNCE_DELAY) {
mp3.next();
isPlaying = true;
}
lastPressTime = now;
}
void setup() {
// Init pushbuttons with internal pullup resistor
pinMode(pinBtnPlay, INPUT_PULLUP);
pinMode(pinBtnPrev, INPUT_PULLUP);
pinMode(pinBtnNext, INPUT_PULLUP);
// Set interrupts ISR functions
attachInterrupt(pinBtnPlay, buttonPlay, HIGH);
attachInterrupt(pinBtnPrev, buttonPrev, HIGH);
attachInterrupt(pinBtnNext, buttonNext, HIGH);
// Initialize connection with the YX5300/YX6300 module
mp3 = YX5300_ESP32(Serial2, RX, TX);
// Shows the hex commands being sent to the mp3 device (includes helpful errors)
Serial.begin(115200);
mp3.enableDebugging();
// Plays the first track stored on the SD Card (Track Formats .mp3/.wav | Frequencies 8-48 kHz)
// SD Card folder and file structure, example folder name 01 and file name 001xxx.mp3:
// 01/001xxx.mp3 01/002xxx.mp3 01/003xxx.mp3 02/004xxx.mp3
mp3.playTrack(1);
}
void loop() {
// Read the potentiometer's value
int raw_value = analogRead(potVolume);
// Map the value to the min/max of the mp3 device's volume values
int new_volume = map(raw_value, 0, 4095, MIN_VOLUME, MAX_VOLUME);
// Change the volume if the pot position has changed
if(new_volume != current_volume) {
// Update the mp3 device's volume
mp3.setVolume(new_volume);
// Update the current volume with the new volume
current_volume = new_volume;
}
}
Как работает код
Давайте рассмотрим, как работает код, чтобы вы поняли, как использовать последовательные команды YX5300, прерывания для обработки нажатий кнопок и потенциометр для регулировки громкости.
Подключение библиотеки YX5300_ESP32
Сначала вам нужно подключить библиотеку YX5300_ESP32.h, созданную bluejunimo, которая значительно упрощает работу с модулем MP3-плеера.
#include <YX5300_ESP32.h>
Инициализация YX5300
Установите пины RX и TX для YX5300 и создайте объект для модуля с именем mp3.
#define RX 16
#define TX 17
YX5300_ESP32 mp3;
Переменные
Создайте глобальные переменные для пинов GPIO кнопок и потенциометра.
const uint8_t pinBtnPlay = 5;
const uint8_t pinBtnPrev = 18;
const uint8_t pinBtnNext = 19;
const uint8_t potVolume = 4;
Определите переменную типа bool для отслеживания, воспроизводится ли аудио или поставлено на паузу.
volatile bool isPlaying = true;
Следующие две переменные используются для устранения дребезга кнопок.
const unsigned long DEBOUNCE_DELAY = 500; // in milliseconds
volatile unsigned long lastPressTime = 0;
Наконец, вам нужны эти переменные для проверки минимальной/максимальной громкости и хранения текущей громкости в соответствии с положением потенциометра.
#define MIN_VOLUME 0
#define MAX_VOLUME 30
int current_volume = 0;
setup()
В setup() инициализируйте кнопки как входы и настройте их как прерывания для обнаружения изменений их состояния.
pinMode(pinBtnPlay, INPUT_PULLUP);
pinMode(pinBtnPrev, INPUT_PULLUP);
pinMode(pinBtnNext, INPUT_PULLUP);
attachInterrupt(pinBtnPlay, buttonPlay, HIGH);
attachInterrupt(pinBtnPrev, buttonPrev, HIGH);
attachInterrupt(pinBtnNext, buttonNext, HIGH);
Подробнее о прерываниях ESP32: ESP32 GPIO Interrupts with Arduino IDE.
Затем инициализируйте модуль с определённым последовательным каналом.
mp3 = YX5300_ESP32(Serial2, RX, TX);
Включите последовательную связь и отладку MP3, чтобы видеть шестнадцатеричные последовательные команды, отправляемые на устройство. С включённой отладкой вы также увидите полезные сообщения об ошибках.
Serial.begin(115200);
mp3.enableDebugging();
Вы можете быстро воспроизвести первый трек, хранящийся на карте microSD, используя следующую команду:
mp3.playTrack(1);
Прерывания кнопок
Создайте 3 функции прерываний, которые мгновенно вызываются при нажатии кнопок play/pause, предыдущий трек и следующий трек.
void ARDUINO_ISR_ATTR buttonPlay() {
unsigned long now = millis();
if (now - lastPressTime > DEBOUNCE_DELAY) {
if(isPlaying) {
mp3.pause();
isPlaying = false;
}
else {
mp3.resume();
isPlaying = true;
}
}
lastPressTime = now;
}
В зависимости от нажатой кнопки будет выполнена определённая функция. Вот 4 основных метода управления MP3-плеером, их названия говорят сами за себя:
mp3.resume();
mp3.pause();
mp3.prev();
mp3.next();
loop()
В loop() вы постоянно считываете текущее значение громкости с потенциометра.
int raw_value = analogRead(potVolume);
Затем, если громкость изменилась (увеличилась или уменьшилась), вы регулируете громкость.
int new_volume = map(raw_value, 0, 4095, MIN_VOLUME, MAX_VOLUME);
if(new_volume != current_volume) {
mp3.setVolume(new_volume);
current_volume = new_volume;
}
Демонстрация MP3-плеера
Загрузите предыдущий код на вашу плату ESP32 со всеми подключёнными компонентами. Он воспроизведёт первый трек, хранящийся на карте microSD (вы можете нажать здесь, чтобы скачать архив .zip с бесплатными музыкальными файлами, использованными в этом проекте).
В мониторе последовательного порта Arduino IDE вы должны увидеть подобные сообщения при нажатии кнопок.
Проверьте, что всё работает:
Первая кнопка воспроизводит трек или ставит трек на паузу;
Вторая кнопка возвращает к предыдущему треку;
Третья кнопка переключает на следующий трек;
Наконец, вы можете поворачивать ручку потенциометра для регулировки громкости.
Заключение
Это было подробное руководство по подключению MP3-плеера YX5300/YX6300 к ESP32. Он может быть весьма полезен для воспроизведения звуков или музыки с помощью вашей платы ESP32. Кроме того, вы можете добавить любой датчик к вашему проекту, чтобы ESP32 начинал воспроизведение аудио при выполнении определённого условия.
Надеемся, что это руководство было для вас полезным. У нас есть другие руководства, которые могут быть интересны:
ESP32 with NEO-M8N GPS Module: GPS Logger and Display on Google Earth
ESP32 with APDS9960 Proximity, Light, RGB, and Gesture Sensor
Чтобы узнать больше об ESP32, обязательно ознакомьтесь с нашими ресурсами:
Источник: Rui Santos & Sara Santos — Random Nerd Tutorials