SantyagoSantyago
Avatar

Witaj!
Blog archiwalny. Już niebawem nowy serwis!

YouTube RSS Facebook GitHub

Arduino poradnik

Wstęp

Teoria

Biblioteki

Komponenty

Czujniki i sensory

Rozwiązania i algorytmy

Narzędzia

Mikrokontrolery i Arduino IDE

Arduino i klony

Poradniki wideo

Reklama na Blogu

Najnowsze poradniki

Ostatnie komentarze

Ostatnie fotografie

polskie-gorypolskie-gorypolskie-gorypolskie-gorypolskie-gorypolskie-gorypolskie-gorypolskie-gorypolskie-gorywieliczka-szyb-danilowicza

UART MP3 Player z układem YX5300

Jeśli już szukałeś w miarę taniego modułu potrafiącego odtwarzać pliki dźwiękowe MP3 lub WAV, to zapewne  musiałeś się trochę zawieść. Owszem, są dostępne dość drogie shieldy do Arduino lub o wiele tańsze moduły, które niestety nie oferują zbyt wiele w zamian. Mnie osobiście brakowało czegoś pośredniego - nie drogiego, ale również nie okrojonego do granic możliwości.

Przeglądając ebay, natrafiłem na bardzo ciekawy moduł MP3 bazujący na układzie YX5300 z komunikacją UART w cenie zaledwie 6$ z darmową wysyłką.

Cechy YX5300

Pewnie zadajesz sobie pytanie, co może potrafić moduł za 6 dolców? Wbrew pozorom - całkiem sporo. Układ YX5300, który został zastosowany w tym module wyróżnia się następującymi cechami:

  • Obsługa częstotliwości próbkowania 8kHz - 48kHz
  • Odtwarzanie plików MP3 / WAV
  • Obsługa kart Micro SD i MIcro SDHC
  • 30 poziomów głośności
  • Sterowanie UART TTL / 9600bps
  • Napięcie zasilania 3.2V - 5.2V
  • Poziomy logiczne 3.3V i 5V
  • Obsługa folderów
  • Odtwarzanie pojedyncze lub w pętli (pliku lub folderu)
  • Tryb uśpienia 10mA
  • Sporo komend sterujących

Wysyłanie polecenia UART

Pewnie zadajesz sobie pytanie, co może potrafić moduł za 6 dolców? Wbrew pozorom - całkiem sporo. Układ YX5300, który został zastosowany w tym module wyróżnia się następującymi cechami:

0 1 2 3 4 5 6 7 8 9
0x7E 0xFF 0x06 CMD FBACK DAT1 DAT2 SUM1 SUM2 0xEF
  • 0x7E - bajt początkowy
  • 0xFF - wersja
  • 0x06 - długość polecenia, nie licząc bajtu początkowego i końcowego
  • CMD - polecenie
  • FBACK - czy chcemy odpowiedź 0x00 (nie) lub 0x01 (tak)
  • DAT1, DAT2 - parametry
  • SUM1, SUM2 - suma kontrolna
  • 0xEF - bajt kończący

Najbardziej kłopotliwe okazuje się wyliczenie sumy kontrolnej SUM1 i SUM2, jednak jest możliwe pominięcie tego mechanizmu, pomijając je po prostu przy wysyłaniu (nie zmieniając wartości określającej długość polecenia)

Zatem możemy wysłać tylko 8 bajtów :

0 1 2 3 4 5 6 7
0x7E 0xFF 0x06 CMD FBACK DAT1 DAT2 0xEF

Komendy UART

Moduł oferuje sporo ciekawych komend, za pomocą których będziemy mogli sterować układem. Dostępne są wszystkie podstawowe akcje jak pauza, play, stop, ustawienie głośności. Dodatkowo jednak dostajemy sporo innych ciekawych poleceń, które bez wątpienia przydadzą się w naszych projektach - tryb uśpienia, tasowanie listy odtwarzania, zapętlanie utworu lub katalogu, czy sterowanie DAC. Nie wiem jak Wam, ale mnie ta "sześcio dolarowa" lista bardzo odpowiada:

