SparkFun MP3 Trigger V24は、つぎの3通りの方法でSDカードに保存したMP3を再生できる、ロボットや装置に組み込みやすいMP3プレイヤーです。
このチュートリアルでは、MP3 Trigger V24のUART通信で音楽を再生する方法を主に紹介していきます。
動作電圧 | 4.5~12 V |
供給電流 | 45 mA |
ロジック電圧 | 3.5~5.0 V |
UART通信では、シリアル通信コマンドを使ってMP3ファイルの曲を再生します。マイコンからのUART通信(TTLシリアル)と、PCからのシリアル通信(USBシリアル)に対応しています。
UARTの通信速度は、MP3 Triggerで固定されており対応ボーレートが38,400 baudとなっています。そのため、マイコンやパソコンからの通信速度も38,400 baudに設定する必要があります(PCと通信する場合はシリアルモニタの通信速度を設定する必要があります)。
通信コマンドはMP3 Triggerの製品ページで紹介されています。本記事ではコマンドをそのまま関数として使えるようにしたサンプルコードを用意していますので、URAT通信初心者の方はこのコードを使ってみてください。
ボードには18個の入力ピン(トリガーTRIG)がついています。このピンをLOWにすると、曲を再生できます。スイッチで隣のピンとつなぐだけでMP3を簡単に再生できます。
マイコンからも簡単に制御できますが、マイコンと一緒に使うなら配線が4本で良いUART通信を使うことをおすすめします。UART通信では、255曲が流せるのに対し、入力ピンを使う方法では18曲しか流せません。
とても簡単で、特にパソコンやマイコンが無くても、外部電源さえあれば動かせます。「再生」、「停止」、「次へ」、「戻る」の4つの操作のみになります。
今回使用するハードウェアとソフトウェアはつぎの通りです。
SDHC~32GBまでをサポートしています。SDカードの直下につぎの画像のようにMP3ファイルを置きます。MP3ファイル名の先頭に、001~255までの数字を加えてください。MP3 Triggerで曲を再生する時に、この番号を指定することで曲を流すことができます。18個の入力ピン(トリガーTRIG)で再生する時は、対応する番号(001~018)の曲が流れます。
つぎのように配線を行います。メインのUARTポートは、PCのシリアルモニタへの表示に使うため、D0、D1以外のポートを使います。
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のシリアルモニタを起動しながら動かしてみてください。
最近は、スマホなどでも音楽が聴けるのでこういったものの需要は下がっているかもしれませんが、例えばクレーンゲームのBGMとして使用したり、音楽を状況に合わせて自動で流す手段としてはとても良いです。ぜひ、様々な応用方法を考えて使ってみてください。