ESP8266 - MP3 Player

Este tutorial ensina como fazer um MP3 player usando o ESP8266, um módulo MP3 player, um Cartão Micro SD e um alto-falante. Os arquivos MP3 (músicas ou áudio gravado) ficam guardados no cartão micro SD. Então, o ESP8266 pode controlar o módulo MP3 player para ler uma música escolhida do Cartão SD, convertê-la em sinal de áudio e enviar o sinal para o alto-falante. Em detalhes, vamos aprender:

Depois, você pode modificar o código para adicionar um potenciômetro ou encoder rotativo para mudar o volume.

Hardware Necessário

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×Módulo Reprodutor MP3 Serial
1×Cartão Micro SD
1×Alto-falante Aux 3.5mm
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.

Sobre o Módulo MP3 Player Serial e o Alto-falante

Pinagem do Módulo MP3 Player Serial

Um módulo MP3 player serial tem três interfaces:

  • A interface com o ESP8266 inclui 4 pinos:
    • Pino RX: pino de dados, precisa ser conectado a um pino TX do ESP8266 (Serial por Hardware ou por Software)
    • Pino TX: pino de dados, precisa ser conectado a um pino RX do ESP8266 (Serial por Hardware ou por Software)
    • Pino VCC: pino de alimentação, precisa ser conectado ao VCC (5V)
    • Pino GND: pino de alimentação, precisa ser conectado ao GND (0V)
  • A interface com o alto-falante é uma saída Aux fêmea de 3,5mm.
  • A interface com o Cartão Micro SD é um soquete de Cartão Micro SD na parte de trás do módulo.
Serial MP3 Player Module Pinout
image source: diyables.io

Pinagem do Alto-falante

Um alto-falante geralmente tem duas interfaces:

  • Interface de sinal de áudio: é um conector Aux macho de 3,5mm que se conecta ao módulo MP3 player
  • Interface de alimentação: pode ser USB, fonte de alimentação de 5V ou qualquer outra interface de energia

Como Funciona

O que precisamos preparar:

  • Guardar antes no cartão micro SD uma lista de músicas ou áudios gravados que queremos tocar.
  • Inserir o cartão micro SD no módulo MP3 player
  • Conectar o módulo MP3 player ao ESP8266
  • Conectar o alto-falante ao módulo MP3 player
  • Conectar o alto-falante a uma fonte de energia.

Cada arquivo MP3 guardado no Cartão Micro SD terá um índice. O índice é a ordem da música guardada, começando em 0.

Então podemos programar o ESP8266 para enviar comandos ao módulo MP3 player. Ele aceita os seguintes comandos:

  • Tocar
  • Pausar
  • Tocar a próxima
  • Tocar a anterior
  • Mudar o volume

Quando o módulo MP3 player recebe um comando, ele lê o arquivo MP3 do cartão micro SD, converte os arquivos MP3 em sinal de áudio e envia o sinal de áudio ao alto-falante pela interface Aux de 3,5mm.

Diagrama de Ligação

The wiring diagram between ESP8266 NodeMCU and MP3 player module

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.

Código ESP8266 - Tocar Música

O código abaixo toca a primeira música guardada no Cartão Micro SD.

/* * Este código de ESP8266 NodeMCU foi desenvolvido por pt.newbiely.com * Este código de ESP8266 NodeMCU é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp8266/esp8266-mp3-player */ #include <SoftwareSerial.h> #define CMD_PLAY_NEXT 0x01 #define CMD_PLAY_PREV 0x02 #define CMD_PLAY_W_INDEX 0x03 #define CMD_SET_VOLUME 0x06 #define CMD_SEL_DEV 0x09 #define CMD_PLAY_W_VOL 0x22 #define CMD_PLAY 0x0D #define CMD_PAUSE 0x0E #define CMD_SINGLE_CYCLE 0x19 #define DEV_TF 0x02 #define SINGLE_CYCLE_ON 0x00 #define SINGLE_CYCLE_OFF 0x01 #define ESP8266_RX D5 // The ESP8266 pin connected to the TX of the Serial MP3 Player module #define ESP8266_TX D6 // The ESP8266 pin connected to the RX of the Serial MP3 Player module SoftwareSerial mp3(ESP8266_RX, ESP8266_TX); void setup() { Serial.begin(9600); mp3.begin(9600); delay(500); // wait chip initialization is complete mp3_command(CMD_SEL_DEV, DEV_TF); // select the TF card delay(200); // wait for 200ms mp3_command(CMD_PLAY, 0x0000); // Play mp3 //mp3_command(CMD_PAUSE, 0x0000); // Pause mp3 //mp3_command(CMD_PLAY_NEXT, 0x0000); // Play next mp3 //mp3_command(CMD_PLAY_PREV, 0x0000); // Play previous mp3 //mp3_command(CMD_SET_VOLUME, 30); // Change volume to 30 } void loop() { } void mp3_command(int8_t command, int16_t dat) { int8_t frame[8] = { 0 }; frame[0] = 0x7e; // starting byte frame[1] = 0xff; // version frame[2] = 0x06; // The number of bytes of the command without starting byte and ending byte frame[3] = command; // frame[4] = 0x00; // 0x00 = no feedback, 0x01 = feedback frame[5] = (int8_t)(dat >> 8); // data high byte frame[6] = (int8_t)(dat); // data low byte frame[7] = 0xef; // ending byte for (uint8_t i = 0; i < 8; i++) { mp3.write(frame[i]); } }

