WT5001M02-28P another mp3/wav cheap sound module

Waytronic-Jasmine(Li):
If you store in SD card,the module only can support 16Kbps~320Kbps bit rate and 8KHz~44.1KHz sample rate MP3 and WAV file.

thanks for your informations and welcome to the forum, very nice to have Waytronic support here

so you confirm it can read wav files, this is very good for my project because the Mp3 files have always a very small lag at beginning of each track (it's a well known codec issue) that doesn't fit my project (sound must start when led turning ON, without lag)

today i received the module
while plays mp3 files without problem and with a very good quality, i can't play wav files
tested 8bit 80kbps 22khz without success :frowning:

something odd: if you want to keep the files order, firse must create the mp3 playlist on hard disk (0001.mp3, 0002.mp3, ecc) and when ready copy to the micro-SD card. If you rename on microsd card it will messy the order.

I used 2 watt stereo speakers @ 8ohm: if used in mono no problem, when stereo you can hear clipping. With a mini amplifier no problem at all also in stereo mode.

const int buttonPinFire = 7;   // FIRE 

// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status

void setup() {
  
    // initialize the button pin as a input:
pinMode(buttonPinFire, INPUT);

 // initialize serial communication:
    Serial.begin(9600);
    

    
    Serial.write(0x7E); 
    Serial.write(0x03); 
    Serial.write(0xA7);
    Serial.write(0x1F); //  volume max
    Serial.write(0x7E);
    
    // start sound
    Serial.write(0x7E); 
    Serial.write(0x04); 
    Serial.write(0xA0); // A0 for SD card
    Serial.write((byte)0x00);
    Serial.write(0x02); // track number
    Serial.write(0x7E);
    delay(3000);
     
    }
    
    void loop() 
{
                       
    
  buttonState = digitalRead(buttonPinFire);
 if (buttonState == HIGH) { 
 
    Serial.write(0x7E); 
    Serial.write(0x04); 
    Serial.write(0xA0); // A0 for SD card
    Serial.write((byte)0x00);
    Serial.write(0x01); // track number
    Serial.write(0x7E);
delay(300);
}
   
          }

Great! I read the manual and was not that clear how to connect it or program it. Do you have a new manual or just were lucky connecting it?

onesky:
something odd: if you want to keep the files order, firse must create the mp3 playlist on hard disk (0001.mp3, 0002.mp3, ecc) and when ready copy to the micro-SD card. If you rename on microsd card it will messy the order.

With all of these modules, the name doesn't matter. It is the actual order that they are found in the directory entry table. So, if you were to name your files 001.mp3, 004.mp3... and then copy 004.mp3 first, then 001.mp3, it would make 004.mp3 track number one and 001.mp3 track number 2.

So you can name the files however you want. But you must be careful what order they are in the directory entry.

To make things easy, just copy all your files over and use this program:

to sort where the files are put in the directory entry. Pretty much all of these modules have this same issue because they use a very simple FAT access routine.

the-rebel-agent:
Great! I read the manual and was not that clear how to connect it or program it. Do you have a new manual or just were lucky connecting it?

i just followed the data sheet

there is the WT5001M02-28P pin assignment scheme (page n. 10). On the board the first pin on the left is labeled "1" as you can see on the magnified picture.
The 5v input is the vdd50 pin 22.
From pag. 14 you can find the serial commands to use with arduino.

Retroplayer:
With all of these modules, the name doesn't matter. It is the actual order that they are found in the directory entry table. So, if you were to name your files 001.mp3, 004.mp3... and then copy 004.mp3 first, then 001.mp3, it would make 004.mp3 track number one and 001.mp3 track number 2.

So you can name the files however you want. But you must be careful what order they are in the directory entry.

To make things easy, just copy all your files over and use this program:

Anerty's Lair - DriveSort

to sort where the files are put in the directory entry. Pretty much all of these modules have this same issue because they use a very simple FAT access routine.

you are right. If i am going to make any change of the file order i will first copy the root of the microsd to the hard disk, and when finished i will copy again from the hard disk to the micrsod.

That tool I linked to makes it very simple. If you read the description, it was designed specifically for this purpose.

i have to make a correction of my testing review

wav files are supported (44.100hz/16bit/stereo) but with issues: files start to play only after 1 or 2 seconds of blank sound with a fading-in effect. tried to lower the sampling rate without any change.

This module looks like a fun one to write a library for. It seems to support a lot of neat features that are confusing in the datasheet. I still need to pick one up, but all sources I have found are in China which for some reason right now is taking over a month to arrive here in the U.S.

I suspect that fading-in is probably some feature that is set somehow and not well documented. Otherwise, it wouldn't make a lot of sense to do it as it would actually take more effort to fade in than to just play.

Retroplayer:
This module looks like a fun one to write a library for. It seems to support a lot of neat features that are confusing in the datasheet. I still need to pick one up, but all sources I have found are in China which for some reason right now is taking over a month to arrive here in the U.S.

I suspect that fading-in is probably some feature that is set somehow and not well documented. Otherwise, it wouldn't make a lot of sense to do it as it would actually take more effort to fade in than to just play.

i don't know but with mp3 files everything is fine (no fade-in effect)

Hello,
Is there a library for this module and a schematic to connect this to the Uno?
thanks.

elac:
a schematic to connect this to the Uno?
thanks.

follow the data sheet

there is the WT5001M02-28P pin assignment scheme (page n. 10). On the board the first pin on the left is labeled "1" as you can see on the magnified picture.
The 5v input is the vdd50 pin 22.
From pag. 14 you can find the serial commands to use with arduino.

Thanks alot for answering.
I just downloaded the datasheet, will give it a thorough read through.

elac:
Thanks alot for answering.
I just downloaded the datasheet, will give it a thorough read through.

also u can have an idea of the connections in the video posted before

Hi.

It is possible to connect the files to buttons?
For example if i press button 1 it's gonna play the file 1, press 2 play file 2 and so on??
My second question is that i want to loop the sound files so when i press the button it is starting the file, and the playing is countinous ( repeat the same file endlessly) until i press another button.

If it is possible can you give me a hand how to do it?

Thanks in advance.

What is the lowest voltage this module works at? I ordered one two weeks ago, probably need to wait another two weeks for it to get here. Would just like to do my planning. I will have one/two/four LifePo4 batteries that deliver +3.3V each. I would prefer to stay at 3.3V rather than going to 6.6V and have a regulator waste alot of my voltage

On pages one and two of the datasheet it has this for voltage: 5.0V - 3.3V; 3.3V - 1.8V
On page three it says -0.3V - 5.2V
On page four it says 3.3V minimum to 5.2V maximum

task:
What is the lowest voltage this module works at? I ordered one two weeks ago, probably need to wait another two weeks for it to get here. Would just like to do my planning. I will have one/two/four LifePo4 batteries that deliver +3.3V each. I would prefer to stay at 3.3V rather than going to 6.6V and have a regulator waste alot of my voltage

On pages one and two of the datasheet it has this for voltage: 5.0V - 3.3V; 3.3V - 1.8V
On page three it says -0.3V - 5.2V
On page four it says 3.3V minimum to 5.2V maximum

well then you should test the 3.3v and please report here if it works
remember the wav files seems not (well) supported, so i would start with mp3 files testing

I'm probably very spoiled, but I don't find that module very cheap.

I can buy a car mp3 player/transmitter with USB connector, SD card reader, remote control and decent sound quality for maybe $4.00. But just an mp3 player without FM transmitter, without remote, without USB but with Arduino compatible input pins instead of buttons is $19.99. Why? I guess part of the explanation is the fact that they don't make this in the same quantities. But yet, $20?

I have a problem with the WT5001M02-28P
I'm a firefighter in the Netherlands and I have made with the arduino a system that when we get a call the go on and a sound is playing. Every thing work only problem when we get a call first the sound is on low volume and go higher and and it will repeat in the middle of the call sound. is there somebody who can help me.

//Pager Circuit
const int ledOn = 13;                                          //Green led for visible on
const int timeRelay = 12;                                     //Timerelay for switching the light on and after delay off
const int led_tR = 11;                                        //See of the TimeRelais signal goes off
const int remoteControl  = 10;                                //To send a signal to a Remote Control.
const int led_rC = 9;                                         // See of the remote control is Off
const int optocoup_pager = 6;                                 //Pager with optocoupler
//const int buttinState = 0;                                  // variable for reading pushbutton status


void setup() {               
  pinMode(ledOn, OUTPUT);
  pinMode(timeRelay, OUTPUT);
  pinMode(led_tR, OUTPUT);
  pinMode(remoteControl, OUTPUT);
  pinMode(led_rC, OUTPUT);
  pinMode(optocoup_pager, INPUT);

  Serial.begin(9600);                                          
  Serial.write(0x7E); 
  Serial.write(0x03); 
  Serial.write(0xA7);
  Serial.write(0x1F); //  volume max
  Serial.write(0x7E);

  //start sound
  Serial.write(0x7E); 
  Serial.write(0x04); 
  Serial.write(0xA0); // A0 for SD card
  Serial.write((byte)0x00);
  Serial.write(0x02); // track number
  Serial.write(0x7E);
  delay(3000);  
}

void loop() {
  int val = digitalRead(optocoup_pager);
  if (val == HIGH) {            
    digitalWrite(timeRelay, HIGH);
    digitalWrite(remoteControl, HIGH);
    digitalWrite(led_tR, HIGH);
    digitalWrite(led_rC, HIGH);
    digitalWrite(ledOn, HIGH);

    Serial.write(0x7E); 
    Serial.write(0x04); 
    Serial.write(0xA0); // A0 for SD card
    Serial.write((byte)0x00);
    Serial.write(0x01); // track number
    Serial.write(0x7E);
    delay(300);
    digitalWrite(timeRelay, LOW);
    digitalWrite(remoteControl, LOW);
    digitalWrite(led_tR, LOW);
    digitalWrite(led_rC, LOW);
  }
}

thanks in advance

Try this:

//Pager Circuit
const int ledOn = 13;                                          //Green led for visible on
const int timeRelay = 12;                                     //Timerelay for switching the light on and after delay off
const int led_tR = 11;                                        //See of the TimeRelais signal goes off
const int remoteControl  = 10;                                //To send a signal to a Remote Control.
const int led_rC = 9;                                         // See of the remote control is Off
const int optocoup_pager = 6;                                 //Pager with optocoupler
//const int buttinState = 0;                                  // variable for reading pushbutton status


void setup() {               
  pinMode(ledOn, OUTPUT);
  pinMode(timeRelay, OUTPUT);
  pinMode(led_tR, OUTPUT);
  pinMode(remoteControl, OUTPUT);
  pinMode(led_rC, OUTPUT);
  pinMode(optocoup_pager, INPUT);
 
  Serial.begin(9600);                                          
  Serial.write(0x7E); 
  Serial.write(0x03); 
  Serial.write(0xA7);
  Serial.write(0x1F); //  volume max
  Serial.write(0x7E);

  //start sound
  Serial.write(0x7E); 
  Serial.write(0x04); 
  Serial.write(0xA0); // A0 for SD card
  Serial.write((byte)0x00);
  Serial.write(0x02); // track number
  Serial.write(0x7E);
  delay(3000);  
  WaitForCall();
}

void loop() {
//Nothing needed here
}

void WaitForCall()
{
while (true){
 int val = digitalRead(optocoup_pager);
  if (val == HIGH) {            
    digitalWrite(timeRelay, HIGH);
    digitalWrite(remoteControl, HIGH);
    digitalWrite(led_tR, HIGH);
    digitalWrite(led_rC, HIGH);
    digitalWrite(ledOn, HIGH);

    Serial.write(0x7E); 
    Serial.write(0x03); 
    Serial.write(0xA7);
    Serial.write(0x1F); //  volume max
    Serial.write(0x7E);
    delay(10);
    Serial.write(0x7E); 
    Serial.write(0x04); 
    Serial.write(0xA0); // A0 for SD card
    Serial.write((byte)0x00);
    Serial.write(0x01); // track number
    Serial.write(0x7E);
    delay(300);
    CallDone();
 }
}
}

void CallDone()
{
    digitalWrite(timeRelay, LOW);
    digitalWrite(remoteControl, LOW);
    digitalWrite(led_tR, LOW);
    digitalWrite(led_rC, LOW);

while(true)
{
 int val = digitalRead(optocoup_pager);
  if (val == LOW) {   
    WaitForCall();
}
}
}

Thanks.
I'm really al lake, you don't use the Void loop() is it now possible to implement a Hygrostate and thermostate to read the wheater.
when I place that in the in to the loop? whitout disturbing the pager signal