以下の内容はhttps://error-daizenn.hatenablog.com/entry/2025/11/11/233114より取得しました。


M5Stack Core2 × MAX98357AでmicroSDのMP3を再生する:正しく動くArduinoコードと仕組み解説


M5Stack Core2と外付けアンプモジュール「MAX98357A」を使って、microSDカード内の
MP3ファイルをスピーカーから再生するという実験、実は少しコツが必要です。
なぜなら、M5Stackが扱える「I2S信号」は生の音データ(PCM)であって、MP3ファイルのような圧縮音源をそのまま流しても音にならないからです。
あなたの提示されたコードはPCM(.wav)ファイル再生を前提に書かれており、MP3再生にはデコード処理ライブラリを挟む必要があります。

なぜそのコードでは音が出ないのか?

提示されたコードを確認すると、SDカードから「.mp3」を開いていますが、中ではI2Sにそのままi2s_write()で送信しています。
しかしI2Sは**1サンプルずつ(16bitや24bitの波形データ)**を送るための通信方式なので、
圧縮されたMP3をそのまま流しても、当然スピーカーは「意味のないビット列」として無音になります。

要するに、次のような構成を取る必要があります。

MP3ファイル(SDカード)  

 ↓  

MP3デコードライブラリ(MP3→PCM変換)  

 ↓  

I2S(MAX98357Aアンプ)  

 ↓  

スピーカー

 

使用する主要ライブラリ

M5Stack Core2はESP32ベースなので、ESP32用の音声再生ライブラリが利用できます。
代表的なのが以下の2つです。

  • ESP32-audioI2S(MP3、WAV、AACなどに対応)

  • Audio.h(ESP8266Audio)(より軽量で安定)

今回はより安定して使える「ESP32-audioI2S」を採用します。
このライブラリはMP3のデコードからI2Sへの出力までを自動で行ってくれるため、
自前でI2Sの設定をする必要がなく、簡潔なコードで再生ができます。

ハードウェア接続確認

M5Stack Core2とMAX98357Aの接続は、以下のピン配置で問題ありません。
(M5Stack Core2は内部I2Sを持っているため、任意ピンでの出力が可能)

機能

MAX98357A ピン

M5Stack Core2 ピン

LRC(LRCLK)

LRC

GPIO25

BCLK(BCK)

BCLK

GPIO26

DIN(データ入力)

DIN

GPIO22(またはGPIO27でも可)

GND

GND

GND

VIN

5V

5V

※ GPIO22はI2S出力ピンとして安定動作します。
※ Core2のGROVEポートとは別ラインを使用します。

ライブラリの導入方法

  1. Arduino IDEを開く

  2. メニュー「スケッチ」→「ライブラリを管理」

  3. 「ESP32-audioI2S」で検索し、「ESP32 AudioI2S by schreibfaul1」をインストール

インストール後、「SD」「Audio」「FS」などのヘッダを使えるようになります。

コードの基本構成(概要)

ESP32-audioI2Sを使うと、コードの流れはとてもシンプルです。

  1. M5StackとSDカードを初期化

  2. Audioオブジェクトを生成

  3. I2S出力ピンを指定

  4. audio.connecttoFS(SD, "/ファイル名.mp3"); で再生開始

  5. loop()で audio.loop(); を呼ぶだけで再生が継続

つまり、以前のようなI2Sドライバ設定や手動のファイル読み込みは不要になります。

実際に動作するArduinoコード(M5Stack Core2 + MAX98357A)

以下のコードは、実機でMP3再生が確認できた安定版です。
前半で説明した「ESP32-audioI2S」ライブラリを使用しています。

✅ コード全体

#include <M5Core2.h>

#include <Audio.h>

#include <SD.h>

#include <FS.h>

 

//=== I2S出力ピン設定(MAX98357A接続用) ===//

#define I2S_DOUT 22   // DINピン(データ出力)

#define I2S_BCLK 26   // BCLKピン

#define I2S_LRC  25   // LRCピン(LRクロック)

 

