تشغيل ملفات mp3 وm4a وwav من بطاقة SD عبر I2S مع أجهزة خارجية. يتم تضمين وحدة فك الترميز HELIX-mp3 و-aac. يوجد أيضًا وحدة فك ترميز OPUS لـ Fullband ووحدة فك ترميز n VORBIS ووحدة فك ترميز FLAC. يعمل مع MAX98357A (مضخم صوت 3 وات مع DAC)، متصل بثلاثة خطوط (DOUT، BLCK، LRC) بـ I2S. للستيريو هناك حاجة إلى نوعين MAX98357A. يعمل AudioI2S مع UDA1334A (Adafruit I2S Stereo Decoder Breakout Board)، PCM5102A وCS4344. قد تعمل المخلفات الخطرة الأخرى ولكن لم يتم اختبارها. يلعب أيضا تيارات الجليدية وGoogleTTS. يمكن تجميعها مع Arduino IDE. ويكي
# include " Arduino.h "
# include " WiFi.h "
# include " Audio.h "
# include " SD.h "
# include " FS.h "
// Digital I/O used
# define SD_CS 5
# define SPI_MOSI 23
# define SPI_MISO 19
# define SPI_SCK 18
# define I2S_DOUT 25
# define I2S_BCLK 27
# define I2S_LRC 26
Audio audio;
String ssid = " ******* " ;
String password = " ******* " ;
void setup () {
pinMode (SD_CS, OUTPUT); digitalWrite (SD_CS, HIGH);
SPI. begin (SPI_SCK, SPI_MISO, SPI_MOSI);
Serial. begin ( 115200 );
SD. begin (SD_CS);
WiFi. disconnect ();
WiFi. mode (WIFI_STA);
WiFi. begin (ssid. c_str (), password. c_str ());
while (WiFi. status () != WL_CONNECTED) delay ( 1500 );
audio. setPinout (I2S_BCLK, I2S_LRC, I2S_DOUT);
audio. setVolume ( 21 ); // default 0...21
// or alternative
// audio.setVolumeSteps(64); // max 255
// audio.setVolume(63);
//
// *** radio streams ***
audio. connecttohost ( " http://stream.antennethueringen.de/live/aac-64/stream.antennethueringen.de/ " ); // aac
// audio.connecttohost("http://mcrscast.mcr.iol.pt/cidadefm"); // mp3
// audio.connecttohost("http://www.wdr.de/wdrlive/media/einslive.m3u"); // m3u
// audio.connecttohost("https://stream.srg-ssr.ch/rsp/aacp_48.asx"); // asx
// audio.connecttohost("http://tuner.classical102.com/listen.pls"); // pls
// audio.connecttohost("http://stream.radioparadise.com/flac"); // flac
// audio.connecttohost("http://stream.sing-sing-bis.org:8000/singsingFlac"); // flac (ogg)
// audio.connecttohost("http://s1.knixx.fm:5347/dein_webradio_vbr.opus"); // opus (ogg)
// audio.connecttohost("http://stream2.dancewave.online:8080/dance.ogg"); // vorbis (ogg)
// audio.connecttohost("http://26373.live.streamtheworld.com:3690/XHQQ_FMAAC/HLSTS/playlist.m3u8"); // HLS
// audio.connecttohost("http://eldoradolive02.akamaized.net/hls/live/2043453/eldorado/master.m3u8"); // HLS (ts)
// *** web files ***
// audio.connecttohost("https://github.com/schreibfaul1/ESP32-audioI2S/raw/master/additional_info/Testfiles/Pink-Panther.wav"); // wav
// audio.connecttohost("https://github.com/schreibfaul1/ESP32-audioI2S/raw/master/additional_info/Testfiles/Santiano-Wellerman.flac"); // flac
// audio.connecttohost("https://github.com/schreibfaul1/ESP32-audioI2S/raw/master/additional_info/Testfiles/Olsen-Banden.mp3"); // mp3
// audio.connecttohost("https://github.com/schreibfaul1/ESP32-audioI2S/raw/master/additional_info/Testfiles/Miss-Marple.m4a"); // m4a (aac)
// audio.connecttohost("https://github.com/schreibfaul1/ESP32-audioI2S/raw/master/additional_info/Testfiles/Collide.ogg"); // vorbis
// audio.connecttohost("https://github.com/schreibfaul1/ESP32-audioI2S/raw/master/additional_info/Testfiles/sample.opus"); // opus
// *** local files ***
// audio.connecttoFS(SD, "/test.wav"); // SD
// audio.connecttoFS(SD_MMC, "/test.wav"); // SD_MMC
// audio.connecttoFS(SPIFFS, "/test.wav"); // SPIFFS
// audio.connecttospeech("Wenn die Hunde schlafen, kann der Wolf gut Schafe stehlen.", "de"); // Google TTS
}
void loop (){
audio. loop ();
vTaskDelay ( 1 );
}
// optional
void audio_info ( const char *info){
Serial. print ( " info " ); Serial. println (info);
}
void audio_id3data ( const char *info){ // id3 metadata
Serial. print ( " id3data " );Serial. println (info);
}
void audio_eof_mp3 ( const char *info){ // end of file
Serial. print ( " eof_mp3 " );Serial. println (info);
}
void audio_showstation ( const char *info){
Serial. print ( " station " );Serial. println (info);
}
void audio_showstreamtitle ( const char *info){
Serial. print ( " streamtitle " );Serial. println (info);
}
void audio_bitrate ( const char *info){
Serial. print ( " bitrate " );Serial. println (info);
}
void audio_commercial ( const char *info){ // duration in sec
Serial. print ( " commercial " );Serial. println (info);
}
void audio_icyurl ( const char *info){ // homepage
Serial. print ( " icyurl " );Serial. println (info);
}
void audio_lasthost ( const char *info){ // stream URL played
Serial. print ( " lasthost " );Serial. println (info);
}
void audio_eof_speech ( const char *info){
Serial. print ( " eof_speech " );Serial. println (info);
}
الترميز | ESP32 | ESP32 PSRAM | ESP32-S3 PSRAM | |
---|---|---|---|---|
mp3 | ذ | ذ | ذ | |
الجميح للسيارات | ن | ذ | ذ | |
aacp | ن | ص (أحادي) | ص (+SBR، +PS) | |
wav | ذ | ذ | ذ | |
فلك | ن | ذ | ذ | الحد الأقصى لحجم الكتلة هو 8192 بايت |
فوربيس | ن | ذ | ذ | <=196 كيلوبت/ثانية |
m4a | ن | ذ | ذ | |
التأليف | ن | ذ | ذ | الكلت فقط |
اللوح الأسلاك مخطط الدافع
قامت شركة Yellobyte بتطوير لوحة الكل في واحد. يتضمن ESP32-S3 N8R2 و2x MAX98357 ومحول بطاقة SD. يمكن العثور على الوثائق ومخططات الدوائر والأمثلة هنا: https://github.com/yellobyte/ESP32-DevBoards-Getting-Started