Catalex Seriële MP3 Speler voor Arduino UNO – Eenvoudige Installatie & Besturing
Onderdelen en benodigdheden
| Onderdeel | Aantal |
|---|---|
| Arduino UNO | 1 |
| Seriële MP3-speler van Catalex | 1 |
| Wat leuke funk-muziek (op SD-kaart) | 1 |
Apps en online diensten
- Arduino IDE
Over dit project
Hoe de SERIAL MP3 PLAYER V1.0 van CATALEX te gebruiken
Eerst de benodigde bibliotheken downloaden:
#include <SoftwareSerial.h>
Kies welke Arduino-pins verbonden worden met de MP3-speler en initialiseer het seriële protocol:
#define ARDUINO_RX 5 // moet verbonden worden met TX van de Serial MP3 Player module
#define ARDUINO_TX 6 // verbinden met RX van de module
SoftwareSerial mySerial(ARDUINO_RX, ARDUINO_TX); // initialiseer seriële protocol
Commando's uit de datasheet
Hier zijn alle commando's vertaald naar #define statements:
////////////////////////////////////////////////////////////////////////////////////
// Alle benodigde commando's uit de datasheet (https://geekmatic.in.ua/pdf/Catalex_MP3_board.pdf)
static int8_t Send_buf[8] = {0}; // De MP3-speler begrijpt orders in een 8-int string
// 0X7E FF 06 command 00 00 00 EF; (als command=01 volgende nummer)
#define NEXT_SONG 0X01
#define PREV_SONG 0X02
#define CMD_PLAY_W_INDEX 0X03 // DATA VEREIST (nummer van het lied)
#define VOLUME_UP_ONE 0X04
#define VOLUME_DOWN_ONE 0X05
#define CMD_SET_VOLUME 0X06 // DATA VEREIST (volume 0 tot 30 (0x1E))
#define SET_DAC 0X17
#define CMD_PLAY_WITHVOLUME 0X22 // data nodig: 0x7E 06 22 00 xx yy EF; (xx volume)(yy liednummer)
#define CMD_SEL_DEV 0X09 // OPSLAGAPPARAAT SELECTEREN, DATA VEREIST
#define DEV_TF 0X02 // HELLO, IK BEN DE VEREISTE DATA
#define SLEEP_MODE_START 0X0A
#define SLEEP_MODE_WAKEUP 0X0B
#define CMD_RESET 0X0C // CHIP RESET
#define CMD_PLAY 0X0D // HERNEEM AFSPelen
#define CMD_PAUSE 0X0E // AFSPelen GEPAUZEERD
#define CMD_PLAY_WITHFOLDER 0X0F // DATA NODIG, 0x7E 06 0F 00 01 02 EF; (speel lied in map \01\002xxxxxx.mp3)
#define STOP_PLAY 0X16
#define PLAY_FOLDER 0X17 // data nodig: 0x7E 06 17 00 01 XX EF; (speel map 01) (waarde xx onbelangrijk)
#define SET_CYCLEPLAY 0X19 // data nodig: 00 start; 01 stop
#define SET_DAC 0X17 // data nodig: 00 start DAC OUTPUT; 01 DAC geen output
////////////////////////////////////////////////////////////////////////////////////
De MP3-chip begrijpt orders bestaande uit een int array[8] met dit formaat:
0x7E FF aa bb 00 xx yy EF
Waarbij:
- Het eerste en laatste byte zijn vast: 0x7E en 0xEF
aais het versienummer, gewoon 0x06bbis het daadwerkelijke besturingscommando (zie bovenstaande lijst)xxis het eerste data-byteyyis het tweede data-byte
Dit is de functie die de array samenstelt. We hoeven alleen een van de gedefinieerde commando's te kiezen en de datawaarde op te geven:
void sendCommand(int8_t command, int16_t dat) {
delay(20);
Send_buf[0] = 0x7e; // startbyte
Send_buf[1] = 0xff; // versie
Send_buf[2] = 0x06; // aantal bytes van commando zonder start/eind byte
Send_buf[3] = command;
Send_buf[4] = 0x00; // 0x00 = geen feedback, 0x01 = feedback
Send_buf[5] = (int8_t)(dat >> 8); // data high byte
Send_buf[6] = (int8_t)(dat); // data low byte
Send_buf[7] = 0xef; // eindbyte
for (uint8_t i = 0; i < 8; i++) {
mySerial.write(Send_buf[i]);
}
}
In de setup() functie selecteren we het juiste opslagapparaat (TF-kaart) en geven we het tijd om op te starten:
void setup() {
mySerial.begin(9600); // Start seriële communicatie voor MP3
delay(500); // Wacht op chip initialisatie
sendCommand(CMD_SEL_DEV, DEV_TF); // Selecteer TF-kaart
delay(200); // Wacht 200ms
}
In de loop() spelen we eenvoudig het eerste liedje af:
void loop() {
sendCommand(CMD_PLAY_WITHVOLUME, 0X0F01); // Speel eerste lied met volume 15
delay(1000000); // Stuur elke 100 seconden play-commando
}
Hoe nummers op de SD-kaart te zetten
Volgens de datasheet (met zeer slecht Engels):
De MP3-chip leest .mp3 of .wav bestanden alfabetisch geïndexeerd. Als we mappen aanmaken met namen 01, 02 en nummers met namen 001xxxxx.mp3, 002xxxx.mp3, dan weten we zeker welk nummer/map we aanspreken.
VEEL PLEZIER MET HACKEN!
EXTRA: Dezelfde code maar dan met hardware serial (nodig voor mijn STM32-board).
Code
TEST het apparaat (Arduino)
Initialiseer en speel één lied met volume 30
// Code herrangschikt door Javier Muñoz 10/11/2016 - javimusama@hotmail.com
#include <SoftwareSerial.h>
#define ARDUINO_RX 5 // verbinden met TX van Serial MP3 Player module
#define ARDUINO_TX 6 // verbinden met RX van de module
SoftwareSerial mySerial(ARDUINO_RX, ARDUINO_TX);
////////////////////////////////////////////////////////////////////////////////////
// Alle commando's uit de datasheet
static int8_t Send_buf[8] = {0};
#define NEXT_SONG 0X01
#define PREV_SONG 0X02
#define CMD_PLAY_W_INDEX 0X03
#define VOLUME_UP_ONE 0X04
#define VOLUME_DOWN_ONE 0X05
#define CMD_SET_VOLUME 0X06
#define SET_DAC 0X17
#define CMD_PLAY_WITHVOLUME 0X22
#define CMD_SEL_DEV 0X09
#define DEV_TF 0X02
#define SLEEP_MODE_START 0X0A
#define SLEEP_MODE_WAKEUP 0X0B
#define CMD_RESET 0X0C
#define CMD_PLAY 0X0D
#define CMD_PAUSE 0X0E
#define CMD_PLAY_WITHFOLDER 0X0F
#define STOP_PLAY 0X16
#define PLAY_FOLDER 0X17
#define SET_CYCLEPLAY 0X19
#define SET_DAC 0X17
////////////////////////////////////////////////////////////////////////////////////
void setup() {
Serial.begin(9600); // Seriële monitor op PC
mySerial.begin(9600); // Seriële communicatie voor MP3
delay(500); // Wacht op chip initialisatie
sendCommand(CMD_SEL_DEV, DEV_TF); // Selecteer TF-kaart
delay(200); // Wacht 200ms
}
void loop() {
sendCommand(CMD_PLAY_WITHVOLUME, 0X0F01); // Speel eerste lied met volume 15
delay(1000000); // 100 seconden
}
void sendCommand(int8_t command, int16_t dat) {
delay(20);
Send_buf[0] = 0x7e;
Send_buf[1] = 0xff;
Send_buf[2] = 0x06;
Send_buf[3] = command;
Send_buf[4] = 0x00;
Send_buf[5] = (int8_t)(dat >> 8);
Send_buf[6] = (int8_t)(dat);
Send_buf[7] = 0xef;
for (uint8_t i = 0; i < 8; i++) {
mySerial.write(Send_buf[i]); // Stuur naar MP3
Serial.print(Send_buf[i], HEX); // Stuur naar seriële monitor
}
Serial.println();
}
GitHub
https://github.com/aureleq/TrumpButton
Schema's
Volgens de datasheet kan de voedingsspanning varieren van 3,2V tot 5V met een verbruik van 200mA.

Productieproces
- Versterk het Onderhoudscrisis Bericht: Download Blues & Reggae Versies van het 'Onderhoudscrisis Lied'
- Spelpianist: Akoestische Traditie Samengevoegd met Geautomatiseerde Precisie
- Bouw een Squid Game-thema Interactieve Pop met Arduino UNO – DIY Project
- Bluetooth-gecontroleerde Arduino Spybot bouwen
- FlickMote: Gebarengecontroleerde IR-afstandsbediening voor Slimme Huizen
- DIY Arduino TV-B-Gone: Universele TV-uit-schakelaar
- Bouw een Aangepaste LED Hoofdklok met Alarm – Zichtbaar vanaf 12 Meter
- Find Me: Slimme Item Locator met Arduino en Bluetooth
- Geoptimaliseerde Voedingsoplossingen voor Arduino Projecten
- Audio afspelen met Arduino UNO en DFPlayer Mini – Stap-voor-stap handleiding
- Arduino Web-gecontroleerde MP3 Speler: Eenvoudige Audio Afspelen via Browser