ESP8266 - Mini Mp3 Player
O ESP8266 (NodeMCU, Wemos D1 Mini e placas semelhantes) é um microcontrolador popular com WiFi que funciona a 3,3V. Combiná-lo com o módulo DIYables Mini Mp3 Player dá a você um dispositivo de áudio com WiFi usando apenas alguns fios e um cartão micro SD.
Neste tutorial, você vai:
Ligar o Mini Mp3 Player ao ESP8266 — sem precisar de resistor.
Formatar o cartão SD e nomear os arquivos corretamente.
Programar o ESP8266 para tocar, pausar, retomar e parar faixas mp3.
Adicionar controle de volume por botões.
Configurar repetição, modo aleatório e reprodução por pastas.
Consultar o módulo para obter informações da faixa e do volume.
Or you can buy the following kits:
Divulgação: Alguns dos links desta seção são links de afiliado da Amazon. Podemos receber uma comissão pelas compras feitas por meio desses links, sem custo adicional para você. Agradecemos o seu apoio.
Nenhum resistor é necessário. O ESP8266 usa lógica de 3,3V — uma combinação perfeita para o módulo.
O módulo DIYables Mini Mp3 Player encapsula o chip decodificador de mp3 YX5200-24SS. Ele lê arquivos mp3 de um cartão micro SD e envia o áudio por um amplificador embutido (alto-falante de no máximo 3W) ou pelos pinos DAC para amplificação externa.
Você o controla por UART a 9600 baud. O conjunto de recursos inclui:
Tocar, pausar, retomar, parar, próxima, anterior
Controle de volume: 0 a 30
6 predefinições de equalizador (Normal, Pop, Rock, Jazz, Classic, Bass)
Repetir uma faixa, repetir uma pasta, repetir tudo ou modo aleatório
Tocar a partir de pastas numeradas
Interrupções de anúncio
Leitura de status (faixa atual, volume, estado de reprodução)
| Pino | Descrição |
| VCC | Alimentação de 3,2V – 5,0V |
| GND | Terra |
| RX | Entrada serial vinda do TX do ESP8266 |
| TX | Saída serial para o RX do ESP8266 |
| SPK_1 | Alto-falante + (amplificador embutido, máx. 3W) |
| SPK_2 | Alto-falante − |
| DAC_R | Saída de nível de linha direita |
| DAC_L | Saída de nível de linha esquerda |
| BUSY | LOW enquanto está tocando |
| IO_1 | Toque curto = anterior, toque longo = vol− |
| IO_2 | Toque curto = próxima, toque longo = vol+ |
O ESP8266 tem apenas uma UART de hardware, que é usada pela ponte USB-Serial. Para o módulo mp3, usamos SoftwareSerial em dois pinos GPIO disponíveis.
| Mini Mp3 Player | ESP8266 (NodeMCU) | Observações |
| VCC | 3.3V | |
| GND | GND | |
| RX | D7 (GPIO 13) | Sem resistor — já é 3,3V |
| TX | D5 (GPIO 14) | |
| SPK_1 | Alto-falante + | |
| SPK_2 | Alto-falante − | |

