아두이노 나노 ESP32 - MP3 플레이어 | Arduino Nano ESP32 - MP3 Player

이 가이드에서는 ESP32, MP3 플레이어 모듈, 마이크로 SD 카드, 스피커를 사용하여 MP3 플레이어를 만드는 방법을 알아보겠습니다. 음악이나 녹음된 오디오일 수 있는 MP3 파일은 마이크로 SD 카드에 저장됩니다. 아두이노 나노 ESP32는 SD 카드에서 어떤 곡을 선택할지 제어하기 위해 MP3 플레이어 모듈에 명령을 보내고, 이를 소리로 변환한 다음 그 소리를 스피커로 보내도록 프로그래밍됩니다. 다음 측면들에 대해 깊이 탐구하겠습니다:

그 후, 볼륨을 조절하기 위해 가변 저항기나 로터리 엔코더를 추가하여 코드를 한 단계 더 발전시킬 수 있습니다.

준비물

1×Arduino Nano ESP32 Amazon
1×USB Cable Type-C 쿠팡 | Amazon
1×Serial MP3 Player Module 쿠팡 | Amazon
1×Micro SD Card Amazon
1×3.5mm Aux Speaker Amazon
1×Breadboard 쿠팡 | Amazon
1×Jumper Wires Amazon
1×(Recommended) Screw Terminal Expansion Board for Arduino Nano 쿠팡 | Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

시리얼 MP3 플레이어 모듈 및 스피커에 대하여

시리얼 MP3 플레이어 모듈 핀배열

시리얼 MP3 플레이어 모듈은 세 가지 인터페이스가 있습니다:

알두이노 나노 ESP32의 인터페이스는 4개의 핀을 포함합니다:

  • RX 핀: 데이터 핀, 알두이노 나노 ESP32의 TX 핀에 연결되어야 함
  • TX 핀: 데이터 핀, 알두이노 나노 ESP32의 RX 핀에 연결되어야 함
  • VCC 핀: 전원 핀, VCC (5V)에 연결되어야 함
  • GND 핀: 전원 핀, GND (0V)에 연결되어야 함

스피커에 대한 인터페이스는 3.5mm Aux 출력 여성 잭입니다.

마이크로 SD 카드에 대한 인터페이스는 모듈 뒷면에 있는 마이크로 SD 카드 소켓입니다.

Serial MP3 Player Module Pinout

스피커 핀배열

스피커는 보통 두 가지 인터페이스를 가지고 있습니다:

  • 오디오 신호 인터페이스: MP3 플레이어 모듈에 연결하는 3.5mm Aux 남성 커넥터입니다.
  • 전원 인터페이스: USB, 5V 전원 어댑터 또는 다른 전원 인터페이스일 수 있습니다.

작동 원리

시작하기 위해서는 다음이 필요합니다:

  • 재생하고 저장하고 싶은 노래나 녹음된 오디오 모음을 모으고 그것들을 마이크로 SD 카드에 저장하세요.
  • 마이크로 SD 카드를 MP3 플레이어 모듈에 삽입하세요.
  • MP3 플레이어 모듈을 Arduino Nano ESP32에 연결하고 스피커를 MP3 플레이어 모듈에 연결하세요. 또한, 스피커가 전원원에 연결되어 있는지 확인하세요.

마이크로 SD 카드에 있는 각 MP3 파일은 0부터 시작하는 ID를 받습니다. 그런 다음, Arduino Nano ESP32에게 MP3 플레이어 모듈로 다양한 작업을 수행하도록 지시할 수 있습니다. 예를 들어:

  • 재생: 선택한 노래를 시작하세요.
  • 일시중지: 노래를 일시 중지하세요.
  • 다음 곡 재생: 다음 곡으로 이동하세요.
  • 이전 곡 재생: 이전 곡으로 돌아가세요.
  • 볼륨 조절: 음악의 크기를 조절하세요.

MP3 플레이어 모듈이 명령을 받으면, 마이크로 SD 카드에서 MP3 파일을 읽어서 오디오 신호로 변환하고, 그 신호를 3.5mm Aux 연결을 사용하여 스피커로 전송합니다.

선연결

Arduino Nano ESP32 MP3 player module Wiring Diagram

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

아두이노 나노 ESP32 코드 - 음악 재생

아래 코드는 Micro SD 카드에 저장된 첫 번째 노래를 재생합니다.

/* * 이 Arduino Nano ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino Nano ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano-esp32/arduino-nano-esp32-mp3-player */ #define CMD_PLAY_NEXT 0x01 #define CMD_PLAY_PREV 0x02 #define CMD_PLAY_W_INDEX 0x03 #define CMD_SET_VOLUME 0x06 #define CMD_SEL_DEV 0x09 #define CMD_PLAY_W_VOL 0x22 #define CMD_PLAY 0x0D #define CMD_PAUSE 0x0E #define CMD_SINGLE_CYCLE 0x19 #define DEV_TF 0x02 #define SINGLE_CYCLE_ON 0x00 #define SINGLE_CYCLE_OFF 0x01 #define RX1PIN D8 //Arduino Nano Pin은 Serial MP3 Player 모듈의 TX에 연결됩니다. #define TX1PIN D7 //Arduino Nano Pin은 Serial MP3 Player 모듈의 RX에 연결됩니다. void setup() { Serial.begin(9600); Serial1.begin(9600, SERIAL_8N1, RX1PIN, TX1PIN); delay(500); //칩 초기화가 완료될 때까지 기다립니다. mp3_command(CMD_SEL_DEV, DEV_TF); //TF 카드를 선택합니다. delay(200); //200ms 동안 기다립니다. mp3_command(CMD_PLAY, 0x0000); //mp3 재생 //mp3_command(CMD_PAUSE, 0x0000); //mp3 일시정지 //mp3_command(CMD_PLAY_NEXT, 0x0000); //다음 mp3 재생 //mp3_command(CMD_PLAY_PREV, 0x0000); //이전 mp3 재생 //mp3_command(CMD_SET_VOLUME, 30); //볼륨을 30으로 변경 } void loop() { } void mp3_command(int8_t command, int16_t dat) { int8_t frame[8] = { 0 }; frame[0] = 0x7e; //시작 바이트 frame[1] = 0xff; //버전 frame[2] = 0x06; //시작 바이트와 종료 바이트를 제외한 명령의 바이트 수 frame[3] = command; // frame[4] = 0x00; //0x00 = 피드백 없음, 0x01 = 피드백 있음 frame[5] = (int8_t)(dat >> 8); //데이터 상위 바이트 frame[6] = (int8_t)(dat); //데이터 하위 바이트 frame[7] = 0xef; //종료 바이트 for (uint8_t i = 0; i < 8; i++) { Serial1.write(frame[i]); } }

