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:

ESP8266 NodeMCU Mini Mp3 Player

Componentes Necessários

1×ESP8266 NodeMCU ESP-12F
1×Alternatively, ESP8266 D1 Mini NodeMCU ESP-12F
1×Alternatively, ESP8266 NodeMCU ESP-12E (Uno-form)
1×Micro USB Cable
1×Alternatively, ESP8266 NodeMCU ESP-12F (SMD-form)
1×Cabo USB Tipo-A para Tipo-C (para PC com USB-A)
1×Cabo USB Tipo-C para Tipo-C (para PC com USB-C)
1×DIYables Mini Mp3 Player module
1×Cartão Micro SD
1×Speaker
1×Protoboard
1×Fios Jumper
1×(Recomendado) Placa de Expansão com Bornes de Parafuso para ESP8266

Or you can buy the following kits:

1×DIYables Sensor Kit (18 sensors/displays)
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.

Visão Geral do 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)

Pinos do Módulo

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+
Mini Mp3 Player Pinout

Ligação no ESP8266

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 −
The wiring diagram between ESP8266 NodeMCU and Mini Mp3 Player

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.

Preparando o Cartão SD

  1. Formate como FAT16 ou FAT32.
  2. Adicione arquivos mp3 com nomes preenchidos com zeros:
/001.mp3 /002.mp3 /003.mp3
  1. 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.

Instalando a Biblioteca

  • 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.
ESP8266 NodeMCU Mini Mp3 Player library

Nenhuma outra biblioteca é necessária.

Padrão Básico de Código

#include <DIYables_MiniMp3.h> #include <SoftwareSerial.h> SoftwareSerial mp3Serial(D5, D7); // RX=D5(GPIO14), TX=D7(GPIO13) DIYables_MiniMp3 mp3; void setup() { Serial.begin(115200); mp3Serial.begin(9600); mp3.begin(mp3Serial); delay(1000); // Module startup time mp3.setVolume(25); } void loop() { // Your code here }

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.

Código ESP8266 — Tocar Uma Faixa

/* * DIYables Mini Mp3 Player - Play One Track * * Product: DIYables Mini Mp3 Player Module * https://diyables.io/products/mini-mp3-player-module * * Plays track 001 once, then stops. * * Wiring Table: * Mini Mp3 RX -> ESP8266 Pin D2 * Mini Mp3 TX -> ESP8266 Pin D3 * Mini Mp3 VCC -> 5V * Mini Mp3 GND -> GND * Speaker connected to SPK_1 and SPK_2 pins * * SD Card: Put mp3 files in root, named 001.mp3, 002.mp3, etc. */ #include <DIYables_MiniMp3.h> #include <SoftwareSerial.h> SoftwareSerial mp3Serial(D3, D2); // RX, TX DIYables_MiniMp3 mp3; void setup() { Serial.begin(9600); mp3Serial.begin(9600); mp3.begin(mp3Serial); delay(1000); // Wait for the module to initialize mp3.setVolume(25); // Set volume (0 to 30) Serial.println("Playing track 1..."); mp3.play(1); // Play track 001.mp3 } void loop() { // Nothing to do here }

Primeiros Passos

  • 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.

Controles de Reprodução

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()

Código ESP8266 — Várias Faixas

/* * DIYables Mini Mp3 Player - Play Multiple Tracks * * Product: DIYables Mini Mp3 Player Module * https://diyables.io/products/mini-mp3-player-module * * Plays tracks one after another with a delay between them. * * Wiring Table: * Mini Mp3 RX -> ESP8266 Pin D2 * Mini Mp3 TX -> ESP8266 Pin D3 * Mini Mp3 VCC -> 5V * Mini Mp3 GND -> GND * Speaker connected to SPK_1 and SPK_2 pins * * SD Card: Put mp3 files in root, named 001.mp3, 002.mp3, 003.mp3 */ #include <DIYables_MiniMp3.h> #include <SoftwareSerial.h> SoftwareSerial mp3Serial(D3, D2); // RX, TX DIYables_MiniMp3 mp3; int currentTrack = 1; int totalTracks = 3; // Change this to match your SD card unsigned long lastTrackTime = 0; unsigned long trackDuration = 5000; // Wait 5 seconds between tracks (adjust as needed) 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() { // After trackDuration, play the next track if (millis() - lastTrackTime >= trackDuration) { currentTrack++; if (currentTrack > totalTracks) currentTrack = 1; // Loop back to first track Serial.print("Playing track "); Serial.println(currentTrack); mp3.play(currentTrack); lastTrackTime = millis(); } }

