MP3s - i2s DAC - SDHC

Übersicht

Verbindungen zum I2S Dac (PCM5102a zB)

Die SD Karte muss wie gewohnt verbunden werden

Auf manchen Boards sind Pins wie XMT vorhanden. Da muss ins Datenblatt geguckt werden wie diese beschaltet werden müssen (In den meisten Fällen auf gnd).

Der Sketch kann (nicht VBR) MP3s problemlos abspielen. Der Bibliothek Inhaber rät dazu die CPU Frequenz auf 160MHz festzulegen.

https://github.com/earlephilhower/ESP8266Audio

sketch.cpp
#include "Arduino.h"
 
#include <SD.h>
#include <HTTPClient.h>
#include <SPIFFS.h>
 
#ifdef ESP32
  #include <WiFi.h>
  #include "SPIFFS.h"
#else
  #include <ESP8266WiFi.h>
#endif
 
//out = new AudioOutputI2SDAC();
#include "AudioFileSourceSD.h"
#include "AudioGeneratorMP3a.h"
#include "AudioOutputI2SDAC.h"
 
AudioGeneratorMP3a *mp3;
AudioFileSourceSD *file;
AudioOutputI2SDAC *out;
 
void setup()
{
  WiFi.mode(WIFI_OFF);
  Serial.begin(115200);
  if(!SD.begin()){
        Serial.println("Card Mount Failed");
        return;
  }
  uint8_t cardType = SD.cardType();
 
  if(cardType == CARD_NONE){
    Serial.println("No SD card attached");
    return;
  }
  Serial.print("SD Card Type: ");
  if(cardType == CARD_MMC){
    Serial.println("MMC");
  } else if(cardType == CARD_SD){
    Serial.println("SDSC");
  } else if(cardType == CARD_SDHC){
    Serial.println("SDHC");
  } else {
    Serial.println("UNKNOWN");
  }
 
  uint64_t cardSize = SD.cardSize() / (1024 * 1024);
  Serial.printf("SD Card Size: %lluMB\n", cardSize);
 
  delay(1000);
  Serial.printf("SD Card MP3 start\n");
  file = new AudioFileSourceSD("/musik.mp3");
  out = new AudioOutputI2SDAC();
  mp3 = new AudioGeneratorMP3a();
  mp3->begin(file, out);
}
 
void loop()
{
  if (mp3->isRunning()) {
    if (!mp3->loop()) mp3->stop();
  } else {
    Serial.printf("MP3 done\n");
    delay(1000);
  }
}