반응형

먼저 글을 시작하기 전에 이 글 부터는 예전에 글을 쓰던 방식인 반말 포스팅으로 되돌아 가려고 합니다. 존댓말로 포스팅을 하니까 글이 의도하지 않게 늘어지는 경향이 있어서 다시 예전의 방식으로 돌아가려고 합니다. ^^ 


이전 글에서 DF Robot 의 MP3 모듈인 DF Player Mini 에 대해서 알아보았다. 그 때에는 단순히 전원과 스위치를 연결해서 MP3 를 플레이 해 보았는데 사실 이 모듈은 아두이노와의 시리얼 통신을 통해 프로그래밍으로 제어가 가능한 모듈이다. 그러므로 아두이노 등과의 결합을 통하면 더욱 활용범위가 넓어지는 것이다. 이번에는 어떻게 DF Player Mini MP3 모듈을 아두이노로 제어할 수 있는지 알아보고자 한다.


DF Player Mini (이하 MP3 모듈) 이다. 각 핀의 배열은 위와 같다. 


각 핀의 용도는 위와 같다. 핀들 중에서 RX, TX 를 아두이노에 연결하고 시리얼통신으로 MP3 모듈을 제어를 할 수 있는 것이다.


먼저 간단하게 MP3 파일을 제어하는 예제를 실행해 본다. 준비물은 스피커, MP3모듈, 마이크로SD카드, 브레드보드, 연결선, 1KΩ 저항 2개, 아두이노가 필요하다. 연결은 아래와 같다.


■ 연결 #1


df_player_mini_basic_test.fzz


위와 같이 연결을 한다. TX, RX 연결 시 중간에 반드시 1KΩ 저항을 연결해 주어야 한다. 그러지 않으면 아예 아두이노 스케치가 업로드 되지 않고 잡음이 많이 발생한다.


연결이 되었으면 MP3 파일이 담긴 마이크로SD카드를 준비해야 한다. 소스에서 특정 MP3 파일을 지정해서 플레이를 하려면 아래와 같이 파일의 네이밍 규칙을 맞춰서 파일을 복사해야 한다.


위와 같이 SD카드에 mp3 라는 폴더를 만들어주고 위와 같이 0001 ~ 9999 까지 번호를 원래의 MP3 파일명의 앞에 붙여주면 된다. 또는 번호만으로 네이밍을 해도 된다.



■ 소스 #1

소스의 실행을 위해서는 우선 MP3 모듈의 라이브러리가 설치되어 있어야 한다. 

DFPlayer_Mini_mp3.zip


위의 파일을 다운로드 받아서 압축을 푼 후 아두이노 IDE 설치 폴더의 libraries 폴더에 넣어주면 된다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
 
void setup () {
    Serial.begin (9600);
    mp3_set_serial (Serial);      // DFPlayer-mini mp3 module 시리얼 세팅
    delay(1);                     // 볼륨값 적용을 위한 delay
    mp3_set_volume (30);          // 볼륨조절 값 0~30
}
 
void loop () {        
    mp3_play (1);    //0001 파일 플레이
    delay (6000);
    mp3_next ();    //0002 파일 플레이 , next
    delay (6000);
    mp3_prev ();    //0001 파일 플레이 , prev
    delay (6000);
    mp3_play (4);    //0004 파일 플레이
    delay (6000);
}
cs


setup() 에서 시리얼 통신 및 볼륨을 세팅해주고 loop() 에서 mp3_play (플레이할 파일 1~9999) 값을 넣어주면 해당 파일이 플레이 된다. mp3_next() 와 mp3_prev() 각각 다음곡 이전곡을 플레이 한다. 소스를 플레이하면 재생 순서는 다음과 같이 될 것이다.  6초 간격으로 0001 -> 0002 -> 0001 -> 0004 파일이 무한반복 플레이 된다.


실행 영상이다. 위의 mp3 파일을 넣기 전에 플레이한 영상이라서 위의 리스트와 다른 노래가 나오지만 노래만 바뀌면 같은 결과이다.


그럼 그냥 전원이 연결되었을 때 그냥 순차적으로 플레이 하려면 어떻게 해야 할까?


■ 연결 #2


df_player_mini_play_all.fzz


연결 #1 에서 조금 변형을 해야 한다. MP3 모듈의 TX 를 아두이노의 D10에 연결하고 RX 를 D11에 연결하는 것으로 변경한다.  그리고 MP3 모듈의 BUSY 핀을 아두이노의 D3 에 연결을 추가한다.

 

■ 소스 #2

아래의 소스는 MP3 파일을 0001 부터 끝까지 모두 플레이 해 주는 소스이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
 
SoftwareSerial mySerial(1011); // RX, TX
 
void setup () {
  Serial.begin (9600);
  mySerial.begin (9600);
  mp3_set_serial (mySerial);    //set softwareSerial for DFPlayer-mini mp3 module 
  delay(1);                     // delay 1ms to set volume
  mp3_set_volume (15);          // value 0~30
}
void loop () {
  boolean play_state = digitalRead(3);// connect Pin3 to BUSY pin of player
  if(play_state == HIGH){
    mp3_next ();
  }
}
cs

 

BUSY 포트는 MP3 파일의 플레이의 플레이가 끝날 경우 아두이노에 HIGH 값을 보내준다. 그 때 mp3_next() 를 실행하여 다음곡을 플레이하는 원리이다. 실행하면 0001 ~ 9999 까지의 파일을 순차적 플레이를 반복한다.


아래는 MP3 모듈 라이브러리의 function 들이다. 아래의 기능만 있어도 거의 모든 mp3 플레이어의 기능을 구현 가능하다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
   mp3_play ();     //start play
   mp3_play (5);    //play "mp3/0005.mp3"
   mp3_next ();     //play next 
   mp3_prev ();     //play previous
   mp3_set_volume (uint16_t volume);    //0~30
   mp3_set_EQ ();   //0~5
   mp3_pause ();
   mp3_stop ();
   void mp3_get_state ();   //send get state command
   void mp3_get_volume (); 
   void mp3_get_u_sum (); 
   void mp3_get_tf_sum (); 
   void mp3_get_flash_sum (); 
   void mp3_get_tf_current (); 
   void mp3_get_u_current (); 
   void mp3_get_flash_current (); 
   void mp3_single_loop (boolean state);    //set single loop 
   void mp3_DAC (boolean state); 
   void mp3_random_play (); 
cs


다음글 에서는 센서를 붙여서 테스트를 해 보려고 한다. 센서에서 값이 감지되면 해당되는 음성을 출력해 보려고 한다.

반응형

+ Recent posts