Search Code

ESP32 튜토리얼 41/55 - Micro SD 카드를 사용한 MP3 플레이어 | SunFounder의 ESP32 IoT 학습 키트

ESP32 튜토리얼 41/55 - Micro SD 카드를 사용한 MP3 플레이어 | SunFounder의 ESP32 IoT 학습 키트

이 튜토리얼에서는 ESP32 마이크로컨트롤러와 마이크로 SD 카드를 사용하여 MP3 플레이어를 만들어 보겠습니다. ESP32는 마이크로 SD 카드에 저장된 오디오 파일을 읽고 오디오 증폭기와 스피커를 통해 소리를 출력합니다. 이 프로젝트는 ESP32, 오디오 증폭기, 마이크로 SD 카드를 포함한 다양한 구성 요소를 결합하여 간단한 방법으로 음악을 재생할 수 있게 해줍니다.

전체 과정에서 필요한 배선, 코딩, 그리고 일반적인 문제 해결 방법에 대해 다루겠습니다. 더 시각적인 안내를 위해 관련 비디오(비디오 00:00)를 꼭 확인하세요.

하드웨어 설명

이 프로젝트에 사용되는 주요 구성 요소는 ESP32 마이크로컨트롤러, 마이크로 SD 카드, 오디오 증폭기, 그리고 스피커입니다. ESP32는 내장 Wi-Fi와 Bluetooth 기능을 갖춘 강력한 마이크로컨트롤러로, IoT 프로젝트에 이상적입니다. 오디오 재생의 처리와 제어를 담당합니다.

마이크로 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의 5V를 오디오 증폭기의 VCC 핀에 연결합니다. 다음으로 ESP32의 접지 핀을 증폭기의 접지 핀에 연결합니다. ESP32의 오디오 출력 핀(보통 GPIO25)은 10kΩ 저항을 통해 증폭기의 입력 핀에 연결해야 합니다.

스피커의 경우 오디오 증폭기의 출력 핀에 연결하세요. 스피커에는 극성이 없으므로 어느 방향으로든 연결할 수 있습니다. 마이크로 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 파일이 여전히 재생 중인지 확인합니다. 재생 중이 아니면 재생이 완료되었음을 알리는 메시지를 출력합니다. 전체 코드는 추가 참조를 위해 기사 아래에 로드됩니다.

데모 / 기대 효과

모든 배선이 완료되고 코드가 업로드되면 마이크로 SD 카드를 삽입했을 때 스피커를 통해 오디오가 재생되는 것을 들을 수 있습니다. 카드를 삽입한 후 ESP32를 리셋하세요. 오디오가 재생되지 않으면 배선을 확인하고 코드에서 오디오 파일 이름이 올바르게 지정되었는지 확인하세요(비디오 05:00).

일반적인 문제로는 마이크로 SD 카드를 올바르게 포맷하지 않았거나 지원되지 않는 오디오 파일 형식을 사용하는 경우가 있습니다. 파일이 MP3 형식이고 필요에 따라 루트 디렉터리나 지정된 폴더에 있는지 항상 확인하세요.

비디오 타임스탬프

  • 00:00 시작
  • 2:19 프로젝트 소개
  • 4:27 문서 페이지
  • 5:32 오디오 증폭기 배선
  • 8:00 ESP32용 마이크로SD 카드 포맷
  • 10:16 라이브러리 및 코드
  • 15:16 Arduino IDE에서 ESP32 보드 및 COM 포트 선택
  • 16:58 마이크로 SD 카드에서 ESP32를 사용하여 노래 재생
  • 19:14 18650 배터리를 사용한 두 번째 데모

이미지

speaker_pic
speaker_pic
audio_module
audio_module
ESP32-40-micro-sd-card-1
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"

// Declare pointers for the MP3 generator, file source, and output.
AudioGeneratorMP3 *mp3;
AudioFileSourceSD_MMC *file;
AudioOutputI2S *out;

void setup() {
  // Start the serial communication.
  Serial.begin(115200);
  delay(1000);

  // Initialize the SD card. If it fails, print an error message.
  if (!SD_MMC.begin()) {
    Serial.println("SD card mount failed!");
  }

  // Open the MP3 file from the SD card. Replace "/To Alice.mp3" with your own MP3 file name.
  file = new AudioFileSourceSD_MMC("/To Alice.mp3");
  
  // Set up the I2S output on ESP32's internal DAC.
  out = new AudioOutputI2S(0, 1);
  
  // Set the output to mono.
  out->SetOutputModeMono(true);

  // Initialize the MP3 generator with the file and output.
  mp3 = new AudioGeneratorMP3();
  mp3->begin(file, out);
}

void loop() {
  // If the MP3 is running, loop it. Otherwise, stop it.
  if (mp3->isRunning()) {
    if (!mp3->loop()) mp3->stop();
  } 
  // If the MP3 is not running, print a message and wait for 1 second.
  else {
    Serial.println("MP3 done");
    delay(1000);
  }
}

자원 및 참고자료

파일📁

파일이 없습니다.