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.
- // will play many audio file formats, mp3,aac,flac etc.
- // See github page : https://github.com/schreibfaul1/ESP32-audioI2S
- #include "Arduino.h"
- #include "Audio.h"
- #include "SD.h"
- #include "FS.h"
- // Digital I/O used
- #define SD_CS 5
- #define SPI_MOSI 23 // SD Card
- #define SPI_MISO 19
- #define SPI_SCK 18
- #define I2S_DOUT 25
- #define I2S_BCLK 27 // I2S
- #define I2S_LRC 26
- Audio audio;
- File root;
- void setup() {
- pinMode(SD_CS, OUTPUT);
- digitalWrite(SD_CS, HIGH);
- SPI.begin(SPI_SCK, SPI_MISO, SPI_MOSI);
- Serial.begin(115200);
- if (!SD.begin(SD_CS))
- {
- Serial.println("Error talking to SD card!");
- while (true); // end program
- }
- root = SD.open("/");
- audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT);
- audio.setVolume(2); // 0...21
- //audio.connecttoSD("/example.mp3");
- }
- void loop()
- {
- if (!audio.isRunning())
- {
- Serial.println("song end");
- bool songFind = false;
- String songName = "";
- if (!songFind)
- {
- songName = getNext(root);
- songFind = songName.endsWith(".mp3");
- if (songFind)
- {
- audio.connecttoSD(songName);
- }
- else
- {
- Serial.println("no song");
- }
- }
- }
- else
- {
- audio.loop();
- }
- }
- String getNext(File dir) {
- String fileName = "";
- Serial.println("find next");
- File entry = dir.openNextFile();
- if (! entry) {
- return "";
- Serial.println("No more files");
- }
- else
- {
- fileName = entry.name();
- Serial.println(fileName);
- entry.close();
- return fileName;
- }
- }
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!