CMD DAT1 DAT2 Opis
0x0C 0x00 0x00 Reset układu. Wymagana przerwa 500ms
0x09 0x00 0x02 Wybierz nośnik odtwarzania TFWymagana przerwa 200ms
0x03 0x00 0x03 Odtwarzaj 3 plik
0x08 0x00 0x03 Odtwarzaj w pętli 3 plik
0x0F 0x02 0x01 Odtwarzaj 1 plik w 2 folderze
0x22 0x1E 0x04 Odtwarzaj 4 plik z głośnością 30 = 1E
0x17 0x02 0x00 Odtwarzaj pętle dla utworów w 2 folderze
0x18 0x00 0x00 Przetasowanie utworów
0x19 0x00 0x00 Włącz pętle dla obecnie odtwarzanego utworu
0x19 0x00 0x01 Wyłącz pętle dla obecnie odtwarzanego utworu
0x01 0x00 0x00 Następny utwór
0x02 0x00 0x00 Poprzedni utwór
0x0E 0x00 0x00 Pauza
0x0D 0x00 0x00 Wznów odtwarzanie
0x16 0x00 0x00 Zatrzymaj odtwarzanie
0x04 0x00 0x00 Vol+
0x05 0x00 0x00 Vol-
0x06 0x00 0x1E Ustaw poziom głośności na 30 = 1E
0x0A 0x00 0x00 Uśpienie układu (Sleep mode)
0x0B 0x00 0x00 Budzenie układu (Wake up)
0x1A 0x00 0x00 Włącz DAC
0x1A 0x00 0x01 Wyłącz DAC

Oprócz standardowych poleceń układ zwraca również odpowiedzi na specjalne zapytania lub informuje nas o specyficznych zdarzeniach, jak włożenie karty pamięci, zakończeniu odtwarzania utworu i jego numerze itp:

CMD Odpowiedź Opis
-- 0x7E 0xFF 0x06 0x41 0x00 0x00 0x00 0xFE 0xBA 0xEF Dane odebrane prawidłowo
-- 0x7E 0xFF 0x06 0x3A 0x00 0x00 0x02 0xFE 0xBF 0xEF Włożono kartę pamięci TF
-- 0x7E 0xFF 0x06 0x3B 0x00 0x00 0x02 0xFE 0xBE 0xEF Wyjęto nośnik pamięci TF
-- 0x7E 0xFF 0x06 0x40 0x00 0x00 0x06 0xFE 0xB5 0xEF Błąd - nie odnaleziono pliku
-- 0x7E 0xFF 0x06 0x3D 0x00 0x00 0x04 0xFE 0xBA 0xEF Zakończono odtwarzać plik 4
0x42 0x7E 0xFF 0x06 0x42 0x00 0x02 0x00 0xFE 0xB6 0xE Stan odtwarzacza - zatrzymany (stop)
0x42 0x7E 0xFF 0x06 0x42 0x00 0x02 0x01 0xFE 0xB6 0xE Stan odtwarzacza - odtwarza (play)
0x42 0x7E 0xFF 0x06 0x42 0x00 0x02 0x02 0xFE 0xB6 0xE Stan odtwarzacza - wstrzymany (pauza)
0x48 0x7E 0xFF 0x06 0x48 0x00 0x00 0x07 0xFE 0xAC 0xEF Znaleziono 7 plików
0x4C 0x7E 0xFF 0x06 0x4C 0x00 0x00 0x04 0xFE 0xAB 0xEF Aktualnie odtwarzany 4 plik
0x4F 0x7E 0xFF 0x06 0x4F 0x00 0x00 0x02 0xFE 0xAA 0xEF Znaleziono 2 foldery
0x43 0x7E 0xFF 0x06 0x43 0x00 0x00 0x1E 0xFE 0x99 0xEF Aktualny poziom głośności 30 = 1F

Struktura plików na karcie pamięci