사용 방법

  • 아두이노 나노 ESP32를 처음 사용하는 경우, 아두이노 나노 ESP32 환경 설정 방법을 참조하십시오.
  • 작동 방법의 지침을 따르십시오.
  • 위의 코드를 복사하고 아두이노 IDE로 열기
  • 아두이노 IDE에서 Upload 버튼을 클릭하여 아두이노 나노 ESP32에 코드를 업로드
  • 음악을 즐기십시오

아두이노 나노 ESP32 코드 - 제어 버튼으로 음악 재생

아래 코드는 이전 코드의 업그레이드 버전입니다. MP3 플레이어와 상호작용할 수 있게 하는 네 개의 버튼을 추가합니다.

/* * 이 Arduino Nano ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino Nano ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano-esp32/arduino-nano-esp32-mp3-player */ #include <ezButton.h> #define CMD_PLAY_NEXT 0x01 #define CMD_PLAY_PREV 0x02 #define CMD_PLAY_W_INDEX 0x03 #define CMD_SET_VOLUME 0x06 #define CMD_SEL_DEV 0x09 #define CMD_PLAY_W_VOL 0x22 #define CMD_PLAY 0x0D #define CMD_PAUSE 0x0E #define CMD_SINGLE_CYCLE 0x19 #define DEV_TF 0x02 #define SINGLE_CYCLE_ON 0x00 #define SINGLE_CYCLE_OFF 0x01 #define RX1PIN D8 // Arduino Nano ESP32 핀이 Serial MP3 Player 모듈의 TX에 연결됨 #define TX1PIN D7 // Arduino Nano ESP32 핀이 Serial MP3 Player 모듈의 RX에 연결됨 ezButton button_play(D2); // D2 핀에 대한 ezButton 객체를 생성 ezButton button_pause(D3); // D3 핀에 대한 ezButton 객체를 생성 ezButton button_next(D4); // D4 핀에 대한 ezButton 객체를 생성 ezButton button_prev(D5); // D5 핀에 대한 ezButton 객체를 생성 void setup() { Serial.begin(9600); Serial1.begin(9600, SERIAL_8N1, RX1PIN, TX1PIN);; delay(500); // 칩 초기화가 완료될 때까지 대기 mp3_command(CMD_SEL_DEV, DEV_TF); // TF 카드를 선택 delay(200); // 200ms 대기 button_play.setDebounceTime(50); // 디바운스 시간을 50 밀리초로 설정 button_pause.setDebounceTime(50); // 디바운스 시간을 50 밀리초로 설정 button_next.setDebounceTime(50); // 디바운스 시간을 50 밀리초로 설정 button_prev.setDebounceTime(50); // 디바운스 시간을 50 밀리초로 설정 } void loop() { button_play.loop(); // loop() 함수를 먼저 호출해야 함 button_pause.loop(); // loop() 함수를 먼저 호출해야 함 button_next.loop(); // loop() 함수를 먼저 호출해야 함 button_prev.loop(); // loop() 함수를 먼저 호출해야 함 if (button_play.isPressed()) { Serial.println("Play mp3"); mp3_command(CMD_PLAY, 0x0000); } if (button_pause.isPressed()) { Serial.println("Pause mp3"); mp3_command(CMD_PAUSE, 0x0000); } if (button_next.isPressed()) { Serial.println("Play next mp3"); mp3_command(CMD_PLAY_NEXT, 0x0000); } if (button_prev.isPressed()) { Serial.println("Play previous mp3"); mp3_command(CMD_PLAY_PREV, 0x0000); } } void mp3_command(int8_t command, int16_t dat) { int8_t frame[8] = { 0 }; frame[0] = 0x7e; // 시작 바이트 frame[1] = 0xff; // 버전 frame[2] = 0x06; // 시작 바이트와 종료 바이트를 제외한 명령의 바이트 수 frame[3] = command; // frame[4] = 0x00; // 0x00 = 피드백 없음, 0x01 = 피드백 있음 frame[5] = (int8_t)(dat >> 8); // 데이터 상위 바이트 frame[6] = (int8_t)(dat); // 데이터 하위 바이트 frame[7] = 0xef; // 종료 바이트 for (uint8_t i = 0; i < 8; i++) { Serial1.write(frame[i]); } }

위 코드에 대한 배선 도면:

Arduino Nano ESP32 MP3 player speaker Wiring Diagram

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

이제 프로젝트를 수정하여 더 많은 기능을 추가할 수 있습니다. 예를 들어:

동영상

비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.

함수 참조들

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!