Leggere mp3 con Arduino e esp32

Ciao!

in questo tutorial vedremo come riprodurre dei file mp3 con Arduino,

ed in particolare con il modulo esp32.

La libreria che utilizzeremo è compatibile anche con altri formati audio.

Musica con Arduino!


Oltre alla board di sviluppo basata su esp32, avremo bisogno anche dell'amplificatore i2s max98357a (che potete trovare in tutti i principali eCommerce) e di uno speaker. 

I file dovranno essere memorizzati dentro una scheda sd. In vendita si trovano moduli già fatti, in alternativa potete saldare direttamente i fili su un adattatore sd-microsd e salvare i file nella microsd.



Per riprodurre i file avrete bisogno della libreria ESP32-audioI2S, scaricabile direttamente o tramite il gestore librerie del menu di Arduino.

Il seguente sketch di esempio farà riprodurre al vostro ESP32 tutti i file .mp3 presenti nella root della scheda sd.

  1. // will play many audio file formats, mp3,aac,flac etc.
  2. // See github page : https://github.com/schreibfaul1/ESP32-audioI2S
  3.  
  4. #include "Arduino.h"
  5. #include "Audio.h"
  6. #include "SD.h"
  7. #include "FS.h"
  8.  
  9. // Digital I/O used
  10. #define SD_CS          5
  11. #define SPI_MOSI      23    // SD Card
  12. #define SPI_MISO      19
  13. #define SPI_SCK       18
  14.  
  15. #define I2S_DOUT      25
  16. #define I2S_BCLK      27    // I2S
  17. #define I2S_LRC       26
  18.  
  19. Audio audio;
  20.  
  21. File root;
  22.  
  23. void setup() {
  24.   pinMode(SD_CS, OUTPUT);
  25.   digitalWrite(SD_CS, HIGH);
  26.   SPI.begin(SPI_SCK, SPI_MISO, SPI_MOSI);
  27.   Serial.begin(115200);
  28.   if (!SD.begin(SD_CS))
  29.   {
  30.     Serial.println("Error talking to SD card!");
  31.     while (true); // end program
  32.   }
  33.  
  34.   root = SD.open("/");
  35.  
  36.   audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT);
  37.   audio.setVolume(2); // 0...21
  38.  
  39.   //audio.connecttoSD("/example.mp3");
  40. }
  41.  
  42. void loop()
  43. {
  44.   if (!audio.isRunning())
  45.   {
  46.     Serial.println("song end");
  47.     bool songFind = false;
  48.     String songName = "";
  49.  
  50.     if (!songFind)
  51.     {
  52.       songName = getNext(root);
  53.       songFind = songName.endsWith(".mp3");
  54.       if (songFind)
  55.       {
  56.         audio.connecttoSD(songName);
  57.       }
  58.       else
  59.       {
  60.         Serial.println("no song");
  61.       }
  62.     }
  63.  
  64.   }
  65.   else
  66.   {
  67.     audio.loop();
  68.   }
  69. }
  70.  
  71. String getNext(File dir) {
  72.  
  73.   String fileName = "";
  74.  
  75.   Serial.println("find next");
  76.  
  77.   File entry =  dir.openNextFile();
  78.  
  79.   if (! entry) {
  80.     return "";
  81.     Serial.println("No more files");
  82.   }
  83.   else
  84.   {
  85.     fileName = entry.name();
  86.     Serial.println(fileName);
  87.     entry.close();
  88.     return fileName;
  89.   }
  90. }

Per testare il tutto potete utilizzare alcune tracce di test

Questa può essere la base per riprodurre breve tracce all'interno dei vostri progetti interattivi, o per costruire una radiolina per bambini.


Questo è tutto,
Seguimi sulle mie pagine per rimanere sempre aggiornato sui nuovi post!

Nessun commento:

Posta un commento

Lascia un commento qui sotto, ti risponderò il prima possibile!

Altri Post