Aby sprawnie odtwarzać pliki dźwiękowe z karty SD, zalecana jest struktura katalogów w formacie dwucyfrowym. Nawet jeśli planujemy tylko jedną playlistę, warto trzymać ją w folderze "01". Nazwy plików powinny mieć format jak poniżej, czyli kolejny numer trzycyfrowy i opcjonalna nazwa pliku. Przestrzegając tych zasad, w prosty sposób odtworzymy sprecyzowany przez nas plik MP3:

  1. bash-4.2$ tree
  2. .
  3. ├── 01
  4. │   ├── 001-blue-piano.mp3
  5. │   └── 002-gettin-ready.mp3
  6. ├── 02
  7. │   ├── 001-ukulele-in-my-heart.mp3
  8. │   ├── 002-inspiring-innovation.mp3
  9. │   └── 003-thanks-for-the-memories.mp3
  10. └── 03
  11.     ├── 001-a-hero-is-born.mp3
  12.     └── 002-lullaby.mp3

Wysłanie poniższej komendy, spowoduje odtworzenie pliku  001-ukulele-in-my-heart.mp3 z folderu 02.

 0 1 2 3  4  5 6 7
0x7E 0xFF 0x06 0x0F 0x00 0x02 0x01 0xEF

Możliwe jest również wskazanie absolutnego numeru pliku do odtworzenia, niezależnie od folderu w którym się znajduje. Należy jednak pamiętać, że moduł nie sortuje zawartości katalogów, więc jego struktura z punktu układu wygląda tak:

  1. bash-4.2$ tree -U
  2. .
  3. ├── 01
  4. │   ├── 001-blue-piano.mp3
  5. │   └── 002-gettin-ready.mp3
  6. ├── 02
  7. │   ├── 003-thanks-for-the-memories.mp3
  8. │   ├── 002-inspiring-innovation.mp3
  9. │   └── 001-ukulele-in-my-heart.mp3
  10. └── 03
  11.     ├── 002-lullaby.mp3
  12.     └── 001-a-hero-is-born.mp3

Jak widzimy, trzecim utworem absolutnym jest 003-thanks-for-the-memories.mp3 zamiast spodziewanego 001-ukulele-in-my-heart.mp3. Aby odtworzyć plik o absolutnym numerze od początku listy, należy wysłać polecenie:

0 1 2 3 4 5 6 7
0x7E 0xFF 0x06 0x03 0x00 0x00 0x03 0xEF

Przykładowy program

  1. #include <SoftwareSerial.h>
  2.  
  3. SoftwareSerial mp3(5, 6);
  4.  
  5. static uint8_t cmdbuf[8] = {0};
  6.  
  7. void command(int8_t cmd, int16_t dat)
  8. {
  9.   delay(20);
  10.  
  11.   cmdbuf[0] = 0x7e; // bajt startu
  12.   cmdbuf[1] = 0xFF; // wersja
  13.   cmdbuf[2] = 0x06; // liczba bajtow polecenia
  14.   cmdbuf[3] = cmd;  // polecenie
  15.   cmdbuf[4] = 0x00; // 0x00 = no feedback, 0x01 = feedback
  16.   cmdbuf[5] = (int8_t)(dat >> 8); // parametr DAT1
  17.   cmdbuf[6] = (int8_t)(dat); //  parametr DAT2
  18.   cmdbuf[7] = 0xef; // bajt konczacy
  19.  
  20.   for (uint8_t i = 0; i < 8; i++)
  21.   {
  22.     mp3.write(cmdbuf[i]);
  23.   }
  24. }
  25.  
  26. void setup()
  27. {
  28.   Serial.begin(9600);
  29.   mp3.begin(9600);
  30.  
  31.   delay(500); // Czekamy 500ms na inicjalizacje  
  32.  
  33.   command(0x09, 0x0002); // Wybieramy karte SD jako zrodlo
  34.   delay(200); // Czekamu 200ms na inicjalizacje
  35.  
  36.   command(0x06, 0x001E); // Ustaw glosnosc na 30
  37.   command(0x03, 0x0001); // Otwarzamy pierwszy utwor (kolejnosc nieposortowana)
  38. }
  39.  
  40. void loop() { }

