Cytron SHILD-EZMP3 (Easy MP3シールド)を使うと、マイクロSDカードに記録されている、MP3ファイルを簡単にArduinoで再生させることができます。
従来品に比べ、ボタン処理はプログラムを介さずに処理可能なボタンの搭載、WAVファイルに対応、USBメモリーに対応等の利点があります。
ご購入は、下記のサイトをご覧ください。
http://www.elefine.jp/SHOP/SHIELD-EZMP3.html
EZ MP3再生ライブラリーのインストール
まず、専用のMP3再生ライブラリーをインストールします。
ライブラリー、サンプルスケッチを下記からダウンロードします。GitHubを利用しています。
https://github.com/CytronTechnologies/Cytron-EasyMP3-Shield
ファイル一覧の右上にある “Clone or Download” ボタンをクリックすると、Download ZIPというボタンが表示されますので、それをクリックすると、まとめてZIPファイルにしてダウンロードすることができます。
ダウンロードして、展開すると下記のようなファイル(フォルダー)ができます。
これら二つのファイルを選択して、右クリック → 送る → 圧縮(zip 形式)フォルダー でZIPファイルに圧縮します。
圧縮されたZIPファイルをArduino IDEがインストールされているフォルダー内の libraries フォルダーにコピーします。
↓ Arduino IDE(開発環境)がインストールされているフォルダー
さらに Cytron_MP3Shield-master.ZIP ファイルを展開したフォルダーへ戻り、examples → PlayATrack の順にフォルダーを選択します。
PlayATrackフォルダー内のPlayATrack.ino をクリックして、Arduino IDEに読み込ませます。
Arduino IDEが起動したら、スケッチ → ライブラリをインクルード → .ZIP形式のライブラリをインストール… の順に選択します。
インクルードが成功すると、下記のように「ライブラリをインクルード」の中に「CytronEZMP3」が表示されます。
マイクロSDカードの準備
マイクロSDカードにMP3ファイルをコピーします。
その際、mp3というフォルダーを作成し、その中に0001.mp3、0002.mp3、0003.mp3 というような連番のファイル名を作成してください。
ファイルのコピーができたら、MP3シールドのスロットに差し込みます。
ArduinoにEasy MP3シールドを接続
Easy MP3シールドをArduinoに差し込みます。
ジャンパーピンが、TXはD3、RXはD2にそれぞれセットされていることを確認してください。初期状態では、この設定になっています。
ただし、D3、D2は、Arduino UNO および、その互換品でしか使えません。
Arduino Mega 等、Uno以外の場合は、下記の表をもとに変更してください。スケッチも変更する必要があります。
ジャンパーを変更したら、スケッチの setup() 内の下記の2,3 をそれぞれジャンパーの設定に合わせてください。
if(!mp3.begin(2, 3))
サンプルスケッチの転送
スケッチ(PlayATrack.ino)をコンパイルして、Arduinoへ転送します。
上述のライブラリーがきちんとインストールされていると、問題なくコンパイルできます。
MP3ファイルの再生
転送し終わると、MP3ファイルが再生されます。音が大きすぎる場合があるので耳につけずにヘッドフォンを接続してください。音の大きさに注意しながら、耳につけてください。
サンプルスケッチでは、6秒ごとに次の曲に切り替わります。また、シリアル通信で再生している曲の表示、音量調節、再生の停止ができるようになっています。
Arduino IDEのシリアルモニタでその確認ができます。
Play/Pause, Prev/Vol-, Next/Vol+ の各押ボタンも有効です。
Prev/Vol-は、長く押すと音量が小さくなり、短いと前の曲に切り替わります。
Next/Vol+は、長く押すと音量が大きくなり、短いと次の曲に切り替わります。
Play/Pauseは、再生・一時停止です。
任意の曲の再生
サンプルスケッチ、PlayATrack.inoで は、6秒ごとに曲が切り替わります。また、トラック指定に関数 playTrack を使っています。
この playTrack は、mp3フォルダー内の0001.mp3といったファイル名の再生に特化した関数です。それらのファイル名がない場合、再生される曲は不定です。
ほかのファイル名の曲を再生したい場合は、playTrack の代わりに playPhysical (名称どおり解釈すると物理的なトラック番号を再生)を使うとよいでしょう。
SDカードにファイルをコピーした順がトラック番号になります。
使い方例
mp3.playPhysical(1);
引数の1がトラック番号
入力に応じたMP3ファイル(曲)の再生
下記がArduinoの5番ピンをLにするとトラック1、6番ピンをLにすると、トラック2がそれぞれ再生されるようにしたスケッチです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
/****************************************************************************** PlayATrack.ino Cytron EasyMP3 Shield Library example sketch Created by Ng Beng Chet @ Cytron Technologies Sdn Bhd Original Creation Date: Mar 10, 2016 https://github.com/CytronTechnologies/CytronWiFiShield Modified from DFPlayer_Mini_Mp3 Library examples Credit to lisper <lisper.li@dfrobot.com> @ DFRobot Original Creation Date: May 30, 2014 https://github.com/DFRobot/DFPlayer-Mini-mp3 !!! Description Here !!! Development environment specifics: IDE: Arduino 1.6.7 Hardware Platform: Arduino Uno or any other compatible boards Cytron EasyMP3 Shield Version: 1.0 Distributed as-is; no warranty is given. ******************************************************************************/ #include <CytronEZMP3.h> #define TUNE_1 5 #define TUNE_2 6 CytronEZMP3 mp3; void setup () { pinMode(TUNE_1,INPUT_PULLUP); pinMode(TUNE_2,INPUT_PULLUP); Serial.begin(9600); if(!mp3.begin(2, 3)) { Serial.println("Init failed"); while(1); } mp3.setVolume(25); Serial.print("Device: "); Serial.println(mp3.getCurrentDevice()==1?"U-Disk":"microSD"); Serial.print("Total files: "); Serial.println(mp3.getTotalFiles()); } void loop () { if(digitalRead(TUNE_1) == LOW){ mp3.playPhysical(1); Serial.println("Now playing track " + (String)mp3.getTrackNo()); while(digitalRead(TUNE_1) == LOW); } if(digitalRead(TUNE_2) == LOW){ mp3.playPhysical(2); Serial.println("Now playing track " + (String)mp3.getTrackNo()); while(digitalRead(TUNE_2) == LOW); } } |
playPhysical などの関数は、曲の終わりまで待ちません。コマンド発行後、すぐに次の行の処理に移ります。
よって、
while(digitalRead(TUNE_1) == LOW);
で、入力がH (プルアップされているので開放状態)になるまで待機するようにしています。