Raspberry Pi Pico で mp3 再生

Raspberry Pi Pico で mp3 ファイルの再生ができないかを試してみました。とりあえずはスピーカーから鳴ったので目標は達成できました。

使用するもの

Arduino IDE 関連

今回は Raspberry Pi Pico を Arduino のようにして使うものとして設定しました。そのため Arduino IDE 1.8.19 にRaspberry Pi Pico/RP2040 を追加登録して使用しました。

ボードマネージャーでこれを出現させるためには、設定から「追加のボードマネージャーのURL」にて以下の URL を設定します。

https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json

また、再生するデータをLittleFS Data 領域に配置して書き込む都合、 Arduino IDE に外部ツールを追加することも必要でした。これが、現在の Arduino IDE 2.x バージョンでは使用不可能なため、 Arduino IDE は 1.8.x のバージョンを使用しています。この外部ツールは次のページで公開されているものです。スケッチを配置したフォルダに “data” フォルダを作成して、その中に配置したいデータを置きます。

ハードウェア関連

Raspberry Pico の他に、I2S データを再生するための DAC が必要です。以前に使用していたMAX98357A 搭載 D 級アンプを今回も使用しています。具体的には Adafruit のものを使っていますが、他のものでも同様に使えるのではと思います。

created by Rinker
エイダフルート(Adafruit)
¥1,474 (2023/02/04 09:33:15時点 Amazon調べ-詳細)

ライブラリなど

ライブラリは、 ESP8266Audio を使用します。こちらは現時点で Raspberry Pi Pico (RP2040) に対応した状態となっているので、そのまま使います。

実装・ソースコード

今回実装したソースコードを以下に示します。 以前の ESP32 版と違うところは、 ファイルシステムとして LittleFS を使用している点です。以前は SPIFFS を使用していましたが、 RP2040 版では LittleFS を使うようにとのことです。それ以外は、ほぼ同じソースコードとなっています。

#include <Arduino.h>
#include "AudioFileSourceLittleFS.h"
#include "AudioGeneratorMP3.h"
#include "AudioOutputI2S.h"

AudioGeneratorMP3 *pMp3;
AudioFileSourceLittleFS *file;
AudioOutput *pOutput;

void setup() {
  Serial.begin(115200);
  delay(1000);
  LittleFS.begin();
  file = new AudioFileSourceLittleFS("/sample.mp3");
  pOutput = new AudioOutputI2S();
  pMp3 = new AudioGeneratorMP3();

  delay(3000);

  if(!pMp3->begin(file, pOutput)) {
    Serial.println("begin failed.");
  }
}

void loop() {
  if (pMp3->isRunning()) {
    if(!pMp3->loop()) {
      pMp3->stop();
      Serial.println("MP3 end");
    }
  } else {
    delay(1000);
  }
}

ファイルシステム用のサイズ割り当て

スケッチとファイルシステム用のサイズの割合を決めておきます。以下に示すように Flash Size の項目から、スケッチとファイルシステム (FS) の容量を選択します。

データの転送について

スケッチを配置したフォルダで data フォルダを作成し、その中に sample.mp3 というファイルを配置しておきます。その状態を書き込むには、ツールメニューから Pico LittleFS Data Upload のメニューを選択します。このメニューが出現していない場合、先に述べたツールのセットアップを完了させてください。

配線情報

Raspberry Pico と I2S DAC の接続方法について説明します。ピンごとの配線は以下の表のとおりです。

Raspberry Pi PicoI2S DAC (アンプ)
GP28Din
GP26LRC
GP27BCLK
3V3Vin
GNDGND

まとめ

この状態で適当な mp3 を再生してみたところ、とりあえず鳴るには鳴りました。ですが、品質はイマイチで再生速度も若干遅いような感じでした。モノラルの音声、可変ビットレート(Windows のプロパティで見たところ 69kbps) という、割と軽量なものだったのですが、もっとシンプルにする必要があるのかもしれません。

部品点数が少なく、なるべくPICO 単体で再生したいという要件であればこの実装をベースとして試行錯誤していってもよいのかなと思いました。

参考

その他

まともな mp3 再生をしたいのであれば DFPlayer MP3 などのモジュールを使い、 Raspberry Pi Pico からは再生などの支持を行う、というようにするのが安全・安定した動作になるのではないかと思いました。

created by Rinker
KKHMF
¥886 (2023/02/04 09:33:15時点 Amazon調べ-詳細)
関連記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください