WRX micro:bitを車両で使う その38 mp3音声ファイルの再生(DFPlayer Mini)
今回はmicro:bitで「DFPlayer Mini」というモジュールを使って、mp3形式の音声ファイルの再生を行ってみます。micro:bit(V2)には本体にスピーカーやマイクを搭載していて、一応録音/再生も可能ですが、搭載メモリー量の関係からか約3秒間ほどしか録音は出来ないとの事。「DFPlayer Mini」モジュールはmicroSDメモリースロットを搭載しているので、SDメモリーからファイルを読み出して再生する事が出来ます。※録音機能はありません。
DFPlayer Miniモジュール
DFPlayer Miniモジュールはシリアル通信で制御出来るMP3プレーヤーで、micro:bitでも利用可能です。Microsoft MakeCodeに拡張機能としてブロックもあります。
モジュールの価格は1個1000円以下、販売元によっては500円以下の物もありますが、現在市場で出回っている物はモジュールの基板上に「DFPlayer Mini」と印刷された物(DFRobot社)と、「MP3-TF-16P」等と印刷された物があります。後者はいわゆる互換品となっていますが、購入時に「DFPlayer Mini」となっている場合でも、実際には「MP3-TF-16P」等が届く場合もある様です。モジュールの形状や仕様は一緒なので「MP3-TF-16P」等の場合でも利用方法に違いは無いと思われますが、確実に「DFPlayer Mini」を使用したい場合は、製造メーカーをハッキリと記載している販売元からの購入が良いと思います。私の場合はAmazonで購入(スピーカー2個とのセット品)しましたが、「MP3-TF-16P」の互換品でした。
またDFPlayer Miniモジュールで音声ファイルを再生するにあたって、別途スピーカーの接続が必要です。micro:bit(V2)本体に搭載しているスピーカーは利用出来ません。モジュールとスピーカーのセット品も販売されていますが、この場合は互換品モジュールの場合が多い様子です。さらにスピーカーはモジュールに接続しますが、スピーカー側への配線には半田付け作業が必要になる場合があります。なおモジュールでの仕様は3W以下、セット品に付いていたスピーカーは「8Ω-2W」でした。
DFPlayer Miniモジュールはmicro:bit等のマイコンボードを使用しなくても、スイッチや抵抗のみでも音声ファイルの再生が可能になっています。またMP3プレーヤーとなっていますが、仕様ではWAVやWMAにも対応となっています。その他に機能としてEQ(イコライザー)機能も搭載していて、大きさから見ると非常に多機能です。
micro:bitとの接続
micro:bitとの接続は単に音声ファイルを再生するだけであれば、電源の他にシリアル通信用の2本(RX・TX)だけで可能です(上記では他の物も接続していますが、必要ありません)。DFPlayer Miniの仕様として電源は「3.2V~5V」となっていて、micro:bit本体のみでも可能に思えますが、モジュール側での必要下限値に近いので、今回は別途ブレイクアウトボードで5Vを出力出来る物を使用しています。ブレイクアウトボードを使用せずに乾電池3本で4.5Vを供給しても良いかもしれません。
スピーカーはDFPlayer Miniのモジュールに直接繋ぎますが、DFPlayer Miniではスピーカーを2個使って、ステレオでの出力も可能になっています。ただしステレオ接続した場合はオンボードのパワーアンプを通さず、DAC出力になっています。ここではスピーカー1個のモノラルで接続しています。
プログラム
Microsoft MakeCodeでDFPlayer Mini用の拡張機能を追加します。検索欄に「DFPlayer」と入力して検索すると上記の拡張機能が表示されるので、クリックしてDFPlayer Mini用のブロックを追加します(拡張機能にあるDFPlayer Miniの写真は「MP3-TF-16P」ですが…)。追加すると下記のブロックが使用可能になります。
テスト用として下記の様にプログラムを作成しました。SDメモリーにはフォルダーを2つ、そのフォルダー内に各10個の音声ファイルを保存しています。Aボタンを押す度にフォルダー内の各音声ファイルを順送りで再生、Bボタンは逆送りで再生します。ABボタンを同時に押すと次のフォルダーへの切り替えと最初の音声ファイルを指定します。
「最初だけ」のブロック内で、DFPlayer Miniモジュールに接続したシリアル通信用の端子番号を指定します。上記ではボリューム(音量)設定も「最初だけ」のブロック内で設定していますが、ボタン操作で任意に変更する事も可能です。
あとは「play」あるいは「loop play」ブロックでSDメモリーに保存した音声ファイルを指定するだけですが、SDメモリーに音声ファイルを保存する際にはルールがあります。
補足(micro:bit本体の録音/再生機能)
micro:bit本体での録音/再生機能は、本体にマイクやスピーカーを搭載したV2以降で可能です。プログラムについては拡張機能の検索欄に「audio」と入力して検索すると、下記「Audio-recording」という拡張機能が表示されます。
表示された「Audio-recording」の拡張機能をクリックすると、下記のブロックが追加されます。
SDメモリーに音声ファイルを保存する
利用出来るSDメモリーは最大容量32GB(FAT16/32フォーマット)となっています(※別途用意する必要があります)。今回は以下の様にフォルダーを作成した上で音声ファイルを保存していますが、フォルダー名とファイル名についてはルールがある様です。
フォルダー名とファイル名のルールについては、DFPlayer Miniの仕様内のサンプルコードで、「Mp3 play」の項目を参照すると…(長いのでアコーディオン形式にしています)。
DFPlayer – A Mini MP3 Player Wikiより//----Mp3 play---- myDFPlayer.next(); //Play next mp3 delay(1000); myDFPlayer.previous(); //Play previous mp3 delay(1000); myDFPlayer.play(1); //Play the first mp3 delay(1000); myDFPlayer.loop(1); //Loop the first mp3 delay(1000); myDFPlayer.pause(); //pause the mp3 delay(1000); myDFPlayer.start(); //start the mp3 from the pause delay(1000); myDFPlayer.playFolder(15, 4); //play specific mp3 in SD:/15/004.mp3; Folder Name(1~99); File Name(1~255) delay(1000); myDFPlayer.enableLoopAll(); //loop all mp3 files. delay(1000); myDFPlayer.disableLoopAll(); //stop loop all mp3 files. delay(1000); myDFPlayer.playMp3Folder(4); //play specific mp3 in SD:/MP3/0004.mp3; File Name(0~65535) delay(1000); myDFPlayer.advertise(3); //advertise specific mp3 in SD:/ADVERT/0003.mp3; File Name(0~65535) delay(1000); myDFPlayer.stopAdvertise(); //stop advertise delay(1000); myDFPlayer.playLargeFolder(2, 999); //play specific mp3 in SD:/02/004.mp3; Folder Name(1~10); File Name(1~1000) delay(1000); myDFPlayer.loopFolder(5); //loop all mp3 files in folder SD:/05. delay(1000); myDFPlayer.randomAll(); //Random play all the mp3. delay(1000); myDFPlayer.enableLoop(); //enable loop. delay(1000); myDFPlayer.disableLoop(); //disable loop. delay(1000);
この中からフォルダー名とファイル名のパターンは、以下であると読み取れます。
- フォルダー名を「mp3」または「advert」とした場合はファイル名「0001.mp3(0~65535)」
- フォルダー名を「01(1~99)」とした場合はファイル名「001.mp3(1~255)」
- フォルダー名を「01(1~10)」とした場合はファイル名「001.mp3(1~1000)」
micro:bitの拡張機能ブロックでは、ファイル名のみを指定するブロックと、フォルダー名とファイル名を指定するブロックがあります。フォルダー名を「mp3」または「advert」とした場合はファイル名のみの指定ブロックを利用すると思われますが、ファイル名の指定範囲はどちらの場合も「1~255」まで(65535までは扱えない)になっています(下記)。
またSDメモリー内、あるいは指定フォルダー内の全ての音声ファイル全体をループ再生するブロックもありますが、この場合の音声ファイルの再生順はファイル名の番号ではなく、保存日時の順番になってしまう様です(未確認)。ファイル名の番号順で再生するには、プログラム側で対応する必要があります。ランダム再生にしたい場合は「乱数」のブロックが使えそうです。
音声を用意する
今回は音声ファイルとして、動画作成でも使用している「VOICEVOX」というテキスト読み上げソフトを使って作成しました。VOICEVOXは無料で利用出来ます。
VOICEVOXでは出力の際にファイル名パターンを指定出来るので、複数の音声ファイルを書き出す際にファイル名の先頭に番号(001~)を付ける事が可能です。後からファイル名を変更する手間が省けます。
またVOICEVOXの音声ファイルはWAV形式で出力され、DFPlayer Miniの仕様でもWAVを扱える事になっていますが、一応mp3に変換しました。WAVからmp3への変換には色々なアプリがありますが、私はFlicFlac(窓の杜)というアプリを利用しました。インストールは不要で、zipファイルの解凍後にexeファイルを実行するだけです。実行後、変換したい形式をボタンで選択し、ウィンドウ内にWAVの音声ファイルをまとめてドラッグアンドドロップすれば、同じ保存場所に変換して保存されます。変換後の音声ファイルを先のSDメモリーに保存します。
再生してみる
実際にmicro:bitからDFPlayer Miniを制御して音声ファイルを再生してみると、意外に聞き取りやすい音で再生されました。音量はブロックで「0~30」の範囲で設定出来ますが、最大30は結構大きな音量でした(モノラル接続の場合)。
注意点
DFPlayer Miniモジュールを利用する際に、気が付いた点などを挙げてみます。
- フォルダー名やファイル名が違っていたり、フォルダーやファイルその物が存在しない場合は、当然ですがモジュールに再生命令を出しても音声は何も出力されません。
- 音声の再生中に再び再生命令を出すと、それ以前に再生していた音声を停止して新たに再生します。1つ1つを確実に再生したい場合は、モジュールの「BUSY(play Status)」出力を利用して、「再生中」を監視する方法があります。
- シリアル接続の設定は「9600bps・Data bits=1・Checkout=none・Flow Control=none」とありますが、micro:bitで拡張機能ブロックを使用する場合は、特に設定の必要はありません。
- ノイズが大きい時は、TX配線に1kの抵抗を接続するとあります。
- DFPlayer Miniの互換品(MP3-TF-16P等)の中には、一部仕様の異なる物がある様です。
その他
いずれ記事内容に合わせた動画も作成する予定ですが、現在は車両での利用を想定して他にも機能を持たせています(実験中)。
「micro:bit」関連記事
以下は「micro:bit」タグの記事一覧です(投稿順)。現在の記事とこれ以降に投稿した記事も含みます。「その24」までの記事ではmicro:bit本体のバージョン「1.5」を使用しています。クリックで開きます
- WRX micro:bitを車両で使う その1 micro:bitの購入
- WRX micro:bitを車両で使う その2 Microsot MakeCodeとスマホ用アプリ
- WRX micro:bitを車両で使う その3 micro:bitの仕様と購入したブレイクアウトボード
- WRX micro:bitを車両で使う その4 本体ファームウェアの更新とWebUSB
- WRX micro:bitを車両で使う その5 無線機能の利用
- WRX micro:bitを車両で使う その6 方位センサーの利用
- WRX micro:bitを車両で使う その7 加速度センサーの利用
- WRX micro:bitを車両で使う その8 micro:bitからSIドライブのモード切替
- WRX micro:bitを車両で使う その9 サーボモーターの利用(準備編)
- WRX micro:bitを車両で使う その10 サーボモーターの利用(動作編)
- WRX micro:bitを車両で使う その11 可動式雲台を作る(2軸編)
- WRX micro:bitを車両で使う その12 可動式雲台を作る(1軸編)
- WRX micro:bitを車両で使う その13 連続回転サーボモーターの利用
- WRX micro:bitを車両で使う その14 Bluetoothでスマホから操作(データ受信)を行う
- WRX micro:bitを車両で使う その15 LCDパネル(I2C LCD1602・2004)の利用
- WRX micro:bitを車両で使う その16 シリアル通信(RS232C)を行う
- WRX micro:bitを車両で使う その17 光センサーと温度センサーの利用
- WRX micro:bitを車両で使う その18 LEDのフォントとスクロールスピードを変える
- WRX micro:bitを車両で使う その19 ELM327の車両との通信を確認する
- WRX micro:bitを車両で使う その20 アスキーコード16進数から数値10進数への変換
- WRX micro:bitを車両で使う その21 車両からエンジン回転数を得る
- WRX micro:bitを車両で使う その22 7セグメントLEDの利用(TM1637ドライバ)
- WRX micro:bitを車両で使う その23 DCモーターを制御する(TB6612FNG・DRV8833)
- WRX micro:bitを車両で使う その24 ステッピングモーターを制御する(ULN2003ドライバ)
- WRX micro:bitを車両で使う その25 micro:bit バージョン2.0を購入(2021年12月 v2.2アナウンスあり)
- WRX micro:bitを車両で使う その26 バージョン2.0で追加されたMakeCodeブロック
- WRX micro:bitを車両で使う その27 バージョン2.0の初期状態と追加された機能
- WRX micro:bitを車両で使う その28 新バージョン(v2.0)のI2C通信
- WRX micro:bitを車両で使う その29 環境モニターを作る(気温・気圧・湿度編)
- WRX micro:bitを車両で使う その30 環境モニターを作る(二酸化炭素・有機化合物編)
- WRX micro:bitを車両で使う その31 環境モニターを作る(LCD表示・動作確認編)
- WRX micro:bitを車両で使う その32 環境モニターを作る(RTCモジュール追加編)
- WRX micro:bitを車両で使う その33 環境モニターを作る(ロギングモジュール追加編)
- WRX micro:bitを車両で使う その34 環境モニターを作る(ログデータ記録編)
- WRX micro:bitを車両で使う その35 車内のCO2濃度と換気について
- WRX micro:bitを車両で使う その36 新バージョン(v2.0)でのI2C通信の問題解決
- WRX micro:bitを車両で使う その37 Microsoft MakeCodeの新バージョン(v4)と新機能データロガー
- WRX micro:bitを車両で使う その38 mp3音声ファイルの再生(DFPlayer Mini)
- WRX micro:bitを車両で使う その39 車速パルス信号から速度を計算する
- WRX micro:bitを車両で使う その40 フルカラーLED(WS2812B)でメーターを作る
- WRX micro:bitを車両で使う その41 フルカラーLEDマトリックス(WS2812B)で時計を作る
- WRX micro:bitを車両で使う その42 フルカラーLEDマトリックス(WS2812B)でピクセルアートアニメーションを作る
その他
FA用PLCとELM327を使用した「OBD2」関連の記事は以下の記事から始まります。注記
-
- このブログ内で書いている内容はあくまで私の利用する製品(アプリ含む)や機器での場合です。他メーカーの製品や機器をはじめ、同じメーカーの製品・機器であってもバージョン違い等の場合もあるので、記事内容の保証や責任を負う事は出来ません。
- 記事内で紹介している製品や、その他の類似製品を購入・利用する場合はそのメーカーや購入先で仕様等を確認し、自己判断と自己責任の下で利用して下さい。
- 記事内で公開しているmicro:bit用プログラムは自由に利用・改変して頂いて構いません。ただし不具合やバグもありますので、プログラムを利用した際の故障や事故等についての保証や責任を負う事は出来ません。自己判断と自己責任の下で利用して下さい。
- micro:bit製品やプログラミング、その他記事内容について個別の問合せや依頼を頂いても回答する事は出来ませんので、予め御了承下さい。
- BBC micro:bitは、micro:bit教育財団の登録商標です。その他のブランド名または製品名は各所有者の商標です。