Arduino MP3-Player Catalex
Komponenten und Verbrauchsmaterialien
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Apps und Onlinedienste
|
Über dieses Projekt
So verwenden Sie den SERIAL MP3 PLAYER V1.0 von CATALEX:
- Laden Sie zuerst die Bibliotheken wie gewohnt herunter:
#include
- Jetzt wählen wir aus, welche Arduino-Pins an den MP3-Player angeschlossen werden sollen und initialisieren das serielle Protokoll.
#define ARDUINO_RX 5//sollte sich mit TX des seriellen MP3-Player-Moduls verbinden #define ARDUINO_TX 6//verbinden mit RX des Moduls SoftwareSerial mySerial(ARDUINO_RX, ARDUINO_TX);//init the serial protocol, tell zu myserial, welche Pins TX und RX sind
- Hier habe ich gerade in
#define
übersetzt das Zeug aus dem Datenblatt:
/////////////////////////////////////////// /////////////////////////////////////// // alle benötigten Befehle im Datenblatt ( http://geekmatic.in.ua/pdf/Catalex_MP3_board.pdf) static int8_t Send_buf[8] ={0};//Der MP3-Player versteht Befehle in einer 8 int Zeichenfolge //0X7E FF 06 Befehl 00 00 00 EF; (wenn Befehl =01 nächste Songreihenfolge) #define NEXT_SONG 0X01 #define PREV_SONG 0X02 #define CMD_PLAY_W_INDEX 0X03 //DATA IS REQUIRED (Nummer des Songs) #define VOLUME_UP_ONE 0X04 #define VOLUME_DOWN_ONE 0X05 #define CMD_PLAY_W_INDEX (VOLUME IST 0_SET/VOLUME) der Lautstärke von 0 bis 30(0x1E)) #define SET_DAC 0X17 #define CMD_PLAY_WITHVOLUME 0X22 //Daten werden benötigt 0x7E 06 22 00 xx yy EF;(xx Lautstärke)(yy Nummer des Songs) #define CMD_SEL_DEV 0X09 //SELECT STORAGE GERÄT, DATEN SIND ERFORDERLICH #define DEV_TF 0X02 //HALLO,IM DATEN ERFORDERLICH #define SLEEP_MODE_START 0X0A #define SLEEP_MODE_WAKEUP 0X0B #define CMD_RESET 0X0C//CHIP RESET #define CMD_PLAY 0X0D //RESUME WIEDERGABE_ PLAYBACK IS PAUSED #define CMD_PLAY_WITHFOLDER 0X0F//DATA IS NEEDED, 0x7E 06 0F 00 01 02 EF;(spielen Sie den Song mit dem Verzeichnis \01\002xxxxxx.mp3 #define STOP_PLAY 0X16 #define PLAY_FOLDER 0X17// Daten werden benötigt 0x7E 06 17 00 01 XX EF;(Spiele den 01 Ordner)(Wert xx ist uns egal) #define SET_CYCLEPLAY 0X19//Daten werden benötigt 00 start; 01 schließen #define SET_DAC 0X17//Daten werden benötigt 00 starte DAC OUTPUT;01 DAC keine Ausgabe ////////////////////////////// //////////////////////////////////////////////// ////
- Der MP3-Chip versteht Befehle aus dem int-Array[8] mit diesem Format
0x7E FF aa bb 00 xx yy EF
Wo:
- das erste und das letzte int sind mit 0x7E- und 0xEF-Werten festgelegt
aa
ist die Versionsnummer, gib einfach 0x06 ein;bb
ist der im vorherigen Punkt aufgeführte tatsächliche Steuerbefehlxx
ist der erste Datenblockyy
ist der zweite Int der Daten
Und dies ist die eigentliche Funktion, die das Array erstellt. Wir müssen nur einen der #defined
auswählen Befehle und geben Sie den Wert der Daten ein.
void sendCommand(int8_t command, int16_t dat) { delay(20); Send_buf[0] =0x7e; //Startbyte Send_buf[1] =0xff; //Version Send_buf[2] =0x06; //die Anzahl der Bytes des Befehls ohne Startbyte und Endbyte Send_buf[3] =Befehl; // Send_buf[4] =0x00;//0x00 =keine Rückmeldung, 0x01 =Rückmeldung Send_buf[5] =(int8_t)(dat>> 8);//datah Send_buf[6] =(int8_t)(dat); //Daten Send_buf[7] =0xef; //Endbyte for(uint8_t i=0; i<8; i++)// { mySerial.write(Send_buf[i]); } }
In der Setup-Funktion müssen wir das richtige Gerät für TF auswählen und ihm Zeit zum Einrichten geben (asynchrone Prozessmagie):
void setup() { mySerial.begin(9600); // Starten Sie unsere serielle Kommunikation für unseren seriellen Monitor! delay(500);//Warten Chip-Initialisierung ist abgeschlossen sendCommand(CMD_SEL_DEV, DEV_TF);//Wählen Sie die TF-Kartenverzögerung(200);//Warten Sie auf 200ms }
In der Schleife habe ich einfach den Song mit der Bezeichnung 001 abgespielt:
void loop() { sendCommand(CMD_PLAY_WITHVOLUME, 0X0F01); // den ersten Song mit Volume 15 Class Delay (1000000) abspielen; // das Programm sendet die Play-Option alle 100 Sekunden an den Catalex-Chip }
So laden Sie Songs auf die SD-Karte hoch:
Wie sie im Datenblatt mit einem wirklich schlechten Englisch sagen:
Der MP3-Chip liest die .mp3
oder .wav
alphabetisch indiziert, also wenn wir Ordner mit den Namen 01, 02 erstellen. Und Lieder mit dem Namen 001xxxxx.mp3
, 002xxxx.mp3
. Wir können sicher sein, welchen Song/Ordner wir verwenden.
Hier haben Sie eine kostenlose Soundbibliothek.
GLÜCKLICHES HACKEN!
EXTRA:
gleicher Code, aber mit Hardware-Seriell (ich musste für mein STM32-Board)
Code
- TEST das Gerät
TEST das GerätArduino
Initialisieren und spielen Sie einen Song mit Volume 30//code neu arrangiert von Javier Muñoz Serielles MP3-Player-Modul #define ARDUINO_TX 6//Verbindung zum RX des ModulsSoftwareSerial mySerial(ARDUINO_RX, ARDUINO_TX);//Initieren Sie das serielle Protokoll, teilen Sie myserial mit, welche Pins TX und RX sind /////////// //////////////////////////////////////////////// /////////////////////////alle im Datenblatt benötigten Befehle (http://geekmatic.in.ua/pdf/Catalex_MP3_board.pdf)static int8_t Send_buf[8] ={0};//Der MP3-Player versteht Befehle in einer 8 int Zeichenfolge //0X7E FF 06 command 00 00 00 EF;(if command =01 next song order) #define NEXT_SONG 0X01 #define PREV_SONG 0X02 #define CMD_PLAY_W_INDEX 0X03 //DATEN SIND ERFORDERLICH (Anzahl der Songs)#define VOLUME_UP_ONE 0X04#define VOLUME_DOWN_ONE 0X05#define CMD_SET_VOLUME 0X06//DATEN ERFORDERLICH (Anzahl der Volumes von 0 bis 30(0x1E)_ .X17#Define CM D_PLAY_WITHVOLUME 0X22 //Daten werden benötigt 0x7E 06 22 00 xx yy EF;(xx Lautstärke)(yy Nummer des Songs)#define CMD_SEL_DEV 0X09 //SPEICHERGERÄT AUSWÄHLEN, DATEN SIND ERFORDERLICH #define DEV_TF 0X02 //HALLO,IM DATEN ERFORDERLICH #define SLEEP_MODE_START 0X0A#define SLEEP_MODE_WAKEUP 0X0B#define CMD_RESET 0X0C//CHIP RESET#define CMD_PLAY 0X0D //WIEDERGABE FORTSETZEN#define CMD_PAUSE 0X0E //WIEDERGABE IST PAUSED#define CMD_PLAY_X;(spielen Sie den Song mit dem Verzeichnis \01\002xxxxxx.mp3#define STOP_PLAY 0X16#define PLAY_FOLDER 0X17// Daten werden benötigt 0x7E 06 17 00 01 XX EF;(spielen Sie den 01 Ordner)(Wert xx ist uns egal)#define SET_CYCLEPLAY 0X19//Daten werden benötigt 00 start; 01 close#define SET_DAC 0X17//Daten werden benötigt 00 start DAC OUTPUT;01 DAC keine Ausgabe ///////////////////////////// //////////////////////////////////////////////// ////void setup () { Serial.begin (9600); // Starten Sie unsere seriellen Coms für den seriellen Monitor in unserem pcmySerial.begin (9600); // Starten Sie unsere Serial Coms für DAS MP3delay (500); // Warten Sie Chip-Initialisierung ist abgeschlossen sendCommand(CMD_SEL_DEV, DEV_TF); // TF-Kartenverzögerung auswählen (200); // 200 ms warten} Schleife löschen () {sendCommand (CMD_PLAY_WITHVOLUME, 0X0F01); // den ersten Song mit Lautstärke 15 Classdelay abspielen (1000000); // das Programm sendet die Wiedergabeoption alle 100 Sekunden an den Catalex-Chip}void sendCommand (int8_t command, int16_t dat) { delay(20); Send_buf[0] =0x7e; //Startbyte Send_buf[1] =0xff; //Version Send_buf[2] =0x06; //die Anzahl der Bytes des Befehls ohne Startbyte und Endbyte Send_buf[3] =Befehl; // Send_buf[4] =0x00;//0x00 =keine Rückmeldung, 0x01 =Rückmeldung Send_buf[5] =(int8_t)(dat>> 8);//datah Send_buf[6] =(int8_t)(dat); //Daten Send_buf[7] =0xef; // Endbyte für (uint8_t i=0; i<8; i++) // {mySerial.write (Send_buf[i]); // Bit an serielles mp3 senden Serial.print (Send_buf[i],HEX);/ /Bit an seriellen Monitor im PC senden} Serial.println();}
Schaltpläne
Auf dem Datenblatt können wir sehen, dass die Stromversorgung von 3,2 bis zu 5 V variieren kannmit einem Verbrauch von 200mA
Herstellungsprozess