創るたのしみを応援

マイコンで制御できるMP3プレイヤー MP3 Trigger V24

SparkFun MP3 Trigger V24は、つぎの3通りの方法でSDカードに保存したMP3を再生できる、ロボットや装置に組み込みやすいMP3プレイヤーです。

  • UART通信から再生
  • ボード上の18個の入力ピンで再生
  • ボード上の多機能ボタンで再生

このチュートリアルでは、MP3 Trigger V24のUART通信で音楽を再生する方法を主に紹介していきます。

概要

動作環境

動作電圧4.5~12 V
供給電流45 mA
ロジック電圧3.5~5.0 V

使用方法

UART通信で音楽を再生

UART通信では、シリアル通信コマンドを使ってMP3ファイルの曲を再生します。マイコンからのUART通信(TTLシリアル)と、PCからのシリアル通信(USBシリアル)に対応しています。

UARTの通信速度は、MP3 Triggerで固定されており対応ボーレートが38,400 baudとなっています。そのため、マイコンやパソコンからの通信速度も38,400 baudに設定する必要があります(PCと通信する場合はシリアルモニタの通信速度を設定する必要があります)。

通信コマンドはMP3 Triggerの製品ページで紹介されています。本記事ではコマンドをそのまま関数として使えるようにしたサンプルコードを用意していますので、URAT通信初心者の方はこのコードを使ってみてください。

18個の入力ピンで音楽を再生

ボードには18個の入力ピン(トリガーTRIG)がついています。このピンをLOWにすると、曲を再生できます。スイッチで隣のピンとつなぐだけでMP3を簡単に再生できます。

マイコンからも簡単に制御できますが、マイコンと一緒に使うなら配線が4本で良いUART通信を使うことをおすすめします。UART通信では、255曲が流せるのに対し、入力ピンを使う方法では18曲しか流せません。

多機能ボタンで音楽を再生

とても簡単で、特にパソコンやマイコンが無くても、外部電源さえあれば動かせます。「再生」、「停止」、「次へ」、「戻る」の4つの操作のみになります。

開発環境

今回使用するハードウェアとソフトウェアはつぎの通りです。

ハードウェア

  • MP3 Trigger V24朱雀技研工房ストアで購入
  • マイコンボード
    • Arduino UNO朱雀技研工房ストアで購入
    • NucleoF446RE
  • 3.5mmイヤホン等
  • ピンソケット2.54mmピッチ 1×6ピン朱雀技研工房ストアで購入
  • microSDカード
    • SDHCの32GBまで対応(FAT16/FAT32)
  • パソコン
    • Windows10

ソフトウェア

  • Arduino IDE
    • Arduino UNOを使用する場合
  • mbedオンラインIDE
    • NucleoF446REを使用する場合
  • Tera Term

準備

microSDカードにMP3データを入れる

SDHC~32GBまでをサポートしています。SDカードの直下につぎの画像のようにMP3ファイルを置きます。MP3ファイル名の先頭に、001~255までの数字を加えてください。MP3 Triggerで曲を再生する時に、この番号を指定することで曲を流すことができます。18個の入力ピン(トリガーTRIG)で再生する時は、対応する番号(001~018)の曲が流れます。

配線

つぎのように配線を行います。メインのUARTポートは、PCのシリアルモニタへの表示に使うため、D0、D1以外のポートを使います。

Arduino UNO
Nucleo F446RE

サンプルコード

Arduino版とmbed版のメイン部分のコードを掲載しています。

全コードは、こちらのリンク先のArduino版mbed版をご覧ください。

/////////////////////
/* メインプログラム */
////////////////////

/* 初期設定 */
void setup(){
  
    delay(100);
    MP3.begin(38400);
    Serial.begin(9600);   

    sum = get_number_of_tracks(); // 総トラック数を取得
    Serial.print("Number of all Tracks:"); // シリアルモニタに総トラック数を表示
    Serial.print(sum);
    Serial.print("\r\n");
    set_volume(200); // 音量セット
    quiet_mode(false); // クワイエットモードOFF
}
    
/* メインループ */
void loop(){
        
        /* 曲が終了したら次の曲へ飛ぶ */
        for(int i = 1; i<= sum; i++){
            Serial.print("Track:");
            Serial.print(i);
            Serial.print("\r\n");
            set_number_of_tracks(i);
            confirm(); // 曲を変えると2が返ってくるので受け取る
            int check = 0;
            while(check != 1 && check != 2 && check != 3){
                check = confirm();
            }
            Serial.print("Next\r\n");
        }
         
        /*15秒間停止*/
        Serial.print("stop\r\n");
        control_tracks('O');       
        delay(15000);
}
/////////////
/* メイン関数 */
/////////////
int main()
{
    /* 初期設定 */
    wait_ms(100);
    MP3.baud(38400);
    pc.baud(9600);    
    
    int sum = get_number_of_tracks(); // 総トラック数を取得
    pc.printf("Number of all Tracks:%d\r\n",sum); // シリアルモニタに総トラック数を表示
    set_volume(200); // 音量セット
    quiet_mode(false); // クワイエットモードOFF
    
    /* メインループ */
    while(1) {
        
        /* PCのターミナルで曲を指定する */
        int i = 0;
        pc.printf("Set track number:");
        pc.scanf("%d",&i); // 入力(ターミナルのローカルエコーをオンにする)
        set_number_of_tracks(i);
        pc.printf("\r\nTrack:%d\r\n\r\n",i);
    }
}

関数説明

関数名引数戻り値説明
int get_number_of_tracks(void)無し総トラック数総トラック数を整数型で返す
void set_number_of_tracks(uint8_t number)流したい曲の番号無し指定した曲が流れる
void set_number_of_directory(uint8_t number)ディレクトリの流したいn番目の曲無し指定した曲が流れる
void control_tracks(char control)
‘O’,’F’,’R’無しO:再生・停止、F:次へ進む、R:前の曲に戻る
void set_volume(uint8_t val)0~255無し音量を設定する
void quiet_mode(bool val)true(on)またはfalse(off)無しクワイエットモードを設定する。デフォルトではfalse(off)
int confirm(void)無し0,1,2,3状態を整数型で返す(1:曲が終了したとき,2:曲が他のコマンドでキャンセルされた時,3:曲が存在しない時,0:実行中,999:エラー)

実行結果

電源を入れるとMP3 TriggerのStatusLEDが点滅します。3回点滅したら正常です。1回だとSDカードが刺さっていない、2回だとSDカードは刺さっているがMP3ファイルが無いという状態です。点滅を繰り返す場合はハードウェアの問題です。MP3 Triggerを再起動してください。

今回、ArduinoではSDカード内にある曲数と、現在再生しているトラックを表示するプログラムを作りました。またNucleoではキーボードで整数値を入力すると曲が流れるプログラムを作りました。Tera Termや Arduinoのシリアルモニタを起動しながら動かしてみてください。

Arduino UNOの場合
Nucleo F446REの場合

最後に

最近は、スマホなどでも音楽が聴けるのでこういったものの需要は下がっているかもしれませんが、例えばクレーンゲームのBGMとして使用したり、音楽を状況に合わせて自動で流す手段としてはとても良いです。ぜひ、様々な応用方法を考えて使ってみてください。

資料

  1. MP3 Trigger V24
  2. Arduino版サンプルコード
  3. mbed版サンプルコード
SNSでフォローする