ESP32 с MP3-плеером YX5300/YX6300 (Arduino IDE)

Это руководство по подключению модуля последовательного MP3-плеера YX5300 / YX6300 к ESP32, программируемому в Arduino IDE. Вы узнаете, как подключить MP3-плеер к ESP32 и воспроизводить звуки и музыкальные треки из файлов .mp3/.wav, хранящихся на карте MicroSD. В качестве примера проекта мы также покажем, как собрать MP3 аудиоплеер с кнопками управления и регулятором громкости.

ESP32 Руководство YX5300 YX6300 MP3-плеер Arduino IDE

В этом руководстве мы рассмотрим следующие темы:

Знакомство с модулем MP3-плеера YX5300 / YX6300

YX5300 / YX6300 — это недорогой модуль последовательного (UART) MP3-плеера, который можно подключить к микроконтроллерам (таким как ESP32, ESP8266 или Arduino) для воспроизведения файлов .mp3 или .wav, хранящихся на карте MicroSD, путём отправки последовательных команд.

YX5300 YX6300 MP3-плеер модуль вид спереди распиновка разъём для наушников

Где купить?

Вы можете посетить страницу Maker Advisor Tools, чтобы сравнить цены на модуль YX5300 / YX6300 в разных магазинах:

Подключение MP3-плеера YX5300 / YX6300 к ESP32

YX5300 YX6300 MP3-плеер модуль распиновка

Подключение 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.

ESP32 YX5300 YX6300 MP3-плеер схема подключения

Важно: во всех проектах, использующих последовательные команды, необходимо подключать пины 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-карте. Выберите Форматировать, как показано на рисунке ниже.

Форматирование microSD карты

2. Появится новое окно. Выберите FAT32, нажмите Начать для запуска процесса форматирования и следуйте инструкциям на экране.

Форматирование microSD карты FAT32 Windows

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):

YX5300 YX6300 MP3-плеер структура папок

4. Скопируйте файлы .mp3 или .wav, начиная с 001, 002 и 003. Имена файлов должны быть последовательными и начинаться с 3-значного числа.

YX5300 YX6300 MP3-плеер имена папок и файлов

5. Наконец, извлеките карту microSD из компьютера и вставьте её в модуль YX5300.

YX5300 YX6300 MP3-плеер модуль с MicroSD картой

Вы можете нажать здесь, чтобы скачать архив .zip с бесплатными музыкальными файлами, использованными в этом проекте.

Подключение наушников или динамиков к модулю YX5300

YX5300 не поставляется с наушниками или динамиками, но вы можете использовать наушники, подобные показанным на изображении ниже, и подключить их к разъёму для наушников модуля.

Примеры наушников и динамиков

Установка библиотеки YX5300 для ESP32 (совместима с YX6300)

Существует несколько библиотек для работы с последовательным модулем YX5300 и ESP32. Мы будем использовать библиотеку YX5300_ESP32 от bluejunimo (хотя библиотека называется YX5300 for ESP32, она также полностью совместима с модулем YX6300 без каких-либо дополнительных изменений).

Вы можете установить библиотеку через менеджер библиотек Arduino IDE. Найдите YX5300 for ESP32 и установите библиотеку от bluejunimo.

Установка YX5300 YX6300 для ESP32 MP3-плеер Arduino IDE

Подготовка 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. В мониторе последовательного порта должно отображаться подобное сообщение:

ESP32 YX5300 YX6300 MP3-плеер воспроизведение трека Serial Monitor

Если у вас подключены наушники или динамик к разъёму для наушников, вы должны слышать первый трек, хранящийся на карте microSD. Если у вас возникли проблемы, следуйте следующему разделу по устранению неполадок.

YX5300 YX6300 MP3-плеер подключён к наушникам

Устранение неполадок модуля 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, вы можете продолжить следовать этому руководству.

Необходимые компоненты

Вы можете использовать ссылки выше или перейти напрямую на 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, используя таблицы выше или следуя схеме подключения ниже.

ESP32 YX5300 YX6300 MP3-плеер с кнопками управления схема подключения

Код 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 вы должны увидеть подобные сообщения при нажатии кнопок.

ESP32 YX5300 YX6300 MP3-плеер с кнопками управления Serial Monitor

Проверьте, что всё работает:

  1. Первая кнопка воспроизводит трек или ставит трек на паузу;

  2. Вторая кнопка возвращает к предыдущему треку;

  3. Третья кнопка переключает на следующий трек;

  4. Наконец, вы можете поворачивать ручку потенциометра для регулировки громкости.

ESP32 YX5300 YX6300 MP3-плеер с кнопками управления демонстрация схемы

Заключение

Это было подробное руководство по подключению MP3-плеера YX5300/YX6300 к ESP32. Он может быть весьма полезен для воспроизведения звуков или музыки с помощью вашей платы ESP32. Кроме того, вы можете добавить любой датчик к вашему проекту, чтобы ESP32 начинал воспроизведение аудио при выполнении определённого условия.

Надеемся, что это руководство было для вас полезным. У нас есть другие руководства, которые могут быть интересны:

Чтобы узнать больше об ESP32, обязательно ознакомьтесь с нашими ресурсами:


Источник: Rui Santos & Sara Santos — Random Nerd Tutorials