Kedves Blogolvasó!
A Catalex Serial MP3 player tesztelése, egy kicsit bonyolultabb volt számomra, mivel csak egyetlen leírást találtam a beüzemeléshez, és az pedig lengyel nyelvű. A leírást itt meg lehet tekinteni a lengyel honlapon. Az ottani tesztben egy 32 GB-os kártyával használták a modult, én csak egy 2 GB-ossal. A modulon nem sokminden van, egy Micro SD kártya foglalat egy YX5300 chip és egy 3,5 mm-es sztereo jack kimenet kapott rajta helyet és lejátszás közben pedig villog egy led. Ennek ellenére tökéletesen működik a maga egyszerűségében.
A bekötése is roppant egyszerű, szinte adja magát.
VCC – 5V
GND – GND
TX – D5 pin
RX – D6 pin
A forráskód teljes egészében egy lengyel oldalról származik, én csak átalakítottam, hogy alap szinten vezérelni tudjam. Továbbá megosztom a lengyel oldalon található HEX kód táblázatot, ami különböző parancsokat tartalmaz.
CMD | DAT1 | DAT2 | Zenefájlok betöltéséhez kapcsolódó műveletek |
0x0C | 0x00 | 0x00 | Rendszer RESET, közelező késleltetés 500ms |
0x09 | 0x00 | 0x02 | TF kártya és alkönyvtár kiválasztása, kötelező késleltetés 200ms |
0x03 | 0x00 | 0x03 | 3 zeneszám lejátszása |
0x08 | 0x00 | 0x03 | 3 zeneszám lejátszása hurokban |
0x0F | 0x02 | 0x01 | 2 mappa lejátszása hurokban |
0x22 | 0x1E | 0x04 | 4 fájl lejátszása hangerőbeállítással 30 = 1E |
0x17 | 0x02 | 0x00 | Zeneszámok lejátszása hurokban választható 2 mappa |
Itt hívnám fel a figyelmet arra, hogy a forrás megjelölésénél az SD kártyán lévő lejátszott mappát 01-02-03-as névvel kell jelölni, mert a HEX kódban így tudunk rá hivatkozni. „command(0x17, 0x0100);” Továbbá még itt jelezném, hogy bármilyen fordítási pontatlanságért elnézést kérek, mert a legjobb barátom és tolmácsom a google fordító volt a dokumentálásnál.
Kódtáblázat
CMD | DAT1 | DAT2 | Lejátszási műveletek |
0x01 | 0x00 | 0x00 | Következő szám |
0x02 | 0x00 | 0x00 | Előző szám |
0x0E | 0x00 | 0x00 | Pause |
0x0D | 0x00 | 0x00 | Lejátszás folytatása |
0x16 | 0x00 | 0x00 | STOP zeneszám előlről |
0x04 | 0x00 | 0x00 | Vol+ |
0x05 | 0x00 | 0x00 | Vol- |
0x06 | 0x00 | 0x1E | Hangerő beállítás 30 = 1E |
0x0A | 0x00 | 0x00 | Alvó állapot (Sleep mode) |
0x0B | 0x00 | 0x00 | Ébresztés alvó állapotból (Wake up) |
0x1A | 0x00 | 0x00 | DAC bekapcsolás |
0x1A | 0x00 | 0x01 | DAC kikapcsolás |
Itt úgy érzem fontos megjegyezni, hogy ez a kis kütyü lehet, hogy ilyen egyszerű de az YX5300-ba még egy 24Bites DAC is belefért a jobb hangzás érdekében.
Catalex Serial MP3 player Forráskód:
#include < SoftwareSerial.h > SoftwareSerial mp3(5, 6); static uint8_t cmdbuf[8] = {0}; static uint8_t ansbuf[10] = {0}; char parancs = '0'; void command(int8_t cmd, int16_t dat) { delay(20); cmdbuf[0] = 0x7e; // START byte cmdbuf[1] = 0xFF; // Verzió cmdbuf[2] = 0x06; // parancs hossza cmdbuf[3] = cmd; // parancs hozzárendelés cmdbuf[4] = 0x00; // 0x00 = no feedback, 0x01 = feedback cmdbuf[5] = (int8_t)(dat >> 8); // paraméter DAT1 cmdbuf[6] = (int8_t)(dat); // paraméter DAT2 cmdbuf[7] = 0xef; // END byte for (uint8_t i = 0; i < 8; i++) { mp3.write(cmdbuf[i]); } } // byte to hex függvény void byte2hex(uint8_t b) { Serial.print("0x"); if (b < 16) Serial.print("0"); Serial.print(b, HEX); Serial.print(" "); } boolean answer(void) { uint8_t i = 0; while(mp3.available() && (i < 10)) { uint8_t b = mp3.read(); ansbuf[i] = b; i++; byte2hex(b); } Serial.println(); if ((ansbuf[0] == 0x7E) && (ansbuf[9] == 0xEF)) { return true; } return false; } void setup() { Serial.begin(9600); mp3.begin(9600); delay(500); // Kötelező késleltetés az inicializálás előtt command(0x09, 0x0002); // Az SD kártya mint forrás kiválasztása delay(200); // Kötelező késleltetés az indítás előtt } void loop() { if (Serial.available() > 0) { parancs = Serial.read(); } switch (parancs) { case '1': command(0x0E, 0x00); Serial.println("Pause"); parancs = '0'; break; case '2': command(0x0D, 0x00); Serial.println("Play"); parancs = '0'; break; case '3': command(0x01, 0x00); Serial.println("Next"); parancs = '0'; break; case '4': command(0x02, 0x00); Serial.println("Previous"); parancs = '0'; break; case '5': command(0x16, 0x00); Serial.println("STOP"); parancs = '0'; break; } if (mp3.available()) // Ha a lejátszó elérhető { if (answer()) // Ha az answer függvény TRUE { if (ansbuf[3] == 0x3A) // Kártya vizsgálata // Ha be van dugva { Serial.println("TF Card in slot"); command(0x17, 0x0200); // A 02-es mappa játszása folyamatosan } if (ansbuf[3] == 0x3B) // Kártya vizsgálata // Ha ki van húzva { Serial.println("TF Card out of slot"); } } } }
Itt a forráskódnál, egy alap állapotban én most a 02-es mappa tartalmát játszom le, és a serial monitoron keresztül lehet vezérelni az 5 legegyszerűbb funkcióval a lejátszót.
1 – Pause
2 – Lejátszás folytatása
3 – Következő szám
4 – Előző szám
5 – STOP (Playnél a számot előlről kezdi)
Jó szórakozást és ereményes tesztelést a modulhoz, remélem segítettem.
Nézz be a webshopba a fellelhető alkatrészekért!