Odtworzenie pliku o absolutnym numerze wcale nie gwarantuje, że będzie odtworzony ten, który oczekujemy na podstawie posortowanej listy. Dlatego najlepiej skorzystać z polecenia, podając nazwę folderu i nazwę pliku w postaci początkowego numeru:

  1. void setup()
  2. {
  3.   Serial.begin(9600);
  4.   mp3.begin(9600);
  5.  
  6.   delay(500); // Czekamy 500ms na inicjalizacje  
  7.  
  8.   command(0x09, 0x0002); // Wybieramy karte SD jako zrodlo
  9.   delay(200); // Czekamu 200ms na inicjalizacje
  10.  
  11.   command(0x06, 0x001E); // Ustaw glosnosc na 30
  12.   command(0x0F, 0x0201); // Jesli chcemy miec pewnosc ze bedzie to 02/001?????.mp3
  13. }

Powyższy fragment programu spowoduje, że zostanie odtworzony plik 001-ukulele-in-my-heart.mp3 w folderze 02/. Jednak będzie to odtworzenie tylko tego utworu. Aby zapętlić odtwarzanie całego folderu 02/ wystaczy wydać inne polecenie:

  1. void setup()
  2. {
  3.   Serial.begin(9600);
  4.   mp3.begin(9600);
  5.  
  6.   delay(500); // Czekamy 500ms na inicjalizacje  
  7.  
  8.   command(0x09, 0x0002); // Wybieramy karte SD jako zrodlo
  9.   delay(200); // Czekamu 200ms na inicjalizacje
  10.  
  11.   command(0x06, 0x001E); // Ustaw glosnosc na 30
  12.   command(0x17, 0x0200); // Odtwarzaj w petli folder 02/
  13. }

Obsługa odpowiedzi układu

Moduł wysyła również komunikaty i odpowiedzi na poszczególne polecenia i zdarzenia. Poniższy program wykrywa włożenie i wyciągnięcie karty pamięci. Dodatkowo zostanie odtworzony w pętli folder 02/ gdy karta zostanie włożona.

  1. #include <SoftwareSerial.h>
  2.  
  3. SoftwareSerial mp3(5, 6);
  4.  
  5. static uint8_t cmdbuf[8] = {0};
  6. static uint8_t ansbuf[10] = {0};
  7.  
  8. void command(int8_t cmd, int16_t dat)
  9. {
  10.   delay(20);
  11.  
  12.   cmdbuf[0] = 0x7e; // bajt startu
  13.   cmdbuf[1] = 0xFF; // wersja
  14.   cmdbuf[2] = 0x06; // liczba bajtow polecenia
  15.   cmdbuf[3] = cmd;  // polecenie
  16.   cmdbuf[4] = 0x00; // 0x00 = no feedback, 0x01 = feedback
  17.   cmdbuf[5] = (int8_t)(dat >> 8); // parametr DAT1
  18.   cmdbuf[6] = (int8_t)(dat); //  parametr DAT2
  19.   cmdbuf[7] = 0xef; // bajt konczacy
  20.  
  21.   for (uint8_t i = 0; i < 8; i++)
  22.   {
  23.     mp3.write(cmdbuf[i]);
  24.   }
  25. }
  26.  
  27. // Funkcja upiekszajaca hex
  28. void byte2hex(uint8_t b)
  29. {
  30.   Serial.print("0x");
  31.   if (b < 16) Serial.print("0");
  32.   Serial.print(b, HEX);
  33.   Serial.print(" ");
  34. }
  35.  
  36. // Funkcja pobierania odpowiedzi
  37. boolean answer(void)
  38. {
  39.   uint8_t i = 0;
  40.  
  41.   // Pobieramy tylko 10 bajtow
  42.   while(mp3.available() && (i < 10))
  43.   {
  44.     uint8_t b = mp3.read();
  45.     ansbuf[i] = b;
  46.     i++;
  47.     byte2hex(b);
  48.   }
  49.  
  50.   Serial.println();
  51.  
  52.   // Jesli poprawny format odpowiedzi
  53.   if ((ansbuf[0] == 0x7E) && (ansbuf[9] == 0xEF))
  54.   {
  55.     return true;
  56.   }
  57.  
  58.   return false;
  59. }
  60.  
  61. void setup()
  62. {
  63.   Serial.begin(9600);
  64.   mp3.begin(9600);
  65.  
  66.   delay(500); // Czekamy 500ms na inicjalizacje  
  67.   command(0x09, 0x0002); // Wybieramy karte SD jako zrodlo
  68.   delay(200); // Czekamu 200ms na inicjalizacje
  69. }
  70.  
  71. void loop()
  72. {
  73.   if (mp3.available())
  74.   {
  75.     if (answer()) // Jesli jest poporawna odpowiedz
  76.     {
  77.       if (ansbuf[3] == 0x3A) // Jesli wlozono kart
  78.       {
  79.         Serial.println("Wlozono karte");
  80.         command(0x17, 0x0100); // Odtwarzaj w petli folder 01/
  81.       }
  82.       if (ansbuf[3] == 0x3B) // Jesli wyciagnieto kart
  83.       {
  84.         Serial.println("Wyciagnieto karte");
  85.       }      
  86.     }
  87.   }
  88. }