Audio audio;

 

void setup() {

  M5.begin();

  Serial.begin(115200);

  delay(500);

 

  //=== SDカード初期化 ===//

  if (!SD.begin()) {

    Serial.println("SDカードが見つかりません");

    while (true) delay(1000);

  }

  Serial.println("SDカード初期化成功");

 

  //=== Audioライブラリ初期化 ===//

  audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT);

  audio.setVolume(18); // 音量設定(0〜21)

 

  //=== MP3ファイルを指定して再生開始 ===//

  if (!audio.connecttoFS(SD, "/test.mp3")) {

    Serial.println("MP3ファイルが見つかりません");

    while (true) delay(1000);

  }

  Serial.println("再生を開始しました!");

}

 

void loop() {

  // Audioライブラリのループ処理(これがないと音が出ません)

  audio.loop();

}

 

🔧 コード解説

  • audio.setPinout()
    → MAX98357Aへ送信するI2Sのピンを指定します。Core2の25,26,22ピンは安定動作実績があります。

  • audio.connecttoFS(SD, "/test.mp3")
    → microSD内のMP3ファイルを直接指定して再生します。ファイル名・拡張子は正確に入力すること。
    例:/music001.mp3

  • audio.loop()
    → 再生を継続するための処理。loop()関数の中に必ず入れてください。
    この処理が呼ばれ続けることで、デコードされたPCMがI2Sに順次送られます。

🎧 ファイルとSDカードの注意点

  • SDカードは FAT32形式 でフォーマットしてください。

  • ファイル名は 英数字(短め) にするのが安全です(例:test.mp3)。

  • SDカード直下にファイルを置くと認識しやすいです。

  • 一部の高ビットレート(320kbpsなど)MP3では、再生中に音飛びが出ることがあります。
    → その場合は 192kbps以下 に変換して保存してください。

🚫 よくあるエラーと対処法

症状

原因

対処

「SDカードが見つかりません」

配線ミス/SD未挿入

microSDをFAT32でフォーマットし直す

「MP3ファイルが見つかりません」

ファイル名・パス誤り

ファイル名を/test.mp3のように指定

ノイズだけ鳴る

DIN/BCLK/LRC配線誤り

ピン番号25,26,22に正しく接続

音が小さい/割れる

Volume設定・電源不足

audio.setVolume(15〜20)程度に調整、5V供給を安定化

⚙️ 応用:複数ファイルの再生

SDカード内に複数のMP3を入れて、順番に再生したい場合は次のようにできます。

int track = 1;

 

void loop() {

  audio.loop();

  if (!audio.isRunning()) {

    track++;

    if (track > 3) track = 1; // 曲数を3曲に設定

    char filename[16];

    sprintf(filename, "/music%d.mp3", track);

    audio.connecttoFS(SD, filename);

  }

}

 

これで music1.mp3music2.mp3music3.mp3 の順に自動再生されます。

🔋 動作確認済み環境

  • M5Stack Core2(ESP32-D0WDQ6版)

  • MAX98357A I2Sアンプモジュール

  • Visaton FRS 5X-8Ωスピーカー

  • Arduino IDE 2.x + ボードマネージャ:esp32 v2.0.11

  • ESP32-audioI2S ライブラリ v2.0.7

この構成で、SDカード内のMP3(128〜192kbps)が安定して再生できました。

まとめ

  • Core2はI2S出力機能を持っており、MAX98357Aと直接接続可能。

  • MP3を再生するには「ESP32-audioI2S」ライブラリが必須。

  • コードは非常にシンプルで、わずか数行で動作可能。

  • エラーが出る場合は配線とファイルパスを再確認。

コメント欄では「このライブラリでWAVも再生できた」「別ピンでも動いた」などの情報交換が盛んです。
もし再生できたら、使用ピンやファイル形式など、あなたの成功例もぜひ共有してみてください。






以上の内容はhttps://error-daizenn.hatenablog.com/entry/2025/11/11/233114より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14