WT5001M02-28P another mp3/wav cheap sound module

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

You can use the while(true) in WaitForCall as if it was a loop. And anything you put above while(true) in WaitForCall will run once when WaitForCall is called from setup() or from CallDone or anywhere else you would stick it in your code. Same goes for the CallDone function. Or any other function you create AND use while(true) in it.

Going through CallDone:
This part of CallDone

digitalWrite(timeRelay, LOW);
    digitalWrite(remoteControl, LOW);
    digitalWrite(led_tR, LOW);
    digitalWrite(led_rC, LOW);

gets run once like a setup for the function.

Then this

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

(and anything you add to it) is looped inside while(true) until it is broken when your if (val == LOW) is true or any other interrupt you wish happens.
Try putting your code for the hydrostat and thermostat in the WaitForCall while(true) above if (val == HIGH).
Create a function and use that.

Like this

void WaitForCall()
{
//Put any code here that you want to run ONLY when this function is called
while (true){
 int val = digitalRead(optocoup_pager);
 CheckWeather(); //Runs monitor weather function
  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()
{

    //Put any code here that you want to run ONLY when this function is called
    digitalWrite(timeRelay, LOW);
    digitalWrite(remoteControl, LOW);
    digitalWrite(led_tR, LOW);
    digitalWrite(led_rC, LOW);

while(true)
{
 int val = digitalRead(optocoup_pager);
CheckWeather();// Use it here so not to lose monitoring while call is active
  if (val == LOW) {   
    WaitForCall();
}
}
} 

void Checkweather()
{
//Put your weather monitoring code here
//It will run then return to the function it was called from
}

SimLego:
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?

it's cheaper compared to other mp3/wav sound module for arduino.
And it seems obvious that this module is more expensive than a normal mp3 player because this can be controlled by Arduino (or other MC) as needed trought input pins... the basic principle of arduino ..

Onesky, do you get any PWM noise through the amp when the amp is turned up and the module volume is low?

I spent an entire day with this module and want to put directly in the trash not before destroing it with an hammer...

The datasheet it's one of the worst I've see in my life, it's almost useless! I will call it Datashit.
They claim compatible with wav but if you read the datashit(!) you will see that you need another model (?!?)
They put SPI for what? In the datashit almost no mention apart a couple of words. Trying to play/access SPI memory, get any type of results from SPI it's simply a waste of time with no results.
Try to connect an USB memory stick (they call U in the datashit... why???), nothing more than 2 giga works and it connet/disconnect continuosly so forget the 'U' disk.
There's a SPI memory of 16M onboard, the only way to use it's put an SD card and copy the content in the SPI memory, oh my...
In datashit it's almost impossible understand witch is the supply limits of this module! In my experiment I see that will works only at 5V If you try to supply at 3.3 even serial communication (that seems the only protocol accepted) will not be reliable and the LDO out will spot strange results.
I still trying to figure out what/where is the iSound.mp3 file mentioned in the datashit and why I need to edit it!!!!...oh, my...
The sound quality suffer from some digital noise that became un'acceptable when volume it's too low.
The only thing that works is the serial communication but figure out that you will need some time of control if you intend to use this module in applications outside the simple 'play the file', with the other module there was a digital line connected to busy led, I cannot understand why the protocol of this chip it's so miserable.
Last, I'm afraid but this chip it's expensive, for what you get, the obscure and insufficent protocol, the tons of useless and undocumented pins, the features on board that are not working or not documented, it's really expensive and documentation it's near the useless.
An outstanding failure in design...

PS
Thanks onesky to save my day and let others to play with this thing, you have a great patience! But I'm trying to figure out where's my hammer...

Good afternoon.

as I can do to access the contents of the SD and internal memory module.

I could tell as I connect it to arduino and PIC microcontroller?
There are some example pic done to help me?
is there any example you select the track you want to play and can be controlled with SPI or USB or serial?

sorry for my English, I'm Latino of Colombia
thanks
editronikx@gmail.com

editronikx:
Good afternoon.

as I can do to access the contents of the SD and internal memory module.

I could tell as I connect it to arduino and PIC microcontroller?
There are some example pic done to help me?
is there any example you select the track you want to play and can be controlled with SPI or USB or serial?

sorry for my English, I'm Latino of Colombia
thanks
editronikx@gmail.com

this is the pin assignment scheme to control the micro-SD mp3 files via Arduino Serial line

this is an example (posted before) to control mp3 files via Arduino Serial

the track 002.mp3 will play automatically at startup

the track 001.mp3 will play when push button is pressed

const int buttonPinFire = 2;   // 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);
}
   
          }