Passos Rápidos

Para começar com o ESP8266 no Arduino IDE, siga estes passos:

  • Confira o tutorial como configurar o ambiente para o ESP8266 no Arduino IDE se esta for a sua primeira vez usando o ESP8266.
  • Ligue os componentes como mostrado no diagrama.
  • Conecte a placa ESP8266 ao seu computador usando um cabo USB.
  • Abra o Arduino IDE no seu computador.
  • Escolha a placa ESP8266 correta, como (por exemplo, NodeMCU 1.0 (ESP-12E Module)), e a respectiva porta COM.
  • Siga as instruções em Como Funciona
  • Copie o código acima e abra-o com o Arduino IDE
  • Clique no botão Upload no Arduino IDE para carregar o código no ESP8266
  • Aproveite a música

Código ESP8266 - Tocar Música com botões de controle

O código abaixo é uma evolução do código anterior. Ele adiciona quatro botões para você interagir com o MP3 player.

/* * Este código de ESP8266 NodeMCU foi desenvolvido por pt.newbiely.com * Este código de ESP8266 NodeMCU é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp8266/esp8266-mp3-player */ #include <SoftwareSerial.h> #include <ezButton.h> #define CMD_PLAY_NEXT 0x01 #define CMD_PLAY_PREV 0x02 #define CMD_PLAY_W_INDEX 0x03 #define CMD_SET_VOLUME 0x06 #define CMD_SEL_DEV 0x09 #define CMD_PLAY_W_VOL 0x22 #define CMD_PLAY 0x0D #define CMD_PAUSE 0x0E #define CMD_SINGLE_CYCLE 0x19 #define DEV_TF 0x02 #define SINGLE_CYCLE_ON 0x00 #define SINGLE_CYCLE_OFF 0x01 #define ESP8266_RX D5 // The ESP8266 pin connected to the TX of the Serial MP3 Player module #define ESP8266_TX D6 // The ESP8266 pin connected to the RX of the Serial MP3 Player module SoftwareSerial mp3(ESP8266_RX, ESP8266_TX); ezButton button_play(D1); // create ezButton object for pin D1 ezButton button_pause(D2); // create ezButton object for pin D2 ezButton button_next(D3); // create ezButton object for pin D3 ezButton button_prev(D4); // create ezButton object for pin D4 void setup() { Serial.begin(9600); mp3.begin(9600); delay(500); // wait chip initialization is complete mp3_command(CMD_SEL_DEV, DEV_TF); // select the TF card delay(200); // wait for 200ms button_play.setDebounceTime(50); // set debounce time to 50 milliseconds button_pause.setDebounceTime(50); // set debounce time to 50 milliseconds button_next.setDebounceTime(50); // set debounce time to 50 milliseconds button_prev.setDebounceTime(50); // set debounce time to 50 milliseconds } void loop() { button_play.loop(); // MUST call the loop() function first button_pause.loop(); // MUST call the loop() function first button_next.loop(); // MUST call the loop() function first button_prev.loop(); // MUST call the loop() function first if (button_play.isPressed()) { Serial.println("Play mp3"); mp3_command(CMD_PLAY, 0x0000); } if (button_pause.isPressed()) { Serial.println("Pause mp3"); mp3_command(CMD_PAUSE, 0x0000); } if (button_next.isPressed()) { Serial.println("Play next mp3"); mp3_command(CMD_PLAY_NEXT, 0x0000); } if (button_prev.isPressed()) { Serial.println("Play previous mp3"); mp3_command(CMD_PLAY_PREV, 0x0000); } } void mp3_command(int8_t command, int16_t dat) { int8_t frame[8] = { 0 }; frame[0] = 0x7e; // starting byte frame[1] = 0xff; // version frame[2] = 0x06; // The number of bytes of the command without starting byte and ending byte frame[3] = command; // frame[4] = 0x00; // 0x00 = no feedback, 0x01 = feedback frame[5] = (int8_t)(dat >> 8); // data high byte frame[6] = (int8_t)(dat); // data low byte frame[7] = 0xef; // ending byte for (uint8_t i = 0; i < 8; i++) { mp3.write(frame[i]); } }

O diagrama de ligação para o código acima:

The wiring diagram between ESP8266 NodeMCU and MP3 player speaker

This image is created using Fritzing. Click to enlarge image

Agora, você pode modificar os projetos para adicionar mais funções, por exemplo:

Vídeo

Referências de Funções

※ 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!