購入してから数か月眠らせていたDFPlayer Proをようやく触りました!
はんだ付けが必要なので、ちょっと見送ってたんですよね…。
別に苦手じゃないんだけど。
今回は、明確に作りたい物のイメージがありました。
作りたいもの(機能)
・ボタンが2つあり、それぞれで異なる音声を再生させる
ボタンA → 「1.wav」を再生
ボタンB → 「2.wav」を再生
・ボタンAは+1ずつインクリメント、ボタンBは9999を7セグに表示させる
こんな感じのものです。
なので、準備するのは下記のパーツ
使ったもの
- Arduino nano
- DFPlayer Pro
- スピーカー
- ボタン(2個)
- VOICEVOX
Arduinoでの7セグの使い方はこちら。
VOICEVOXというサービスは、商用・非商用問わず無料で使えるテキスト読み上げソフトウェアです。
利用規約がありますが、ハードルは高くありません。
今回使用した音声データは、こちらのソフトを使用して作成しました。
DFPlayerProの使い方は、公式のWikiから読み解いていきました。
Githubにも、同様の情報があります。
まずは、Arduino IDEのライブラリに「DFRobot_DF1201S」を追加します。
検索すればすぐ見つかるので、ここは問題無いと思います。
DFPlayerProの良いところは、PCとUSB接続すると通常のUSBメモリを扱うようにファイルを追加できる点です。
このようにして、ファイルを2つドラッグ&ドロップでDFPlayerProに入れます。
名前はシンプルに「1.wav」「2.wav」にしました。
あとはサンプルプログラムを見ながら、使いたい部分を取り出します。
今回私が変更した部分は2箇所。
// ALLCYCLE → SINGLE
DF1201S.setPlayMode(DF1201S.SINGLE);
// 空欄 → 1,2をそれぞれ追加
DF1201S.playFileNum(1); // 1.wav の再生
DF1201S.playFileNum(2); // 2.wav の再生
ALLCYCLEだと、DFPlayerPro内のファイルを順番に延々と繰り返し再生してしまいます。
ボタンを押したら1回だけ再生させたかったので、ここのパラメータはSINGLEに変更しました。
再生するファイルを指定する為、playFileNumで数字を指定しました。
たまたま数字のファイル名にしていましたが、ファイル名が文字列の場合はどうなるのか試していません。
あとは、必要な部品を繋いでいきます。
今回は下記のような感じで接続しました。
結構シンプルな配線になります。
スピーカーは1つしか無かったので、DFPlayerProのL+とL-に接続しました。
配線済みの様子がこちら。
では、動作確認の様子をご覧ください!
推しがラジオで例のボタンについて話していたので、勢いで作っちゃいました。
色んなところに電子工作のヒントがありますね~。
とっても楽しかったです!
最後に、スケッチを残しておきます。
// 7seg用
#include <TM1637.h>
#define PIN_CLK (5) //D5pin
#define PIN_DIO (6) //D6pin
TM1637 tm(PIN_CLK, PIN_DIO);
int i;
// BTN
int BTN_A=0;
int BTN_B=0;
// DFPlayerPro用
#include <DFRobot_DF1201S.h>
#include <SoftwareSerial.h>
SoftwareSerial DF1201SSerial(2, 3); //RX TX
DFRobot_DF1201S DF1201S;
void setup(void){
// DFPlayerPro
Serial.begin(115200);
DF1201SSerial.begin(115200);
while(!DF1201S.begin(DF1201SSerial)){
Serial.println("Init failed, please check the wire connection!");
delay(1000);
}
/*Set volume to 20*/
DF1201S.setVol(20);
/*Enter music mode*/
DF1201S.switchFunction(DF1201S.MUSIC);
delay(2000);
DF1201S.setPlayMode(DF1201S.SINGLE);
// 7seg
tm.init();
tm.set(BRIGHT_TYPICAL);
tm.clearDisplay();
i=0; //リセットボタンで7seg初期化する
// BTN
pinMode(8, INPUT);
pinMode(9, INPUT);
}
void loop(){
// ボタンが押された時=LOWになる
BTN_A = digitalRead(8);
if (BTN_A==LOW){
i++;
DF1201S.playFileNum(1); // 1.wav
delay(75);
}
BTN_B = digitalRead(9);
if (BTN_B==LOW){
i=9999;
DF1201S.playFileNum(2); // 2.wav
delay(75);
}
//4桁の7セグに表示
tm.displayNum(i);
}
色々と買い揃えておくと、必要な時にサッと作れていいですよね。
もう無駄遣いなんて言わせない…!