Catalex Serial MP3 Player für Arduino UNO – Einfache Einrichtung & Steuerung
Komponenten und Zubehör
| Komponente | Menge |
|---|---|
| Arduino UNO | 1 |
| Serial MP3 Player von Catalex (V1.0) | 1 |
| Musikdateien (MP3/WAV) auf MicroSD-Karte | 1 |
Apps und Onlinedienste
- Arduino IDE
Über dieses Projekt
Verwendung des Catalex Serial MP3 Player V1.0
Der Catalex MP3-Player wird über eine serielle Schnittstelle (SoftwareSerial) angesteuert. Hier ist eine Schritt-für-Schritt-Anleitung.
1. Bibliotheken einbinden
#include <SoftwareSerial.h>
2. Pins definieren und serielle Kommunikation initialisieren
#define ARDUINO_RX 5 // verbindet mit TX des MP3-Moduls
#define ARDUINO_TX 6 // verbindet mit RX des Moduls
SoftwareSerial mySerial(ARDUINO_RX, ARDUINO_TX);
3. Befehlssatz (aus Datenblatt)
// Alle Befehle als 8-Byte-Array: 0x7E FF 06 CMD 00 00 00 EF
#define NEXT_SONG 0X01
#define PREV_SONG 0X02
#define CMD_PLAY_W_INDEX 0X03 // Daten erforderlich: Titelnummer
#define VOLUME_UP_ONE 0X04
#define VOLUME_DOWN_ONE 0X05
#define CMD_SET_VOLUME 0X06 // Daten: Lautstärke 0-30 (0x1E)
#define SET_DAC 0X17
#define CMD_PLAY_WITHVOLUME 0X22 // Daten: 0x7E 06 22 00 xx yy EF (xx=Vol, yy=Titel)
#define CMD_SEL_DEV 0X09 // Speichermedium wählen, Daten erforderlich
#define DEV_TF 0X02 // TF-Karte (MicroSD)
#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 // Daten: Verzeichnis & Datei
#define STOP_PLAY 0X16
#define PLAY_FOLDER 0X17 // Ordner abspielen
#define SET_CYCLEPLAY 0X19 // 00=Start, 01=Stop
// SET_DAC doppelt definiert im Original – hier nur einmal
4. Befehlsformat
Der Chip erwartet ein Array von 8 Bytes:
0x7E FF 06 CMD 00 XX YY EF
0x7EStartbyte (fix)0xFFVersionsbyte (fix)0x06Anzahl der Datenbytes ohne Start/EndeCMDBefehlscode00Feedback-Flag (0=kein Feedback, 1=Feedback)XXHigh-Byte der DatenYYLow-Byte der Daten0xEFEndbyte (fix)
5. Sendefunktion
static int8_t Send_buf[8] = {0};
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; // kein Feedback
Send_buf[5] = (int8_t)(dat >> 8); // Data High
Send_buf[6] = (int8_t)(dat); // Data Low
Send_buf[7] = 0xEF;
for (uint8_t i = 0; i < 8; i++) {
mySerial.write(Send_buf[i]);
}
}
6. Setup: Gerät auswählen
void setup() {
mySerial.begin(9600);
delay(500); // Chip-Initialisierung abwarten
sendCommand(CMD_SEL_DEV, DEV_TF); // TF-Karte wählen
delay(200);
}
7. Loop: Ersten Titel mit Lautstärke 15 abspielen
void loop() {
sendCommand(CMD_PLAY_WITHVOLUME, 0x0F01); // Volume 0x0F (15), Titel 0x01
delay(1000000); // 1000 Sekunden Pause – nur Demo
}
Musik auf die SD-Karte kopieren
Der MP3-Chip liest Dateien alphabetisch. Um die Reihenfolge zu kontrollieren, sollten Ordner und Dateien numerisch benannt werden:
- Ordner:
01,02, … - Dateien:
001song.mp3,002song.mp3, …
So lässt sich per CMD_PLAY_WITHFOLDER oder PLAY_FOLDER gezielt steuern.
Code (komplettes Beispiel)
// Code angepasst von Javier Muñoz, 10.11.2016
#include <SoftwareSerial.h>
#define ARDUINO_RX 5
#define ARDUINO_TX 6
SoftwareSerial mySerial(ARDUINO_RX, ARDUINO_TX);
// Befehlsdefinitionen (wie oben) ...
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
void setup() {
Serial.begin(9600);
mySerial.begin(9600);
delay(500);
sendCommand(CMD_SEL_DEV, DEV_TF);
delay(200);
}
void loop() {
sendCommand(CMD_PLAY_WITHVOLUME, 0x0F01);
delay(1000000);
}
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]);
Serial.print(Send_buf[i], HEX); // Debug-Ausgabe
}
Serial.println();
}
Schaltplan
Stromversorgung: 3,2 – 5 V, Stromaufnahme ca. 200 mA.

Herstellungsprozess
- Spielerklavier: Akustische Tradition trifft automatisierte Präzision
- Instandhaltungskrise hörbar machen: Blues- & Reggae-Versionen des „Maintenance Crisis Song“ zum Download
- Squid Game Puppe mit Arduino UNO bauen – Interaktives DIY-Projekt
- Bluetooth-gesteuerter Arduino-Spybot bauen – Überwachungsroboter mit IP-Kamera
- FlickMote: Gestensteuerung per Ultraschall & IR für Smart Home (Arduino 101)
- DIY Arduino TV-B-Gone: Universelle TV-Aus-Fernbedienung
- Einen eigenen LED-Master-Clock mit Alarm bauen – aus 12 Metern Entfernung ablesbar
- Find Me: Smarter Gegenstands-Finder mit Arduino und Bluetooth
- Optimierte Stromversorgungslösungen für Arduino-Projekte
- Audio-Wiedergabe mit Arduino UNO und DFPlayer Mini – Schritt-für-Schritt-Anleitung