quarta-feira, setembro 19, 2018

Módulo MP3 DFPlayer Mini

Neste post vou me aprofundar um pouco mais neste módulo, que usei no meu projeto de efeitos sonoros com o Franzininho. Um datasheet atualizado está aqui e a (fraca) documentação oficial está aqui.


Hardware

O módulo possui 16 pinos:

  • Três pinos para a alimentação: em de Vcc (3,2 a 5,0 V) e dois de ground (GND).
  • Dois pinos para comunicação serial assíncrona: Rx e Tx. A comunicação é a 9600bps (formato 8N1) e os sinais estão em nível lógico. Por motivos que não estão claros para mim, deve ser colocado um resistor de 1K em série na ligação do pino Rx.
  • Dois pinos para ligar diretamente um alto-falante: SPK+ e SPK-. Usando estes pinos o som será mono e com potência máxima de 3W.
  • Dois pinos para ligar um fone de ouvido ou um amplificador: DAC_R e DAC_L. Estes sinais são em relação ao GND e fornecem som em estéreo.
  • Dois pinos para ligar um pendrive USB: USB- e USB+
  • Um pino para indicar que uma música está sendo tocada: BUSY
  • Dois pinos para ligar botões de forma digital: I/O1 e I/O2.
  • Dois pinos para ligar botões de forma digital ou analógica: ADKEY1 e ADKEY2

Temos portando duas formas de pegar o áudio de saída:
  • Ligar um alto-falante diretamente aos pinos SPK+ e SPK- para obter um som amplificado e mono
  • Ligar um fone de ouvido ou um amplificador aos pinos DAC_R, DAC_L e GND para obter som estéreo.
O módulo pode ser usado de forma autônoma (sem um microcontrolador externo), sendo controlado por botões. Existem duas formas de fazer isto:
  • Ligar quatro botões entre os pinos I/O1, I/O2, ADKEY1 e ADKEY2 e GND. Esta montagem fornece seis funções: próxima música/diminui volume, música anterior/aumenta volume, primeiro "segmento" (primeiro arquivo) e quinto segmento. No caso de botões com duas funções, a primeira é com um aperto curto e a segunda com um aperto longo.
  • Ligar 20 teclas entre os pinos ADKEY1 e ADKEY2 e GND. Cada tecla deve ter em série um resistor de um certo valor, conforme a figura abaixo.


Mesmo na forma autônoma os arquivos e diretórios devem ter os nomes inciados por números. Para confundir, ao navegar pelos botões os nomes são ignorados e é seguida a ordem em que os diretórios e arquivos foram criados. Além disso, o módulo acorda sempre com o volume no máximo.

Comunicação com um Microcontrolador

A comunicação usa os pinos Rx e Tx. Cada comando deve ser enviado em um pacote com 10 bytes:
  • byte inicial: 0x7E
  • versão: 0xFF
  • tamanho: 0x06
  • comando: ver no documento
  • feedback: 0 (sem), 1 (com)
  • byte mais significativo do parâmetro (ver no documento)
  • byte menos significativo do parâmetro (ver no documento)
  • byte mais significativo do checksum
  • byte menos significativo do checksum
  • byte final: 0xEF
O checksum é o negativo da soma (em 16 bits) dos bytes da versão até o parâmetro (inclusive).

O datasheet lista 26 comandos "de controle" e 12 comandos "de consulta" (descartando os reservados). As respostas utilizam o mesmo formato de pacote que os comandos.

Os comandos que mais nos interessam são os de tocar um arquivo. Os arquivos podem estar em formato MP3 ou WAV e existem quatro formas tocar um arquivo específico:
  • Usar arquivos com nomes de 0001.mp3 (ou .wav) a 3000.mp3 no diretório raiz do cartão SD (ou pendrive). Isto é feito com o comando 0x03, com o número da faixa (1 a 3000) no parâmetro. Obs: o diretório raiz costuma ter uma quantidade fixa de entradas de diretório, normalmente menor que 3000.
  • Usar arquivos com nomes de 0001.mp3 (ou .wav) a 3000.mp3 no diretório \mp3. Isto é feito com o comando 0x12, com o número da faixa (1 a 3000) no parâmetro.
  • Usar arquivos com nomes de 001.mp3 (ou .wav) a 255.mp3 nos diretórios \01 a \99. Isto é feito com o comando 0x0F com o número do diretório no byte mais significativo e o número do arquivo no byte menos significativo do parâmetro.
  • Usar arquivos com nomes de 0001.mp3 (ou .wav) a 1999.mp3 nos diretórios \01 a \15. Isto é feito com o comando 0x14 com o número do diretório nos 4 bits mais significativos do parâmetro e o número do arquivo nos 12 bits menos significativos.
De um modo geral, eu considero a segunda forma a mais prática. A terceira e quarta formas podem ser interessante se você tiver um número grande de arquivos e/ou quiser organizá-los em diretórios.

Os demais comandos permitem interromper a execução, mudar alguns parâmetros e consultar algumas informações. Um recurso exótico é permitir interromper uma música e tocar um outro arquivo, com o uso sugerido de inserir anúncios.

Um exemplo (bem simples) de uso da comunicação serial está no meu projeto com o Franzininho. A biblioteca oficial está aqui.


Nenhum comentário: