Notes on KOOBOOK KB629 MP3 Player DY-SV5W also DEVMO & Diann

I purchased the KOOBOOK Sound Player from Amazon and it took a while to figure it all out. I found the instructions rather cryptic and I suspect they were translated from Mandarin to English literally with no understanding of the technology. This board is also known as the DV-SVxx. My board as this picture show is a 5V board. Some others are 3.3Vdc. Double check before you wire up. For reference I’m using a straight forward Nano other boards may have other issues.

I purchased it for the UART control to play tracks on demand by name. My intent is to use it to generate special effects for an arcade game I’m building. This board for the price, 2@$12 certainly beats my first MP3 board which was $130 and had only 4 triggers and playbacks. In it’s defense that was 15 years ago and it does have some neat features such as adjustable fade times, background sound and trigger outputs.

Given the time it took to figure this bard out I thought I’d share some hints and tips that might save others from the drudgery. There is little info on the single wire input, so I avoided it and just used regular UART.

  1. Asian languages many times are read right to left. The DIP switches are label left to right. BEWARE the configuration charts are all RIGHT to LEFT. So UART is enabled with (L-R) OFF-OFF-ON, not the other way. (The documents are label correctly but silly me overlooked them.)

  2. There are references to a Library function called DFPlayer. I couldn’t find it in my library and decided that driving the UART on my own would be simpler than using a plug-in.

  3. The initial setup is straight forward: Use whatever pins you want. RX is required, though I’m not using it. Suggest, but I haven’t tested it, of avoiding pins 0 and 1.

#include "SoftwareSerial.h"
#define ARDUINO_RX 7
#define ARDUINO_TX 6 //connected to RX of the module pin 4 IO1
SoftwareSerial MP3(ARDUINO_RX, ARDUINO_TX);

  1. What’s not clear is you must also declare these pins with the pinMode command. And then of course a “begin” command in the Setup section. I find it sometimes helpful to give these “begin” commands a moment before proceeding.

pinMode(ARDUINO_RX,INPUT);
pinMode(ARDUINO_TX,OUTPUT);
MP3.begin(9600);
delay(500);

  1. The overarching paradigm of this device is to play songs from a playlist. Each list being in a separate folder. The songs are in order by the file directory. Not alphabetically. If you use the PLAY, NEXT, SELECT commands that’s what’s you’ll get. There is no correspondence between SELECT track 1 and a file 00001.MP3, unless it happens to be the first file in the directory on the SD card.

  2. To play a specific file by name you use the “Select Device and Path” command. It is should be more aptly named the “PLAY SPECFIC FILE” command. It is command 0x08.

  3. File names on the SD card can be upper or lower case, BUT in the program they must ALL BE UPPER CASE. Keep your File and Folder names in upper case to avoid confusion.

  4. Don’t ask why but the “*” (0x2A) is used as a delimiter instead of period IN THE PROGRAM. So the file on disk, PLAY1.MP3, is denoted in the program as PLAY1*MP3

  5. You can have folders, though I don’t know the stacking depth. I’d keep their names short and cryptic. In the program you use the / to denote the root directory. To access a file in a folder, say folder “P”, then you use “/P*/ followed by the file name.

  6. There are several ways to do this, but for testing and learning here is a simple data array that plays the file PLAY1.MP3 in folder P.

byte PLAY_FILE[] = 0xAA,0x08,0x0D,0x01,'/','P','*','/','P','L','A','Y','1','*','M','P','3',0xFA};

First byte signals a command string and the 2nd the command number. The third says how many bytes between it and the check digit. The next is the Drive designator where 1 = the SD card. Then the path and file followed by the check digit. NOTE: you can mix Hex with Alphanumeric but they must be enclosed with an apostrophe not a quote. If the file was not in the folder then remove the /P* characters and adjust the data length from 0x0D to 0x0A (14 to 10).

  1. Don’t let the Check Digit scare you. Simply add all the bytes, except of course the CD itself together (in hex) and use the lower order byte. Here’s a quick routine that’ll do it for you. I put this in my Setup section so I can make changes and just have the program plug in the CD:

int sz =sizeof(PLAY_FILE); // saves typing to call the sizeof function only once
PLAY_FILE[sz-1] = 0x00; // Set the CD to zero to start
for (int iq=0; iq < sz-1; iq++) {
PLAY_FILE[sz-1] += PLAY_FILE[iq]; // ADD all the digits into last byte
}
PLAY_FILE[2] = sz-4; // plugs in the data length in byte 3 as well

  1. Playing is a simple write command.

MP3.write(PLAY_FILE,sizeof(PLAY_FILE));

  1. Links are always changing, so search for “DY-SV5W Playback MP3 Module”. Beware there appear to be numerous similar boards and some of the information varies or contradicts.

Thanks for sharing,

Sounds like the device could use its own library to handle the low level behavior.
(not an offer, just an observation)

Do you have a link to the datasheet?

Curious to know if you considered the inexpensive and popular DFR MP3 Mini player?

Here’s one data sheet. There are numerous. DY-SV5W Voice Playback MP3 Music Player Amplifier Module User Manual - Envistia Mall Support

I looked at the DFR MP3, but the DY looked way easier physically install and just as cheap. I like the audio jack and the 5W speaker output on the bench is useful as well.

Thanks!
Thanks for sharing a great bit of knowledge, I know many will really appreciate the data and incite.