Leitor Arduino Mp3 Catalex
Componentes e suprimentos
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Aplicativos e serviços online
|
Sobre este projeto
Como usar o SERIAL MP3 PLAYER V1.0 da CATALEX:
- Primeiro, baixe as bibliotecas normalmente:
#include
- Agora escolhemos quais pinos do Arduino serão anexados ao mp3 player e inicializamos o protocolo serial.
#define ARDUINO_RX 5 // deve conectar ao TX do módulo Serial MP3 Player #define ARDUINO_TX 6 // conectar ao RX do módulo SoftwareSerial mySerial (ARDUINO_RX, ARDUINO_TX); // iniciar o protocolo serial, diga para myserial quais pinos são TX e RX
- Acabei de traduzir aqui para
#define
o material da folha de dados:
////////////////////////////////////////////// //////////////////////////////////////////// // todos os comandos necessários na folha de dados ( http://geekmatic.in.ua/pdf/Catalex_MP3_board.pdf) static int8_t Send_buf [8] ={0}; // O tocador de MP3 entende ordens em uma string de 8 int // 0X7E FF 06 comando 00 00 00 EF; (se o comando =01 próxima ordem de música) #define NEXT_SONG 0X01 #define PREV_SONG 0X02 #define CMD_PLAY_W_INDEX 0X03 // DADOS SÃO NECESSÁRIOS (número de música) #define VOLUME_UP_ONE 0X04 #define VOLUME_DOWN_ONE 0X05 // REQUERIDO CMD_PLAY_W_INDEX 0X03 // DADOS SÃO NECESSÁRIOS (número de música) #define VOLUME_UP_ONE 0X04 #define VOLUME_DOWN_ONE 0X05 // DEFINIR número de DATAXE_DOWN_ONE 0X05 de volume de 0 a 30 (0x1E)) #define SET_DAC 0X17 #define CMD_PLAY_WITHVOLUME 0X22 // dados são necessários 0x7E 06 22 00 xx yy EF; (xx volume) (yy número da música) #define CMD_SEL_DEV 0X09 // SELECIONE ARMAZENAMENTO DISPOSITIVO, DADOS SÃO NECESSÁRIOS #define DEV_TF 0X02 // OLÁ, IM OS DADOS NECESSÁRIOS #define SLEEP_MODE_START 0X0A #define SLEEP_MODE_WAKEUP 0X0B #define CMD_RESET 0X0C // CHIP RESET #defineBD_PALAY0 // REINICIALIZAÇÃO DE CHIP # 0EFINAR CMPLAY0 // REINICIALIZAÇÃO DE CHIPD_EFINER 0 // DEFINAR CMPLAY0 // REINICIALIZAÇÃO 0 // DEFINAR CMPLAY0 // DEFINAR CMPLAY0 A REPRODUÇÃO ESTÁ PAUSADA #define CMD_PLAY_WITHFOLDER 0X0F // DADOS SÃO NECESSÁRIOS, 0x7E 06 0F 00 01 02 EF; (reproduz a música com o diretório \ 01 \ 002xxxxxx.mp3 #define STOP_PLAY 0X16 #define PLAY_FOLDER 0X17 // dados são necessários 0x7E 06 17 00 01 XX EF; (reproduz a pasta 01) (valor xx não nos importamos) #define SET_CYCLEPLAY 0X19 // dados são necessários 00 start; 01 close #define SET_DAC 0X17 // dados são necessários 00 start DAC OUTPUT; 01 DAC sem saída ////////////////////////////// //////////////////////////////////////////////////////// ////
- O chip MP3 entende pedidos feitos de matriz int [8] com este formato
0x7E FF aa bb 00 xx yy EF
Onde:
- o primeiro e o último int são fixados com os valores 0x7E e 0xEF
-
aa
é o número da versão, basta colocar 0x06; -
bb
é o comando de controle real listado no ponto anterior -
xx
é o primeiro b int de dados -
yy
é o segundo int de dados
E esta é a função real que constrói o array. Só precisamos escolher um dos
#defined
comandos e coloque o valor dos dados. void sendCommand (comando int8_t, int16_t dat) {delay (20); Send_buf [0] =0x7e; // byte inicial Send_buf [1] =0xff; // versão Send_buf [2] =0x06; // o número de bytes do comando sem iniciar o byte e finalizar o byte Send_buf [3] =comando; // Send_buf [4] =0x00; // 0x00 =sem feedback, 0x01 =feedback Send_buf [5] =(int8_t) (dat>> 8); // datah Send_buf [6] =(int8_t) (dat); // datal Send_buf [7] =0xef; // byte final para (uint8_t i =0; i <8; i ++) // {mySerial.write (Send_buf [i]); }}
Na função de configuração, precisamos selecionar o dispositivo adequado para TF e dar-lhe tempo para se estabelecer (mágica de processo assíncrono):
void setup () {mySerial.begin (9600); // Inicie nosso coms serial para nosso monitor serial! delay (500); // Espera que a inicialização do chip esteja completa sendCommand (CMD_SEL_DEV, DEV_TF); // selecione o atraso do cartão TF (200); // aguarde 200ms}
No loop, fiz uma simples reprodução da música rotulada como 001:
void loop () {sendCommand (CMD_PLAY_WITHVOLUME, 0X0F01); // tocar a primeira música com volume 15 de atraso de classe (1000000); // o programa enviará a opção de reprodução a cada 100 segundos para o chip catalex}
Como fazer upload de músicas para o cartão SD:
Como se costuma dizer na folha de dados com um inglês muito ruim:
O chip Mp3 lê o
.mp3
ou .wav
indexados alfabeticamente, portanto, se criarmos pastas com os nomes 01, 02. E as músicas com o nome 001xxxxx.mp3
, 002xxxx.mp3
. Podemos ter certeza sobre a música / pasta que estamos usando. Aqui você tem uma biblioteca de som gratuita.
HAPPY HACKING!
EXTRA:
mesmo código, mas usando serial de hardware (eu tive que fazer para minha placa STM32)
Código
- TESTE o dispositivo
TESTE o dispositivo Arduino
inicialize e reproduza uma música com o volume 30// código reorganizado por Javier Muñoz 11/10/2016 pergunte-me em [email protected]#include#define ARDUINO_RX 5 // deve se conectar ao TX do Módulo Serial MP3 Player # define ARDUINO_TX 6 // conectar ao RX do móduloSoftwareSerial mySerial (ARDUINO_RX, ARDUINO_TX); // iniciar o protocolo serial, informar ao myserial quais pinos são TX e RX /////////// //////////////////////////////////////////////////////// ///////////////////////////// Todos os comandos necessários na folha de dados (http://geekmatic.in.ua/pdf/Catalex_MP3_board.pdf) static int8_t Send_buf [8] ={0}; // O tocador de MP3 entende as ordens em uma string de 8 int // 0X7E FF 06 comando 00 00 00 EF; (se o comando =01 próxima ordem de música) #define NEXT_SONG 0X01 #define PREV_SONG 0X02 #define CMD_PLAY_W_INDEX 0X03 // DADOS SÃO NECESSÁRIOS (número da música) #define VOLUME_UP_ONE 0X04 # define VOLUME_DOWN_ONE 0X05 # define CMD_SET_VOLUME 0X06 // DADOS SÃO NECESSÁRIOS (número de volume de 0 a 30 SET_DAC # define 0X1E) CM D_PLAY_WITHVOLUME 0X22 // os dados são necessários 0x7E 06 22 00 xx yy EF; (xx volume) (yy número da música) #define CMD_SEL_DEV 0X09 // SELECIONE O DISPOSITIVO DE ARMAZENAMENTO, OS DADOS SÃO NECESSÁRIOS #define DEV_TF 0X02 // OLÁ, IM OS DADOS NECESSÁRIOS #define SLEEP_MODE_START 0X0A # define SLEEP_MODE_WAKEUP 0X0B # define CMD_RESET 0X0C // CHIP RESET # define CMD_PLAY 0X0D // RETOMA REPRODUZIR # define CMD_PAUSE 0X0E // PLAYBACK ESTÁ PAUSADO # define CMD_PLAY 0X0D 0X0D // RETOMAR REPRODUÇÃO # define CMD_PAUSE 0X0E // A REPRODUÇÃO ESTÁ PAUSADA # define CMD_PLAY 0X0 0X0D 0X0D // RETOMAR REPRODUÇÃO # define CMD_PAUSE 0X0E // A REPRODUÇÃO ESTÁ PAUSADA # define CMD_PLAY 0X06 01 0xEFOLD 0; (toca a música com o diretório \ 01 \ 002xxxxxx.mp3 # define STOP_PLAY 0X16 # define PLAY_FOLDER 0X17 // os dados são necessários 0x7E 06 17 00 01 XX EF; (toca a pasta 01) (valor xx não nos importamos) #define SET_CYCLEPLAY 0X19 // dados são necessários 00 start; 01 close # define SET_DAC 0X17 // dados são necessários 00 start DAC OUTPUT; 01 DAC sem saída //////////////////////////////// //////////////////////////////////////////////////////// //// void setup () {Serial.begin (9600); // Iniciar nossas comunicações seriais para monitor serial em nosso pcmySerial.begin (9600); // Iniciar nossas comunicações seriais para o MP3delay (500); // Aguarde a inicialização do chip está completa sendCommand (CMD_SEL_DEV, DEV_TF); // selecione o atraso do cartão TF (200); // aguarde 200ms} void loop () {sendCommand (CMD_PLAY_WITHVOLUME, 0X0F01); // reproduz a primeira música com atraso de classe de volume 15 (1000000); // o programa enviará a opção de reprodução a cada 100 segundos para o chip catalex} void sendCommand (comando int8_t, int16_t dat) {delay (20); Send_buf [0] =0x7e; // byte inicial Send_buf [1] =0xff; // versão Send_buf [2] =0x06; // o número de bytes do comando sem iniciar o byte e finalizar o byte Send_buf [3] =comando; // Send_buf [4] =0x00; // 0x00 =sem feedback, 0x01 =feedback Send_buf [5] =(int8_t) (dat>> 8); // datah Send_buf [6] =(int8_t) (dat); // datal Send_buf [7] =0xef; // byte final para (uint8_t i =0; i <8; i ++) // {mySerial.write (Send_buf [i]); // enviar bit para serial mp3 Serial.print (Send_buf [i], HEX); / / enviar bit para monitor serial em pc} Serial.println ();}
Esquemas
Na ficha técnica podemos ver que a fonte de alimentação pode variar de 3,2 a 5vcom um consumo de 200mA
Processo de manufatura