0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

71歳の... microSDカード内の音楽ファイル(.MP3)を連続再生させてみた

Last updated at Posted at 2025-05-15

 SDカード内の複数の音楽ファイルを連続再生させる例が、今のところネット上で見つからなかったのでやってみました。とても簡潔にできました。環境/構成は以下です。

1.Windows 11 Pro
2.Arduino IDE 2.3.6
3.ESP32 Dev Module(Arduino IDE 内でのボード名)
4.SPI接続 microSDカードスロットモジュール
5.PCM5102A使用 32bit/384kHz DAC モジュールhttps://store.shopping.yahoo.co.jp/nfj/h135.html

 実行ファイルサイズが大きくなるのでコンパイル前に、ツールで「Huge App」を選択します。
HugeApp.jpg
あらかじめ、MP3ファイル名を

track001.mp3
track002.mp3
・・・

とリネームし、SDカードに保存しておきます。ルートで構いません。
 次の点に注意が必要です。ESP32のボードマネージャ

esp32 by Espressif Systems version 3.2.0

に問題があるようです。以前はコンパイル自体出来ませんでした。今回できましたが動作は不安定でした。なので

esp32 by Espressif Systems version 3.0.1

に巻き戻しています。ピンの接続はスケッチ内の通りです。DACから、ダイソーの300円スピーカーを通して音を聴いてます。十分良い音と思います。初めてsprintfを使ってloop内で、動的に(?)文字列生成してみました。

ESP32_I2Saudio_SD.ino
//**********************************************************************************************************
//*    audioI2S-- I2S audiodecoder for ESP32,                                                              *
//**********************************************************************************************************

#include "Audio.h"
#include "SD.h"

#define SPI_MOSI      23
#define SPI_MISO      19
#define SPI_SCK       18
#define SD_CS         5
#define I2S_DOUT      25
#define I2S_BCLK      27
#define I2S_LRC       26

Audio audio;

void setup() {
    Serial.begin(115200);
    SD.begin(SD_CS, SPI, 24000000, "/sd");
    audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT);
    audio.setVolume(6); // 0...21
}

char song[14];
int n=0;
int err=0;

void loop()
{
    if(err<10){// 10回のファイルエラーで空白ループに移行
        audio.loop();
        if(!audio.isRunning()){
            n++;
            sprintf(song,"track%03d.mp3",n);
            if(!audio.connecttoFS(SD, song)){
                err++;// 無限ループ回避
            };
        }
    }
}

// optional
void audio_info(const char *info){
    Serial.print("info        "); Serial.println(info);
}
void audio_eof_mp3(const char *info){  //end of file
    Serial.print("eof_mp3     "); Serial.println(info);
}

 最後までお読みいただきありがとうございました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?