Making Music
Table of contents
- Core functions
- Hooking up MP3 Playback: Modify setup
- Hooking up MP3 Playback: Modify loop
- Hooking up MP3 Playback: Remote Activation
- Flash it
The last piece is to hook up the DF Player and have it play sound.
Core functions
To make the DFPlayer work, we need a set of functions:
Copy and paste the following into the bottom of your code file:
void setupDFPlayer(){
// Set up the DF Player
Serial.begin(9600);
Serial1.begin(9600);
delay( 1000 );
execute_CMD(0x3F, 0, 0); // Send request for initialization parameters
delay( 2000 );
// while (Serial1.available()<10){ // Wait until initialization parameters are received (10 bytes)
// delay(30); // Pretty long delays between succesive commands needed (not always the same)
// }
// Initialize sound to very low volume. Adapt according used speaker and wanted volume
//execute_CMD(0x06, 0, 0x30); // Set the volume (0x00~0x30)
execute_CMD(0x06, 0, 0x20); // Set the volume (0x00~0x30)
delay( 2000 );
}
void beginPlayBack( ){
execute_CMD(0x0D,0,2);
delay( 500 );
}
void stopPlayBack( ){
execute_CMD(0x11, 0, 0x00);
delay( 500 );
}
// Contain the values for the DF Player
# define Start_Byte 0x7E
# define Version_Byte 0xFF
# define Command_Length 0x06
# define End_Byte 0xEF
# define Acknowledge 0x00 //Returns info with command 0x41 [0x01: info, 0x00: no info]
// By Ype Brada 2015-04-06
// https://community.particle.io/t/a-great-very-cheap-mp3-sound-module-without-need-for-a-library/20111
void execute_CMD(byte CMD, byte Par1, byte Par2) // Excecute the command and parameters
{
// Calculate the checksum (2 bytes)
int16_t checksum = -(Version_Byte + Command_Length + CMD + Acknowledge + Par1 + Par2);
// Build the command line
byte Command_line[10] = { Start_Byte, Version_Byte, Command_Length, CMD, Acknowledge, Par1, Par2, checksum >> 8, checksum & 0xFF, End_Byte};
//Send the command line to the module
for (byte k=0; k<10; k++)
{
Serial1.write( Command_line[k]);
}
}
This contains four functions
execute_CMD()is a function to communicate and send commands to the MP3 player. It’s essentialsetupDFPlayer()will initialize the playerbeginPlayBack( )will start the playback of the first mp3 on the devicestopPlayBack( )will pause playback
Hooking up MP3 Playback: Modify setup
Once you’ve added these
Modify setup to include the line
setupDFPlayer();
Add this after the Particle.function
Hooking up MP3 Playback: Modify loop
In the loop then we’ll add the controls for Mp3 playback:
- When we change from open to closed we’ll pause playback
- When we change from closed to open we’ll resume playback
Modify the open detection to look like this. Note the addition of the beginPlayBack();
if( isBoxOpen == false ){
isBoxOpen = true;
beginPlayBack();
// next play a song...
Particle.publish( "box-opened" );
}
Modify the closed detection to look like this. Note the addtion of stopPlayBack( );
if( isBoxOpen == true ){
stopPlayBack( );
Particle.publish( "box-closed" );
}
Hooking up MP3 Playback: Remote Activation
Add one last line to the handleActivation to allow someone to remotely trigger your device
Modify the handleActivation method to include beginPlayback
int handleActivation( String command ){
for( int i = 0; i < 3; i++ ){
digitalWrite(ledPin, HIGH);
delay(100);
digitalWrite(ledPin, LOW);
delay(100);
}
beginPlayBack( );
return 1;
}
Flash it
Save and flash your code!
Now try the photo resistor and see if the music plays!
Fingers crossed you’ve got an internet-enabled memory box!