ArduinoにDFPlayer Miniを繋いでmp3音楽を再生する方法

今回はDFPlayer Miniを使って音楽再生していこうと思います。電子工作については初めてだったので苦戦しましたが自分が理解してきたことをわかりやすくここに記録していこうと思います。

# 用意するもの

・Arduino UNO R3
・DFPlayerMini 秋月商店で購入可能
・マイクロSDカード　**32GB以下でフォーマット形式がFAT16またはFAT32であること**
・ジャンパワイヤ
・スピーカ (圧電スピーカー(圧電サウンダー) PT08 を使用。のちに紹介するが雑音が出たので違うスピーカーがいいかもしれない)
・抵抗器1kΩ　2本

# 音楽ファイルの配置構成
音楽ファイルの配置構成ですが、これはDFPlayer Miniを使うためのライブラリによって配置構成が違うので、それについて説明します。
#### 1. DFPlayer_Mini_Mp3.h
mp3フォルダ内の音楽を再生できる。
**ただし、フォルダ01~99内の音声ファイルを指定できません。**
ファイルの配置構成は以下のようになります。このとき、ファイルの桁数は0001.mp3のように**４桁**にしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900339/592e62eb-9018-14e3-862f-9e36af59158d.png)

#### 2. DFRobotDFPlayerMini.h
このライブラリーはフォルダ01~99内の音声ファイルを指定できます。
ファイルの配置構成は以下のようになります。 DFPlayer_Mini_Mp3.hのときはmp3フォルダ内でしたが、この場合はmp3内でなく、**2ケタ**名称のフォルダ内に音楽ファイルを入れます。このとき、ファイルの桁数は**3桁**にしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900339/84406620-7b78-f6e7-8ea4-7a93452f011b.png)


この２種類のライブラリがあり、同じものでも使用する関数が違いますので、**使う際は用途に合わせてどちらかをincludeしてください。** 今回はDFRobotDFPlayerMiniのほうを使用します。
インストール方法は
DFPlayer_Mini_Mp3の場合はhttps://github.com/DFRobot/DFPlayer-Mini-mp3
DFRobotDFPlayerMiniの場合はhttps://github.com/DFRobot/DFRobotDFPlayerMini
でダウンロードして、C:\Program Files (x86)\Arduino\librariesフォルダに入れてください。
※追記：
Arduino の最新版により
C:\Program Files (x86)\Arduino\librariesフォルダでライブラリがないコンパイルエラーを発生した場合は、
C:\Users\ユーザー名\Documents\Arduino\librariesに入れるといいです。


# 回路図
回路は下記の通りになります。

![034AF071-787A-4F34-922F-CFC252723181.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900339/aba1a80a-5752-a54a-39b6-530f23495cdf.jpeg)


マイクロSDカードはDFPlayerMiniに挿入してください。
データシートによると3.3ボルトの場合は抵抗器は不要ですが、**5ボルトの場合、 1キロの抵抗器が二本必要**となり、以下のように配線します。

以下の画像がDFPlayerMiniです。今回はこれのVCC RX TX SPK1 GND SPK2のピンを使用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900339/f22f675a-97d5-a81e-78b3-f56b67b6a3e1.png)

# コード
コードは以下のようになります。
RX = 10 TX = 11 となってますが、この数字はArduinoに刺すピン番号で、Dfplayer側はそれに対し、TX,RXに刺すようにしてください。
また、コードを書き換える際は、10,11ピンを外してからでないと書き換えることができませんのでご了承ください。
あと、このプログラムはPCのシリアル通信を通して確認してますが、**シリアルモニタへ情報を出力するための通信線とDFPlayerとの通信線が同一であるため、0と1のデジタルピンは使えない**ので、代わりにDFRobotDFPlayerMiniの機能で、10,11をRX,TXとしています。
Aruidno &nbsp;&nbsp;&nbsp;  DFplayer
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RX     ⇔ TX
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TX     ⇔ RX

こうしないとデータの送受信ができないです。

また、
Serial.begin(115200);
mySerial.begin (9600);
の二つですが、**これは値が同じだと、出力が2回出てくることがあるので、違うようにしてます。**
さらに、DFplayer miniでは**ポートが9600でないと再生されない**ため、9600に指定します。
playFolder(1,1)により01フォルダの001.mp3を再生しています。

```
#include <SoftwareSerial.h>
#include "DFRobotDFPlayerMini.h"

SoftwareSerial mySerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;  // myDFPlayerオブジェクトの宣言

int folder = 1,file = 1;

//----------------------------------------------------------------------------------
// 起動時の処理
void setup() {
  Serial.begin(115200);
  mySerial.begin (9600);
  if (!myDFPlayer.begin(mySerial)) {
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while(true);
  }
  myDFPlayer.volume(30);  // 音量を設定
}

// 常時監視
void loop() {
    myDFPlayer.playFolder(folder, file);
    delay(3000);
}
```


# テスト
USBで給電し、SDカードに保存されたMP3ファイルの音楽再生を確認します。
実行したところ問題なく再生されましたが、再生中でジジジと雑音が鳴りました。
後で分かったのですが、抵抗器を二つつなげたところ雑音は鳴りませんでした。
3.3ボルトでも雑音が鳴ったのでなぜ抵抗器で雑音が消えたかは謎です。(多分、電流が大きすぎたからかもしれません。)

# 最後に
以上がDFplayerでの音楽再生方法でした。ご質問やご意見などありましたらお気軽にコメントください！今後のフィードバックにしていきます。