Oczywiście to tylko przykład, bowiem możemy jeszcze odpytać moduł o ilość plików i folderów na karcie pamięci lub sprawdzać, czy moduł aktualnie odtwarza utwór oraz pobrać jego absolutny numer.

  1. #include <SoftwareSerial.h>
  2.  
  3. SoftwareSerial mp3(5, 6);
  4.  
  5. static uint8_t cmdbuf[8] = {0};
  6. static uint8_t ansbuf[10] = {0};
  7.  
  8. unsigned long int last = 0;
  9.  
  10. void command(int8_t cmd, int16_t dat)
  11. {
  12.   delay(20);
  13.  
  14.   cmdbuf[0] = 0x7e; // bajt startu
  15.   cmdbuf[1] = 0xFF; // wersja
  16.   cmdbuf[2] = 0x06; // liczba bajtow polecenia
  17.   cmdbuf[3] = cmd;  // polecenie
  18.   cmdbuf[4] = 0x00; // 0x00 = no feedback, 0x01 = feedback
  19.   cmdbuf[5] = (int8_t)(dat >> 8); // parametr DAT1
  20.   cmdbuf[6] = (int8_t)(dat); //  parametr DAT2
  21.   cmdbuf[7] = 0xef; // bajt konczacy
  22.  
  23.   for (uint8_t i = 0; i < 8; i++)
  24.   {
  25.     mp3.write(cmdbuf[i]);
  26.   }
  27. }
  28.  
  29. // Funkcja upiekszajaca hex
  30. void byte2hex(uint8_t b)
  31. {
  32.   Serial.print("0x");
  33.   if (b < 16) Serial.print("0");
  34.   Serial.print(b, HEX);
  35.   Serial.print(" ");
  36. }
  37.  
  38. // Funkcja pobierania odpowiedzi
  39. boolean answer(void)
  40. {
  41.   uint8_t i = 0;
  42.  
  43.   // Pobieramy tylko 10 bajtow
  44.   while(mp3.available() && (i < 10))
  45.   {
  46.     uint8_t b = mp3.read();
  47.     ansbuf[i] = b;
  48.     i++;
  49.     byte2hex(b);
  50.   }
  51.  
  52.   Serial.println();
  53.  
  54.   // Jesli poprawny format odpowiedzi
  55.   if ((ansbuf[0] == 0x7E) && (ansbuf[9] == 0xEF))
  56.   {
  57.     return true;
  58.   }
  59.  
  60.   return false;
  61. }
  62.  
  63. void setup()
  64. {
  65.   Serial.begin(9600);
  66.   mp3.begin(9600);
  67.  
  68.   delay(500); // Czekamy 500ms na inicjalizacje  
  69.   command(0x09, 0x0002); // Wybieramy karte SD jako zrodlo
  70.   delay(200); // Czekamu 200ms na inicjalizacje
  71.  
  72.   command(0x17, 0x0100); // Odtwarzaj w petli folder 01/
  73.  
  74.   last = millis();
  75. }
  76.  
  77. void loop()
  78. {
  79.   if (mp3.available())
  80.   {
  81.     if (answer()) // Jesli jest poporawna odpowiedz
  82.     {
  83.       if (ansbuf[3] == 0x4C) // Aktualnie odtwarzany
  84.       {
  85.         Serial.print("Aktualnie odtwarzam plik: ");
  86.         Serial.println(ansbuf[6]);
  87.       }
  88.     }
  89.   }
  90.  
  91.   if ((millis() - last) > 5000) // Pytamy co 5 seknud
  92.   {
  93.     last = millis();
  94.     command(0x4C, 0x0000); // Zapytaj o numer odtwarzanego pliku
  95.   }
  96. }

