Yeah. thats the diag that didn't work as advertised: like this command:
7E 04 41 00 01 EF (Play with index: /01/001xxx.mp3)
Where is the directory specified? How is song 001 specifed with only 01? Or is the 01 the directory and it just defaults to the first song? Lots of vagueness.
The line:
for(int i=0;i<len;i++){ MP3.write(command[i]); Serial.print(command[i], HEX);
prints indecipherable garbage by concatenating all the bytes without leading zeros, The RESET and WAKE commands are not covered (other sources say they're required).
I copied the code into a new stand alone sketch:
// Select storage device to TF card
static int8_t select_SD_card[] = {0x7e, 0x03, 0X35, 0x01, 0xef}; // 7E 03 35 01 EF
// Play with index: /01/001xxx.mp3
static int8_t play_first_song[] = {0x7e, 0x04, 0x41, 0x00, 0x01, 0xef}; // 7E 04 41 00 01 EF
// Play with index: /01/002xxx.mp3
static int8_t play_second_song[] = {0x7e, 0x04, 0x41, 0x00, 0x02, 0xef}; // 7E 04 41 00 02 EF
// Play the song.
static int8_t play[] = {0x7e, 0x02, 0x01, 0xef}; // 7E 02 01 EF
// Pause the song.
static int8_t pause[] = {0x7e, 0x02, 0x02, 0xef}; // 7E 02 02 EF
// Define the Serial MP3 Player Module.
void setup() {
// Initiate the serial monitor.
Serial.begin(115200);
// Initiate the Serial MP3 Player Module.
Serial1.begin(9600);
// Select the SD Card.
send_command_to_MP3_player(select_SD_card, 5);
}
void loop() {
// Play the second song.
send_command_to_MP3_player(play_second_song, 6);
}
void send_command_to_MP3_player(int8_t command[], int len){
Serial.print("\nMP3 Command => ");
for(int i=0;i<len;i++){ Serial1.write(command[i]); Serial.print(command[i], HEX); }
delay(1000);
}
The serial monitor shows:
15:01:33.551 -> MP3 Command => 7E3351FFFFFFEF
15:01:34.530 -> MP3 Command => 7E44102FFFFFFEF
15:01:35.562 -> MP3 Command => 7E44102FFFFFFEF
The card(s) do NOTHING. Not even the LED blinks.
This is why I was asking if anyone had PERSONAL EXPERIENCE to share.
I have hacked this example to the point where the extra FF's are eliminated, but still no joy in Mudville.