Catalex del reproductor Mp3 Arduino
Componentes y suministros
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Aplicaciones y servicios en línea
|
Acerca de este proyecto
Cómo utilizar SERIAL MP3 PLAYER V1.0 de CATALEX:
- Primero, descargue las bibliotecas como de costumbre:
#include
- Ahora elegimos qué pines de Arduino se conectarán al reproductor de mp3 e inicializamos el protocolo serial.
#define ARDUINO_RX 5 // debe conectarse a TX del módulo Serial MP3 Player #define ARDUINO_TX 6 // conectarse a RX del módulo SoftwareSerial mySerial (ARDUINO_RX, ARDUINO_TX); // iniciar el protocolo serial, indicar a mi serie cuyos pines son TX y RX
- Aquí acabo de traducir a
#define
el material de la hoja de datos:
////////////////////////////////////////////// //////////////////////////////////////// // todos los comandos necesarios en la hoja de datos ( http://geekmatic.in.ua/pdf/Catalex_MP3_board.pdf) static int8_t Send_buf [8] ={0}; // El reproductor MP3 entiende las órdenes en una cadena de 8 int // 0X7E FF 06 comando 00 00 00 EF; (si el comando =01 siguiente orden de canción) #define NEXT_SONG 0X01 #define PREV_SONG 0X02 #define CMD_PLAY_W_INDEX 0X03 // SE REQUIEREN DATOS (número de canción) #define VOLUME_UP_ONE 0X04 #define VOLUME_DOWN_ONE_0XOLED_05 (número de volumen de 0 a 30 (0x1E)) #define SET_DAC 0X17 #define CMD_PLAY_WITHVOLUME 0X22 // Se necesitan datos 0x7E 06 22 00 xx yy EF; (xx volumen) (yy número de canción) #define CMD_SEL_DEV 0X09 // SELECCIONAR ALMACENAMIENTO DISPOSITIVO, SE REQUIEREN DATOS #define DEV_TF 0X02 // HOLA, YO SOY LOS DATOS REQUERIDOS #define SLEEP_MODE_START 0X0A #define SLEEP_MODE_WAKEUP 0X0B #define CMD_RESET 0X0C // CHIPBED_PLAY 0defineXCM0 LA REPRODUCCIÓN ESTÁ EN PAUSA #define CMD_PLAY_WITHFOLDER 0X0F // SE NECESITAN DATOS, 0x7E 06 0F 00 01 02 EF; (reproducir la canción con el directorio \ 01 \ 002xxxxxx.mp3 #define STOP_PLAY 0X16 #define PLAY_FOLDER 0X17 // Se necesitan datos 0x7E 06 17 00 01 XX EF; (reproducir la carpeta 01) (valor xx no nos importa) #define SET_CYCLEPLAY 0X19 // se necesitan datos 00 start; 01 cerrar #define SET_DAC 0X17 // se necesitan datos 00 iniciar DAC OUTPUT; 01 DAC sin salida //////////////////////////////// //////////////////////////////////////////////////// ////
- El chip MP3 comprende las órdenes hechas de int array [8] con este formato
0x7E FF aa bb 00 xx yy EF
Dónde:
- el primero y el último int se fijan con valores 0x7E y 0xEF
-
aa
es el número de versión, solo ponga 0x06; -
bb
es el comando de control real listado en el punto anterior -
xx
es el primer b int de datos -
yy
es el segundo int de datos
Y esta es la función real que construye la matriz. Solo tenemos que elegir uno de los #defined
comandos y poner el valor de los datos.
void sendCommand (comando int8_t, int16_t dat) {retraso (20); Send_buf [0] =0x7e; // byte inicial Send_buf [1] =0xff; // versión Send_buf [2] =0x06; // el número de bytes del comando sin byte inicial y byte final Send_buf [3] =comando; // Send_buf [4] =0x00; // 0x00 =sin comentarios, 0x01 =comentarios 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]); }}
En la función de configuración, debemos seleccionar el dispositivo adecuado para TF y darle tiempo para que se establezca (magia de proceso asíncrono):
void setup () {mySerial.begin (9600); // ¡Inicie nuestras comunicaciones en serie para nuestro monitor en serie! delay (500); // Espere a que se complete la inicialización del chip sendCommand (CMD_SEL_DEV, DEV_TF); // seleccione el retardo de la tarjeta TF (200); // espere 200ms}
En el bucle, hice una reproducción simple de la canción etiquetada como 001:
void loop () {sendCommand (CMD_PLAY_WITHVOLUME, 0X0F01); // reproduce la primera canción con un retraso de clase de volumen 15 (1000000); // el programa enviará la opción de reproducción cada 100 segundos al chip catalex}
Cómo subir canciones a la tarjeta SD:
Como dicen en la hoja de datos con un inglés realmente malo:
El chip Mp3 lee el .mp3
o .wav
indexadas alfabéticamente, por lo que si creamos carpetas con los nombres 01, 02. Y canciones con el nombre 001xxxxx.mp3
, 002xxxx.mp3
. Podemos estar seguros de la canción / carpeta que estamos usando.
Aquí tienes una biblioteca de sonidos gratuita.
¡FELIZ HACKING!
EXTRA:
mismo código pero usando hardware serial (tuve que hacerlo para mi placa STM32)
Código
- PRUEBA el dispositivo
PRUEBA el dispositivo Arduino
initialice y reproduzca una canción con volumen 30// código reordenado por Javier Muñoz 10/11/2016 pregúnteme a [email protected]#include#define ARDUINO_RX 5 // debe conectarse a TX del Módulo Serial MP3 Player # define ARDUINO_TX 6 // conecta a RX del móduloSoftwareSerial mySerial (ARDUINO_RX, ARDUINO_TX); // inicia el protocolo serial, indica a myserial qué pines son TX y RX /////////// //////////////////////////////////////////////////// ///////////////////////// todos los comandos necesarios en la hoja de datos (http://geekmatic.in.ua/pdf/Catalex_MP3_board.pdf) estático int8_t Send_buf [8] ={0}; // El reproductor MP3 entiende las órdenes en una cadena de 8 int // 0X7E FF 06 comando 00 00 00 EF; (si comando =01 siguiente orden de canción) #define NEXT_SONG 0X01 #define PREV_SONG 0X02 #define CMD_PLAY_W_INDEX 0X03 // SE REQUIEREN DATOS (número de canción) #define VOLUME_UP_ONE 0X04 # define VOLUME_DOWN_ONE 0X05 # define CMD_SET_VOLUME 0X06 // SE REQUIEREN DATOS (número de volumen desde 0 hasta 30 definir SET_DAC) # define SET_DAC) CM D_PLAY_WITHVOLUME 0X22 // Se necesitan datos 0x7E 06 22 00 xx yy EF; (xx volumen) (yy número de canción) #define CMD_SEL_DEV 0X09 // SELECCIONAR DISPOSITIVO DE ALMACENAMIENTO, SE REQUIEREN DATOS #define DEV_TF 0X02 // HOLA, IMAGEN LOS DATOS REQUERIDOS #define SLEEP_MODE_START 0X0A # define SLEEP_MODE_WAKEUP 0X0B # define CMD_RESET 0X0C // CHIP RESET # define CMD_PLAY 0X0D // REANUDA REPRODUCCIÓN # define CMD_PAUSE 0X0E // REPRODUCCIÓN ESTÁ EN PAUSA # define CMDFOLD_PLAY 01 0x02; (reproduce la canción con el directorio \ 01 \ 002xxxxxx.mp3 # define STOP_PLAY 0X16 # define PLAY_FOLDER 0X17 // se necesitan datos 0x7E 06 17 00 01 XX EF; (reproduce la carpeta 01) (valor xx no nos importa) #define SET_CYCLEPLAY 0X19 // se necesitan datos 00 inicio; 01 cerrar # definir SET_DAC 0X17 // se necesitan datos 00 iniciar DAC OUTPUT; 01 DAC sin salida //////////////////////////////// //////////////////////////////////////////////////// //// void setup () {Serial.begin (9600); // Inicie nuestras comunicaciones en serie para el monitor en serie en nuestro pcmySerial.begin (9600); // Inicie nuestras comunicaciones en serie para el MP3delay (500); // Espere la inicialización del chip está completa sendCommand (CMD_SEL_DEV, DEV_TF); // selecciona el retardo de la tarjeta TF (200); // espera 200ms} void loop () {sendCommand (CMD_PLAY_WITHVOLUME, 0X0F01); // reproduce la primera canción con el volumen 15 classdelay (1000000); // el programa enviará la opción de reproducción cada 100 segundos al chip catalex} void sendCommand (int8_t command, int16_t dat) {delay (20); Send_buf [0] =0x7e; // byte inicial Send_buf [1] =0xff; // versión Send_buf [2] =0x06; // el número de bytes del comando sin byte inicial y byte final Send_buf [3] =comando; // Send_buf [4] =0x00; // 0x00 =sin comentarios, 0x01 =comentarios 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 a mp3 serial Serial.print (Send_buf [i], HEX); / / enviar bit al monitor serial en pc} Serial.println ();}
Esquemas
En la hoja de datos podemos ver que la fuente de alimentación puede variar de 3,2 hasta 5vcon un consumo de 200mA
Proceso de manufactura