Código ESP8266 — Botões de Volume

/* * DIYables Mini Mp3 Player - Volume Control * * Product: DIYables Mini Mp3 Player Module * https://diyables.io/products/mini-mp3-player-module * * Use two buttons to increase/decrease the volume. * Press button on pin D5 to volume up, pin D6 to volume down. * * Wiring Table: * Mini Mp3 RX -> ESP8266 Pin D2 * Mini Mp3 TX -> ESP8266 Pin D3 * Mini Mp3 VCC -> 5V * Mini Mp3 GND -> GND * Speaker connected to SPK_1 and SPK_2 pins * Button UP -> Pin D5 (other leg to GND) * Button DOWN -> Pin D6 (other leg to GND) * * SD Card: Put mp3 files in root, named 001.mp3, 002.mp3, etc. */ #include <DIYables_MiniMp3.h> #include <SoftwareSerial.h> SoftwareSerial mp3Serial(D3, D2); // RX, TX DIYables_MiniMp3 mp3; const int BUTTON_VOL_UP = D5; const int BUTTON_VOL_DOWN = D6; int volume = 15; // Start at half volume 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); // Play track 1 on repeat Serial.print("Volume: "); Serial.println(volume); } void loop() { // Volume Up button (pressed = LOW because of INPUT_PULLUP) if (digitalRead(BUTTON_VOL_UP) == LOW) { if (volume < 30) { volume++; mp3.setVolume(volume); Serial.print("Volume: "); Serial.println(volume); } delay(200); // Simple debounce } // Volume Down button if (digitalRead(BUTTON_VOL_DOWN) == LOW) { if (volume > 0) { volume--; mp3.setVolume(volume); Serial.print("Volume: "); Serial.println(volume); } delay(200); // Simple debounce } }

Controles de Volume

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()

Código ESP8266 — Próxima/Anterior

/* * DIYables Mini Mp3 Player - Next/Previous with Buttons * * Product: DIYables Mini Mp3 Player Module * https://diyables.io/products/mini-mp3-player-module * * Use two buttons to play next/previous tracks. * Displays the current track number on the Serial Monitor. * * Wiring Table: * Mini Mp3 RX -> ESP8266 Pin D2 * Mini Mp3 TX -> ESP8266 Pin D3 * Mini Mp3 VCC -> 5V * Mini Mp3 GND -> GND * Speaker connected to SPK_1 and SPK_2 pins * Button NEXT -> Pin D5 (other leg to GND) * Button PREV -> Pin D6 (other leg to GND) * * SD Card: Put mp3 files in root, named 001.mp3, 002.mp3, etc. */ #include <DIYables_MiniMp3.h> #include <SoftwareSerial.h> SoftwareSerial mp3Serial(D3, D2); // RX, TX 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); // Start with track 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); // Simple debounce } if (digitalRead(BUTTON_PREV) == LOW) { Serial.println("Previous track"); mp3.playPrevious(); delay(300); // Simple debounce } }

Código ESP8266 — Pausar/Retomar

/* * DIYables Mini Mp3 Player - Pause and Resume * * Product: DIYables Mini Mp3 Player Module * https://diyables.io/products/mini-mp3-player-module * * Demonstrates pausing and resuming playback using a single button. * Press the button to toggle between pause and resume. * * Wiring Table: * Mini Mp3 RX -> ESP8266 Pin D2 * Mini Mp3 TX -> ESP8266 Pin D3 * Mini Mp3 VCC -> 5V * Mini Mp3 GND -> GND * Speaker connected to SPK_1 and SPK_2 pins * Button -> Pin D5 (other leg to GND) * * SD Card: Put mp3 files in root, named 001.mp3, 002.mp3, etc. */ #include <DIYables_MiniMp3.h> #include <SoftwareSerial.h> SoftwareSerial mp3Serial(D3, D2); // RX, TX 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); // Simple debounce } }

Código ESP8266 — Repetir uma Faixa