Materiał filmowy

Reklama

Komentarze Komentarze
Avatar 1
Aleksander Kawęczyński Windows 7 / Mozilla Firefox 27.0
03 February 2015 - 13:33 Warszawa

Dziękuję bardzo za artykuł. Pod jego wpływem zamówiłem sobie taką samą płytkę. Dzisiaj do mnie doszła i właśnie sprawdzam jej działanie - na razie pod PC za pomocą przejściówki UART - USB. Planuję napisać programik w C# na komputer, który ułatwi testy tego modułu.
Czy mógłbyś napisać coś więcej o tych sumach kontrolnych w transmisji? Jak je wyliczać? Niestety nie udało mi się znaleźć w internecie informacji na ten temat.

Avatar 2
Korneliusz Linux Ubuntu / Mozilla Firefox 30.0
03 February 2015 - 13:57 Katowice

Ok - uzupełnię wpis do końca tygodnia :) Pozdrawiam

Avatar 1
Marek Z. Windows / Mozilla Firefox 38.0
19 June 2015 - 16:48 Warszawa

Świetny artykuł. Dziękuję :) Trochę szkoda, że układ nie ma alternatywnego interfejsu np. I2C lub SPI.
Czy jest Pan pewien Panie Korneliuszu, że: "Tryb uśpienia 10mA". Troszkę dużo. Spodziewałbym się raczej 10uA (10nA to zapewne strefa marzeń sennych ;) ).
Pozdrawiam

Avatar 2
Korneliusz Linux x86_64 / Mozilla Firefox 34.0
20 June 2015 - 01:12 Bytom

Dokumentacja mówiła o 10mA, więc tak założyłem :) Ale faktycznie dużo

Avatar 1
wilkxt Linux Ubuntu / Mozilla Firefox 39.0
29 November 2015 - 10:15 Brak informacji

W chińsim datasheet wyczytałem, że uklad pobiera 10mA (nie uwzgledniam pradu pobieranego przez karte microSD) w czsie pracy, a w uspieniu poniżej 200uA

Avatar 1
ttt Windows 7 / Mozilla Firefox 40.0
25 September 2015 - 15:02 Warszawa

Super artykuł. Człowiek nawet nie wie, jakie fajne moduliki można kupić. Zamówiłem, przyszedł. Wymyśliłem sobie zrobienie mówiącego termometru z pomiarem ciśnienia - dla osoby niewidomej. Moduł mówiący z mp3 już oprogramowałem w Bascomie, czekam na przetwornik ciśnienia i temperatury.
Pozdrawiam i życzę powodzenia.

Avatar 2
Korneliusz Linux Ubuntu / Mozilla Firefox 41.0
19 October 2015 - 22:38 Bytom

Dzięki

Avatar 1
xpeu89 Windows 7 / Mozilla Firefox 41.0
12 October 2015 - 16:26 Brak informacji

Witam,
Co to znaczy, że moduł nie sortuje zawartości?
Za każdym razem utwory są w innej kolejności czy może odczytuje je wg. kolejności wystąpienia w pamięci?

Avatar 2
Korneliusz Linux Ubuntu / Mozilla Firefox 41.0
19 October 2015 - 22:40 Bytom

Znaczy to tyle, że jeśli chcemy odtworzyć utwór wg. kolejności o podanym numerze, to jest to kolejność wgrania do modułu. Na szczęście można podać konkretny numer po prefiksie nazwy pliku

Avatar 1
Feru Windows / Mozilla Firefox 42.0
26 November 2015 - 19:00 Sosnowiec

Witam
potrzebowałbym zbudować taki projekt, odtwarzanie dźwięku pliku po wybraniu odpowiedniego przycisku np. z klawiatury lub switcha. Czyli mam arduino + moduł mp3 kartSD + klawiaturę + głośnik. I teraz naciskam klawisz 1 odtwarza mi plik nr1, klawisz 2 odtwarza plik nr.2. W przypadku np. klawiatury membranowej klawisz A to STOP, B -Pauza. Czy to jest do wykonania ? Połączenia pewnie wykonam gorzej z programowaniem :)

