Catalex Serial MP3 player – YX5300 Chippel

Ennek a modulnak a 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 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 a 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 a 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 a különböző parancsokat tartalmazza.

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.

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.

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.

(Statisztika: 45 megtekintés)

Vélemény, hozzászólás?

Az email címet nem tesszük közzé.