【Raspberry Pi Pico入門 – 応用編】MP3ファイルを再生してみる

2024年6月10日Raspberry Pi Pico入門,応用編Arduino,Raspberry Pi Pico

概要

今回はMP3プレーヤーモジュールを使ってMP3ファイルを再生してみます。
MP3ファイルは生の音声データを圧縮しているファイル形式のため、tone()等を使って再生するのはかなりハードルが高いです。そういった事情もあり、世の中にはSDカードに保存されているMP3ファイルを解凍して電圧データに変換してくれるICが存在しており、そのICとSDカードスロットを基板に載せてブレッドボードに載せられる形にしてくれているモジュールも存在します。

今回はMP3モジュールを使って音声を再生する方法を解説します。

実行環境

IDE:Arduino IDE 2.3.2
MCU:Raspberry Pi Pico

MP3モジュール:DFPlayer Mini

Amazon購入ページより引用

モジュールに直接スイッチを取り付けて単体でMP3プレーヤーとして使えて、シリアル通信でマイコンから操作することができ、3Wモノラルアンプが内蔵されている上、値段もAmazonで300~400円というモジュールです。唯一のネックは曲の途中から再生が出来ない点ですが、効果音を鳴らしたい等の用途なら必要ないかと思います。(一時停止は可能です)
MP3ファイルは別売のSDカードに保存するため、別途SDカードの購入が必要です。読み込みは低速な通信を使うので、試すだけなら中華製の安いので十分です。

回路

以下のように配線します。スピーカーはスターターキットの圧電スピーカーを使ってください。
※圧電ブザーと間違えやすいので気を付けてください。どちらかわからなくなったときは極性に注意しつつブレッドボードの5VとGNDに接続してください。ピーっと鳴ったら圧電ブザー、鳴らなかったら圧電スピーカーです。

回路図は下のようになっています。ネットラベルのTX(送信)、RX(受信)はマイコン側に合わせています。

ライブラリのインストール

ライブラリについては以下で説明しています。

今回は「DFRobotDFPlayerMini」というライブラリをインストールします。DFRobot社が作成しているライブラリで、いくつか試した中では一番安定して動いてくれました。
↓英語ですが説明文がかなり丁寧です。

ライブラリーマネージャーの検索欄に「DFRobotDFPlayerMini」と入力し、以下のライブラリをインストールしてください。

MP3ファイルの準備

SDカードにMP3ファイルを保存します。MP3モジュールで再生したいMP3ファイルを指定する方法はいくつかあるのですが、以下の方法が一番わかりやすくて楽でした。

  • SDカードに「mp3」という名前のフォルダを作成する。
  • 「mp3」フォルダの中にMP3ファイルを保存する
  • 全てのMP3のファイル名を「0001〇〇〇〇.mp3」のように【数字4桁】+【任意の名前】となる名前に変更する

ちょうどいいMP3ファイルがない方向けにテスト音声を用意しておきます。VOICEVOXを使ってずんだもんに「〇番のファイルなのだ」と喋らせています。

OneDriveのリンク

コーディング

新しくスケッチを作成し、以下の内容をコピペしてください。MP3モジュールとの通信はUART0を使っています。

#include <DFRobotDFPlayerMini.h>

DFRobotDFPlayerMini mp3;

void setup() {
  //モジュールが起動するまで待機
  delay(1000);

  //シリアル通信の初期化
  Serial1.setTX(0);
  Serial1.setRX(1);
  Serial1.begin(9600);

  if (!mp3.begin(Serial1, true, true)) {
    // 2秒以内に初期化できなかった場合はLED点滅の無限ループ
    // 配線を間違えていないか確認してください
    pinMode(LED_BUILTIN, OUTPUT);
    digitalWrite(LED_BUILTIN, LOW);
    while (1) {
      digitalWrite(LED_BUILTIN, HIGH);
      delay(100);
      digitalWrite(LED_BUILTIN, LOW);
      delay(100);
    }
  }

  //ボリュームの調整(0~30で指定)
  mp3.volume(30);
}

void loop() {
  //「mp3」フォルダに入っている0001.mp3を再生
  mp3.playMp3Folder(1);
  delay(5000);

  //「mp3」フォルダに入っている0002.mp3を再生
  mp3.playMp3Folder(2);
  delay(5000);

  //「mp3」フォルダに入っている0003.mp3を再生
  mp3.playMp3Folder(3);
  delay(5000);

  //「mp3」フォルダに入っている0004.mp3を再生
  mp3.playMp3Folder(4);
  delay(5000);

  //「mp3」フォルダに入っている0005.mp3を再生
  mp3.playMp3Folder(5);
  delay(5000);
}

動作確認

0001.mp3から順番に再生できれば成功です。再生中はMP3モジュールのLEDが点灯します。
ときどきですがSDカードの読み込みが上手くできない時がありました。その時はSDメモリカードフォーマッター等でSDカードをフォーマットしてmp3ファイルを保存しなおすと読み込めるようになりました。

応用編

音質のいいスピーカーを使う

動作確認で試した圧電スピーカーでは音質はかなり悪かったかと思います。MP3モジュールに内蔵されているモノラルアンプは3Wなので、W数が3Wか3Wより小さいスピーカーなら交換可能です。(インピーダンスについては調査中です。。。8Ωで動作させている情報が多いので8Ω?)

Amazon購入ページより引用

ライン出力で大きな音を出す

MP3モジュールにはライン出力用の端子があります。Amazonでブレッドボードに差せるイヤホンジャックが売っているので、これをライン出力端子に接続することで市販のスピーカーやイヤホンに音声出力が出来ます。

Amazon購入ページより引用

配線は↓これです。DACと書いてあるピンがライン出力です。

回路図は↓こうなっています。

コンパクトなステレオ出力

ステレオで音を出したい、けど回路はコンパクトにしたい、という時はライン出力をステレオアンプモジュールに繋ぐことでコンパクトな回路でステレオ出力が出来ます。

回路図で例に挙げたアンプは3Wですが、もっと大きいアンプを繋げば大きいスピーカーを接続できます。接続方法はだいたい似たような感じですし色々なアンプがあるので、まずは使いたいスピーカーから選んでもいいかと思います。

Amazon購入ページより引用
(3W・音量調整あり)
Amazon購入ページより引用
(3W・音量調整なし)
Amazon購入ページより引用
(10W・音量調整あり)

その時の配線は↓これです。

回路図は↓こうなっています。