Avatar 1
soohy Windows 7 / Safari 537.36
01 December 2015 - 13:25 Brak informacji

No ale to musiałbyś ponumerować pliki na karcie tak samo jak przyciski, dodatkowo umieszczając na karcie pamięci zdjęcie z opisem. Z klawiaturą membranową to ja po prostu ja nie wiem jak to zrobić. Nie wiem, nie pomogę. No chyba że mogłoby być A to PAUZA, B -Stop. Ale to też nie wiem.

Avatar 2
ttt Windows 7 / Mozilla Firefox 42.0
05 December 2015 - 00:10 Jaworzno

Oczywiście że to jest możliwe. Ja np. odczytuję temperaturę z przetwornika, przetwarzam znak na numer pliku i numer katalogu z którego mam przeczytać znak, przetwarzam dziesiątki stopni na numer pliku i numer katalogu z którego mam przeczytać dziesiątki, jeżeli temperatura kończy się na "naście" to też przetwarzam, pojedyncze stopnie (jeśli nie "naście") też przetwarzam - a na końcu w zależności od wartości temperatury dodaję słowo "stopień" lub "stopni" lub "stopnie". To samo robię z odczytem wilgotności i ciśnienia atmosferycznego. Raptem kilkadzisiąt komunikatów mp3.
W Twoim przypadku jest dużo prościej. Zakładasz 10 katalogów o numeracji od 00 do 09 (tego 00 nie jestem pewny czy zadziała bo ja mam od 01 do 09 - ale powinno). W każdym katalogu umieszczasz 100 plików mp3 o nazwach od 000_nazwadowolna.mp3 do 099_nazwadowolna.mp3.
Masz klawiaturę membranową hexa - 16 klawiszy od 0 do F. Naciskasz np 254 i klawisz F (przyjmijmy że to Enter). W programie przetwarzasz tę sekwencję klawiszy na odtwarzanie pliku 054_ nazwadowolna.mp3 z katalogu 02. Wysyłasz odpowiedni rozkaz do modułu mp3. I to wszystko.
Jeśli Ci się to uda, to później możesz rozbudować sterowanie odtwarzaniem plików mp3.

Avatar 2
ttt Windows 7 / Mozilla Firefox 42.0
05 December 2015 - 00:18 Jaworzno

PS. Jeśli to ma być kilka plików do odtworzenia - każdy przypisany do jakiegoś klwisza to w ogóle już proste. Uwierz w siebie :)

Avatar 1
Feru Windows / Mozilla Firefox 42.0
10 December 2015 - 09:43 Warszawa

To ma być prostota dokładnie do odtworzenia 4 pojedyncze pliki informacyjne. Juz nawet nie musi być sterowania wystarczy 1 leci plik01 a jakby była komenda stop pod A lub pod tym samym 1. OK to zamawiam ten moduł. Moze ktoś podać namiar na siebie jakbym miał problem w programowaniu :) f-e-r-u@o2.pl

Avatar 2
ttt Windows 7 / Mozilla Firefox 42.0
15 December 2015 - 22:07 Brak informacji

Przy takich prostych wymaganiach to chyba możesz rozwiązać problem wyłącznie sprzętowo, bez zewnętrznego sterowania poprzez RS232. Poczytaj ten wątek - http://www.hauntforum.com/showthread.php?t=41468 Kiedyś były tam też fotki pokazujące jak gość podpiął się do nóżek układu scalonego - ale zniknęły.

Avatar 1
Skvelé ale mám otázku Windows / Safari 537.36
17 February 2016 - 17:08 Brak informacji

Chcel by som sa spýtať, dá sa z tohoto modulu čítať aj názov súboru ? Chcel by som zobraziť na displeji aktuálnu pieseň ktorá sa prehráva(názov piesne). Je to možné?

Avatar 2
Korneliusz Linux Ubuntu / Mozilla Firefox 43.0
21 February 2016 - 23:27 Bytom

Bohužiaľ to nie je možné,

Avatar 2
xpeu89 Windows 7 / Mozilla Firefox 44.0
07 March 2016 - 19:48 Brak informacji