/* * DIYables Mini Mp3 Player - Loop Track * * Product: DIYables Mini Mp3 Player Module * https://diyables.io/products/mini-mp3-player-module * * Loops (repeats) a track continuously with EQ setting. * * Wiring Table: * Mini Mp3 RX -> ESP8266 Pin D2 * Mini Mp3 TX -> ESP8266 Pin D3 * Mini Mp3 VCC -> 5V * Mini Mp3 GND -> GND * Speaker connected to SPK_1 and SPK_2 pins * * SD Card file structure: * /001.mp3 * /002.mp3 * ... */ #include <DIYables_MiniMp3.h> #include <SoftwareSerial.h> SoftwareSerial mp3Serial(D3, D2); // RX, TX DIYables_MiniMp3 mp3; void setup() { Serial.begin(9600); mp3Serial.begin(9600); mp3.begin(mp3Serial); delay(1000); // Wait for the module to initialize mp3.setVolume(25); // Volume: 0 to 30 mp3.setEQ(DIYables_MiniMp3::EQ_NORMAL); Serial.println("Playing track 1 on loop..."); mp3.loopTrack(1); } void loop() { // Your code here }

Repetição e Modo Aleatório

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()

Código ESP8266 — Reprodução por Pasta

/* * DIYables Mini Mp3 Player - Play from Folder * * Product: DIYables Mini Mp3 Player Module * https://diyables.io/products/mini-mp3-player-module * * Plays tracks from specific folders on the SD card. * * Wiring Table: * Mini Mp3 RX -> ESP8266 Pin D2 * Mini Mp3 TX -> ESP8266 Pin D3 * Mini Mp3 VCC -> 5V * Mini Mp3 GND -> GND * Speaker connected to SPK_1 and SPK_2 pins * * SD Card file structure: * /01/001.mp3 <- playFolder(1, 1) * /01/002.mp3 <- playFolder(1, 2) * /02/001.mp3 <- playFolder(2, 1) * /02/002.mp3 <- playFolder(2, 2) * * IMPORTANT: * - Numbering starts from 1, NOT 0 * - Folder names must be 2-digit zero-padded (01-99) * - Track names must be 3-digit zero-padded (001-255) * - Format SD card as FAT32, then copy files one by one in order * - Track order is determined by the order files were copied, * NOT by filename. So copy them in the correct sequence. */ #include <DIYables_MiniMp3.h> #include <SoftwareSerial.h> SoftwareSerial mp3Serial(D3, D2); // RX, TX DIYables_MiniMp3 mp3; void setup() { Serial.begin(9600); mp3Serial.begin(9600); mp3.begin(mp3Serial); delay(1000); mp3.setVolume(20); // Play track 1 from folder 01 Serial.println("Playing folder 01, track 001..."); mp3.playFolder(1, 1); delay(5000); // Play track 2 from folder 01 Serial.println("Playing folder 01, track 002..."); mp3.playFolder(1, 2); delay(5000); // Play track 1 from folder 02 Serial.println("Playing folder 02, track 001..."); mp3.playFolder(2, 1); } void loop() { // Nothing to do here }

Funções de Pasta

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)

Código ESP8266 — Controle pelo Serial Monitor

/* * DIYables Mini Mp3 Player - Serial Command Control * * Product: DIYables Mini Mp3 Player Module * https://diyables.io/products/mini-mp3-player-module * * Control the Mp3 player by typing commands in the Serial Monitor. * Great for testing all functions without extra hardware. * * Commands (type in Serial Monitor, then press Enter): * 1-9 Play track 1 to 9 * + Volume up * - Volume down * p Pause * r Resume * s Stop * n Next track * b Previous track (back) * ? Show current status * * Wiring Table: * Mini Mp3 RX -> ESP8266 Pin D2 * Mini Mp3 TX -> ESP8266 Pin D3 * Mini Mp3 VCC -> 5V * Mini Mp3 GND -> GND * Speaker connected to SPK_1 and SPK_2 pins * * SD Card: Put mp3 files in root, named 001.mp3, 002.mp3, etc. */ #include <DIYables_MiniMp3.h> #include <SoftwareSerial.h> SoftwareSerial mp3Serial(D3, D2); // RX, TX 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; } } }

Predefinições do Equalizador

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);

Lendo o Status do Módulo

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!