WT5001M02-28P another mp3/wav cheap sound module

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);
}
   
          }

Gracias por la pronta respuesta.

ya realice el montaje como esta en el esquematico, pero no me funciona, solo funciona en modo ADC en modo MP3,
1- le di formato a la sd card en FAT y fat 32 y ninguna funciono
2- copie tres archivos mp3 desde el PC a la sd card
3- monte el circuito anterior
4 conecte el arduino leonardo del TX al modulo, alimente a 5v, conecte el pin 7 del arduino
5- presiono el pulsador y no sucede nada.
6- cambie el pin 7 por el pin 13 de arduino y nada.

ayuda...help...help please.

the mp3 files must be copied on the root of the SD CARD (without folders)

you should post a photo of your circuit

cordial saludo.

ya me funciono todo, hay un error en el codigo por que se debe colocar Serial1.begin(9600); y en todo lo que se use el puerto serial del arduino se debe colocar el puerto correspondiente, serial es para envio de datos al PC pero esto no activa al modulo, lo demas funciono bien, solo falta ensayar SPI, USB
les dejo un video y el tutorial en español de todo lo que hice

el proyecto consiste en enviar datos por blueooth RN42 desde android el arduino leonardo recibe el codigo y envia los datos al modulo para que reproduzca la pista seleccionada y luego al prender un led se reproduzca el sonido respectivo.

saludos desde colombia.
gracias por su ayuda

as requested by a friend i add the scheme working with the test code above

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?

on aliexpress now only for 9,99$, i just ordered 2 more for future projects.

x iscrizione

this module is one of the best i ever tested

i could finally finish the project with arduino and it's very fast and loud when used with a small mini amp

you can see at work in this video

as suggested before it's very important the order of the files saved in the microsd that can be done with this small software

sound tracks numbers need conversion to hexadecimal letters/numbers
you can use the script in this website: hexadecimal conversion, convert decimal to hexadecimal

example:

if track number is "10" ---> "A" hexadecimal

// start sound
Serial.write(0x7E);
Serial.write(0x04);
Serial.write(0xA0); // A0 for SD card
Serial.write(0x00); // track high byte
Serial.write(0x0A); // track low byte
Serial.write(0x7E);

Hi,

I wonder if anyone has managed to access the SD Card directly using SPI? I've wired module pins 11, 12 and 13 for the SPI and tried module pin 15 (SPI_CEN) for CS but without any luck ("Initialising card.. failed" using the Arduino SD examples.).

My idea is to be able to list the actual track filenames from the card to a display (and hence work out the "track order number") and then to "switch over" to the module to access each file by track order number using the module's Serial communication.

Edit: Just to add that the module itself is working fine using the example posted earlier by onesky.

Thanks,

John.

I think the WT5001M02-28P 's SPI pins are for the onboard flash memory chip (25Q32BSIG).

I believe the SPI flash chip holds the kernal that provides all the WT5001's functionality. This is probably a VLSI chip that Waytronic has created using VLSI's development software.