Dotarłem do dokumentacji układu po chińsku i jest tam informacja, że układ potrafi odtwarzać pliki z UDISK, czyli najzwyklejszy pendrive. Wystarczy do odpowiednich nóżek podłączyć pendrive i np. przy inicjalizacji wybrać UDISK 0x01 zamiast 0x02, a resztę komend można spokojnie przetłumaczyć tłumaczem google.
Link:
http://www.da-share.com/files/datasheets/Catalex_YX5300_Docs.zip

Avatar 1
Grawer Linux / Opera 9.80
08 April 2016 - 10:20 Stargard Szczeciński

Na dzień dzisiejszy ciekawszą propozycją wydaje mi się Dfplayer mini. Oparty o chip yx5200-24SS koszt ok 10zł. Co ciekawe można go sterować samymi przyciskami bez udziału arduino.
Posiada on jedno wyjście na głośnik, mono i wyjście na słuchawki stereo, Brak mu jednak SPI. Sterowanie przez UART wygląda identycznie. Umożliwia odtwarzanie komunikatów w tle, posiada też funkcje equalizera.

Avatar 2
Korneliusz Mac OS X / Safari 537.36
14 October 2016 - 14:32 Brak informacji

dzięki na cynk - sprawdzę kiedyś

Avatar 1
rafal1992 Windows / Safari 537.36
04 October 2016 - 14:27 Warszawa

Pod jakie piny w Arduino mam się podpiąć?

Avatar 2
Korneliusz Mac OS X / Safari 537.36
14 October 2016 - 14:32 Brak informacji

UART

Avatar 1
Milus Windows / Mozilla 11.0
06 September 2018 - 15:30 Brak informacji

Pliki MP3 dzialaja ale nie mogę dac rady z Wav.
Mam trochę inny układ YX6300-24SS ale wszystko jest tak samo.
Walcze z tym tematem kilka dni , ciagle zwraca blad" brak pliku".
Może ktoś wie gdzie jest problem.
Dzieki

Avatar 1
uzi18 Windows 7 / Mozilla Firefox 62.0
07 November 2018 - 21:18 Łódź

hej, mam dziwne objawy - zielona dioda na chwilkę zapala się podczas inicjalizacji/resetu a później już nie zapala się, z datasheet wynika ze powinna się palić co wskazuje gotowość układu, u mnie tak nie jest.
Układ reaguje na komendy jednak nic nie odtwarza. Macie jakieś pomysły?

Avatar 1
aps. Windows XP / Mozilla Firefox 52.0
05 November 2019 - 15:08 Brak informacji

Witam. Proszę pomóżcie uruchomić tą mp3 pod bascomem . PLEASE.

Avatar 1
spairo Windows 7 / Mozilla Firefox 38.0
03 December 2019 - 20:30 Brak informacji

komenda (0x03, 0x0001) odtwarzaj plik w katalogu 01.
po odtworzeniu pliku dioda zielona świeci ciągle, czyli nie odtwarza utworu a program co 5 sekund pisze " aktualnie odtwarzam 01".
zna ktoś antydotum na ten problem ?
moze to, na chwile po skończeniu utworu w pozycji statusu 8 pojawia się kod 0xBD, 2 x a potem ciągle tylko 0xAE.

Avatar 1
spairo Windows 7 / Mozilla Firefox 38.0
04 December 2019 - 15:38 Brak informacji

trzeba czytać ze zrozumieniem dokumentaję, wystarczy odczytać statusy i czekac na status 0x3D czyli komunikat "zakonczono odtwarzanie pliku numer w ansbuf[6]".

Avatar 1
avr_1 Windows / Safari 537.36
26 December 2019 - 11:58 Włocławek

Witam,
w zasadzie fajnie to działa - u mnie na atmega 162.
Problemem jest tylko to co wysyła sam moduł playera. W każdym przypadku jest to sekwencja bez interesujących danych: 0x7e 0xff 0xef, czyli start, wersja, koniec. Posiadam 2 takie moduły i obydwa zachowują się tak samo.
Zdarzenia wyjmowania i wkładania karty wykrywane są prawidłowo, czyli kod obsługi jest prawidłowy.. Niestety zawsze otrzymuję 3 bajtowe zwroty.