This image is created using Fritzing. Click to enlarge image
Para mais informações, veja Pinagem do ESP8266 e como alimentar o ESP8266 e outros componentes.
Evite os GPIO 0, 2 e 15 para as linhas seriais do mp3 — esses pinos afetam o comportamento de boot. D5 e D7 são pinos de uso geral seguros.
Formate como FAT16 ou FAT32.
Adicione arquivos mp3 com nomes preenchidos com zeros:
/001.mp3
/002.mp3
/003.mp3
Para pastas:
/01/001.mp3
/01/002.mp3
/02/001.mp3
Coisas para lembrar:
A numeração começa em 1, não em 0.
A ordem das faixas depende da sequência de cópia, não dos nomes dos arquivos. Formate primeiro, depois copie os arquivos um por um.
Pastas: 01–99. Arquivos dentro das pastas: 001–255.
Conecte o ESP8266 ao seu computador via USB.
No Arduino IDE, selecione sua placa (por exemplo, NodeMCU 1.0) e a porta.
Vá em Libraries na barra lateral.
Pesquise "DIYables_MiniMp3" e instale.
Nenhuma outra biblioteca é necessária.
#include <DIYables_MiniMp3.h>
#include <SoftwareSerial.h>
SoftwareSerial mp3Serial(D5, D7);
DIYables_MiniMp3 mp3;
void setup() {
Serial.begin(115200);
mp3Serial.begin(9600);
mp3.begin(mp3Serial);
delay(1000);
mp3.setVolume(25);
}
void loop() {
}
A biblioteca SoftwareSerial do ESP8266 funciona de forma confiável a 9600 baud. Sempre chame delay(1000) depois de begin() para dar tempo ao módulo de inicializar.
#include <DIYables_MiniMp3.h>
#include <SoftwareSerial.h>
SoftwareSerial mp3Serial(D3, D2);
DIYables_MiniMp3 mp3;
void setup()
{
Serial.begin(9600);
mp3Serial.begin(9600);
mp3.begin(mp3Serial);
delay(1000);
mp3.setVolume(25);
Serial.println("Playing track 1...");
mp3.play(1);
}
void loop()
{
}
Prepare o cartão SD, insira-o e ligue o módulo como mostrado.
Abra o Arduino IDE, selecione sua placa ESP8266 e faça o upload.
A faixa 001.mp3 toca imediatamente.
| Função | Explicação | Código |
| play(n) | Inicia a faixa n | mp3.play(1) |
| playNext() | Pula para a frente | mp3.playNext() |
| playPrevious() | Pula para trás | mp3.playPrevious() |
| pause() | Pausa a saída | mp3.pause() |
| resume() | Continua a faixa pausada | mp3.resume() |
| stop() | Encerra a reprodução | mp3.stop() |
#include <DIYables_MiniMp3.h>
#include <SoftwareSerial.h>
SoftwareSerial mp3Serial(D3, D2);
DIYables_MiniMp3 mp3;
int currentTrack = 1;
int totalTracks = 3;
unsigned long lastTrackTime = 0;
unsigned long trackDuration = 5000;
void setup()
{
Serial.begin(9600);
mp3Serial.begin(9600);
mp3.begin(mp3Serial);
delay(1000);
mp3.setVolume(20);
Serial.println("Playing track 1...");
mp3.play(currentTrack);
lastTrackTime = millis();
}
void loop()
{
if (millis() - lastTrackTime >= trackDuration)
{
currentTrack++;
if (currentTrack > totalTracks)
currentTrack = 1;
Serial.print("Playing track ");
Serial.println(currentTrack);
mp3.play(currentTrack);
lastTrackTime = millis();
}
}
#include <DIYables_MiniMp3.h>
#include <SoftwareSerial.h>
SoftwareSerial mp3Serial(D3, D2);
DIYables_MiniMp3 mp3;
const int BUTTON_VOL_UP = D5;
const int BUTTON_VOL_DOWN = D6;
int volume = 15;
void setup()
{
Serial.begin(9600);
mp3Serial.begin(9600);
pinMode(BUTTON_VOL_UP, INPUT_PULLUP);
pinMode(BUTTON_VOL_DOWN, INPUT_PULLUP);
mp3.begin(mp3Serial);
delay(1000);
mp3.setVolume(volume);
mp3.loopTrack(1);
Serial.print("Volume: ");
Serial.println(volume);
}
void loop()
{
if (digitalRead(BUTTON_VOL_UP) == LOW)
{
if (volume < 30)
{
volume++;
mp3.setVolume(volume);
Serial.print("Volume: ");
Serial.println(volume);
}
delay(200);
}
if (digitalRead(BUTTON_VOL_DOWN) == LOW)
{
if (volume > 0)
{
volume--;
mp3.setVolume(volume);
Serial.print("Volume: ");
Serial.println(volume);
}
delay(200);
}
}
| Função | O Que Faz | Código |
| setVolume(v) | Define um nível específico | mp3.setVolume(20) |
| volumeUp() | Aumenta em um | mp3.volumeUp() |
| volumeDown() | Diminui em um | mp3.volumeDown() |
| getVolume() | Lê o volume atual | mp3.getVolume() |
#include <DIYables_MiniMp3.h>
#include <SoftwareSerial.h>
SoftwareSerial mp3Serial(D3, D2);
DIYables_MiniMp3 mp3;
const int BUTTON_NEXT = D5;
const int BUTTON_PREV = D6;
void setup()
{
Serial.begin(9600);
mp3Serial.begin(9600);
pinMode(BUTTON_NEXT, INPUT_PULLUP);
pinMode(BUTTON_PREV, INPUT_PULLUP);
mp3.begin(mp3Serial);
delay(1000);
mp3.setVolume(20);
mp3.play(1);
Serial.println("Press NEXT or PREV button to change track");
}
void loop()
{
if (digitalRead(BUTTON_NEXT) == LOW)
{
Serial.println("Next track");
mp3.playNext();
delay(300);
}
if (digitalRead(BUTTON_PREV) == LOW)
{
Serial.println("Previous track");
mp3.playPrevious();
delay(300);
}
}
#include <DIYables_MiniMp3.h>
#include <SoftwareSerial.h>
SoftwareSerial mp3Serial(D3, D2);
DIYables_MiniMp3 mp3;
const int BUTTON_PIN = D5;
bool paused = false;
void setup()
{
Serial.begin(9600);
mp3Serial.begin(9600);
pinMode(BUTTON_PIN, INPUT_PULLUP);
mp3.begin(mp3Serial);
delay(1000);
mp3.setVolume(20);
mp3.play(1);
Serial.println("Playing. Press button to pause/resume.");
}
void loop()
{
if (digitalRead(BUTTON_PIN) == LOW)
{
if (paused)
{
mp3.resume();
Serial.println("Resumed");
}
else
{
mp3.pause();
Serial.println("Paused");
}
paused = !paused;
delay(300);
}
}
#include <DIYables_MiniMp3.h>
#include <SoftwareSerial.h>
SoftwareSerial mp3Serial(D3, D2);
DIYables_MiniMp3 mp3;
void setup()
{
Serial.begin(9600);
mp3Serial.begin(9600);
mp3.begin(mp3Serial);
delay(1000);
mp3.setVolume(25);
mp3.setEQ(DIYables_MiniMp3::EQ_NORMAL);
Serial.println("Playing track 1 on loop...");
mp3.loopTrack(1);
}
void loop()
{
}
| Função | Comportamento | Código |
| loopTrack(n) | Repete uma faixa | mp3.loopTrack(1) |
| loopFolder(f) | Repete o conteúdo da pasta | mp3.loopFolder(1) |
| loopAll() | Repete tudo | mp3.loopAll() |
| stopLoop() | Cancela a repetição | mp3.stopLoop() |
| shuffle() | Ordem aleatória | mp3.shuffle() |
#include <DIYables_MiniMp3.h>
#include <SoftwareSerial.h>
SoftwareSerial mp3Serial(D3, D2);
DIYables_MiniMp3 mp3;
void setup()
{
Serial.begin(9600);
mp3Serial.begin(9600);
mp3.begin(mp3Serial);
delay(1000);
mp3.setVolume(20);
Serial.println("Playing folder 01, track 001...");
mp3.playFolder(1, 1);
delay(5000);
Serial.println("Playing folder 01, track 002...");
mp3.playFolder(1, 2);
delay(5000);
Serial.println("Playing folder 02, track 001...");
mp3.playFolder(2, 1);
}
void loop()
{
}
| Função | Uso | Código |
| playFolder(f, t) | Pasta f, faixa t | mp3.playFolder(1, 1) |
| playLargeFolder(f, t) | Modo de pasta grande | mp3.playLargeFolder(1, 500) |
| playFromMP3Folder(t) | Pasta /mp3 | mp3.playFromMP3Folder(1) |
#include <DIYables_MiniMp3.h>
#include <SoftwareSerial.h>
SoftwareSerial mp3Serial(D3, D2);
DIYables_MiniMp3 mp3;
void setup()
{
Serial.begin(9600);
mp3Serial.begin(9600);
mp3.begin(mp3Serial);
delay(1000);
mp3.setVolume(20);
Serial.println("=== DIYables Mini Mp3 Player ===");
Serial.println("Commands:");
Serial.println(" 1-9 Play track number");
Serial.println(" + Volume up");
Serial.println(" - Volume down");
Serial.println(" p Pause");
Serial.println(" r Resume");
Serial.println(" s Stop");
Serial.println(" n Next track");
Serial.println(" b Previous track");
Serial.println(" ? Show status");
Serial.println("================================");
}
void loop()
{
if (Serial.available())
{
char cmd = Serial.read();
switch (cmd)
{
case '1': case '2': case '3':
case '4': case '5': case '6':
case '7': case '8': case '9':
Serial.print("Playing track ");
Serial.println(cmd - '0');
mp3.play(cmd - '0');
break;
case '+':
Serial.println("Volume up");
mp3.volumeUp();
break;
case '-':
Serial.println("Volume down");
mp3.volumeDown();
break;
case 'p':
Serial.println("Paused");
mp3.pause();
break;
case 'r':
Serial.println("Resumed");
mp3.resume();
break;
case 's':
Serial.println("Stopped");
mp3.stop();
break;
case 'n':
Serial.println("Next track");
mp3.playNext();
break;
case 'b':
Serial.println("Previous track");
mp3.playPrevious();
break;
case '?':
{
Serial.println("--- Status ---");
int16_t vol = mp3.getVolume();
Serial.print("Volume: ");
Serial.println(vol);
int16_t track = mp3.getCurrentTrack();
Serial.print("Current track: ");
Serial.println(track);
bool playing = mp3.isPlaying();
Serial.print("Playing: ");
Serial.println(playing ? "Yes" : "No");
int16_t total = mp3.getTrackCount();
Serial.print("Total tracks: ");
Serial.println(total);
Serial.println("--------------");
break;
}
default:
break;
}
}
}
| Constante | Valor | Perfil de Som |
| DIYables_MiniMp3::EQ_NORMAL | 0 | Plano |
| DIYables_MiniMp3::EQ_POP | 1 | Pop |
| DIYables_MiniMp3::EQ_ROCK | 2 | Rock |
| DIYables_MiniMp3::EQ_JAZZ | 3 | Jazz |
| DIYables_MiniMp3::EQ_CLASSIC | 4 | Clássico |
| DIYables_MiniMp3::EQ_BASS | 5 | Graves intensos |
mp3.setEQ(DIYables_MiniMp3::EQ_NORMAL);
Cada consulta é bloqueante (até 100 ms). Retorna −1 em caso de falha.
| Função | Retorna | Significado |
| isPlaying() | bool | true = áudio ativo |
| getVolume() | int16_t | 0–30 |
| getEQ() | int16_t | 0–5 |
| getTrackCount() | int16_t | Todas as faixas do cartão |
| getCurrentTrack() | int16_t | Número da faixa ativa |
| getFolderCount() | int16_t | Quantidade de pastas |
| getTrackCountInFolder(f) | int16_t | Faixas na pasta f |
※ NOSSAS MENSAGENS
Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!