Hardware components | ||||||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
Software apps and online services | ||||||
![]() |
|
Thanks to the original author プロフィール for his contribution to this article.
Wio terminal MP3 is a carry-on and light device, you can download any music you want to the SD card, then connect to the headphone cable or loudspeaker cable with a JACK port. The Wio terminal MP3 connects with 650mAH Wio terminal battery chassis to expand the battery life.
Feature- The Wio terminal MP3 player is easy to carry and its simplicity of operator
- it can depend on the SD card size to download lots of audio
Hardware required
Software required
Wio terminal library
Before you upload the code, you need to download the library to support the code. please check here.
- Install the KT403A_Player.h library
- Install the TFT_eSPI.h library
- Install the Seeed_FS.h library
- Install the RawImage.h library
If you do not know how to install the library please check here.
InstructionThis instruction is to guide you on how to connect the cable and download the music on the Wio terminal MP3.
Connection
This is Wio terminal and Grove - MP3 v2.0 connection.
Music download
Open the SD card drive, create the file name "01".
Open the file put your music on it, the MP3 file you have to name the first file as 001***.mp3, the second file name 002***.MP3, etc.
After you download all the music, plug in the SD card in the Grove - MP3 v2.0.
Wio terminal MP3 player
C/C++#include "KT403A_Player.h"
#include"TFT_eSPI.h"
#include "Seeed_FS.h" //Including SD card library
#include"RawImage.h" //Including image processing library
TFT_eSPI tft;
#ifdef ARDUINO_SAMD_VARIANT_COMPLIANCE
#define COMSerial Serial1
#define ShowSerial SerialUSB
KT403A<Uart> Mp3Player;
#endif
int menu = 0, p_menu = 4;
int plmode = 0, p_plmode = 5;
int p_status = 0;
int idx_folder = 1, idx_file = 1;
String mode_S[] = {"Loop_All", "Loop_Folder", "Play_Root" , "Play MP3", "Play_File"};
int Eq = 0;
String Eq_S[] = {"NORMAL", "POP", "ROCK" , "JAZZ", "CLASSIC", "BASS"};
EQUALIZER Eq_e[] = {NORMAL, POP, ROCK , JAZZ, CLASSIC, BASS};
void disp_title() {
tft.fillScreen(TFT_BLACK);
if (menu == 0) {
drawImage<uint8_t>("wio-chan8.bmp", 21, 32);
tft.setTextColor(TFT_YELLOW);
tft.drawString("MP3 Player",105, 5);
tft.drawString("Play : ",5, 35);
tft.drawString(mode_S[plmode], 89, 35);
tft.drawString("Equalizer : ",5, 65);
tft.drawString(Eq_S[Eq], 145, 65);
//tft.fillTriangle(140,100,180,120,140,140,TFT_YELLOW);
}
if (menu == 1) {
tft.drawString("Setting", 117, 5);
tft.drawString("Play : ", 5, 37);
tft.drawString(mode_S[plmode], 89, 37);
tft.drawString("Equalizer : ", 5, 120);
tft.drawString(Eq_S[Eq], 149, 120);
if( (plmode == 1) or (plmode == 4) ) {
tft.drawString("Folder# : ", 29, 60);
tft.drawString(String(idx_folder), 150, 60);
}
if( (plmode == 2) or (plmode == 3) or (plmode == 4) ) {
tft.drawString("File# : ", 52, 85);
tft.drawString(String(idx_file), 150, 85);
}
} // end of menu 1
} // endo of disp_title()
void set_play() {
int set_item = 0;
int dummy = 0;
while(menu == 1) {
if (menu != p_menu) disp_title();
p_menu = menu;
//play mode
if(set_item == 0) { // Play mode setting
dummy = 1;
tft.drawFastHLine(89,55,180,TFT_WHITE);
while (dummy){
if (digitalRead(WIO_5S_RIGHT) == LOW) {
plmode++;
if(plmode > 4) plmode = 0;
disp_title();
tft.drawFastHLine(89,55,180,TFT_WHITE);
while(digitalRead(WIO_5S_RIGHT) == LOW){}
}
if (digitalRead(WIO_5S_LEFT) == LOW) {
plmode--;
if(plmode < 0) plmode = 4;
disp_title();
tft.drawFastHLine(89,55,180,TFT_WHITE);
while(digitalRead(WIO_5S_LEFT) == LOW){}
}
if (digitalRead(WIO_5S_DOWN) == LOW) {
tft.drawFastHLine(89,55,180,TFT_BLACK);
if( (plmode == 1) or (plmode == 4) ) {
set_item = 1;
dummy = 0;
}
else if( (plmode == 2) or (plmode == 3) ) {
set_item = 2;
dummy = 0;
}
else {
set_item = 3;
dummy = 0;
}
while(digitalRead(WIO_5S_DOWN) == LOW){}
}
if (digitalRead(WIO_5S_UP) == LOW) {
tft.drawFastHLine(89,55,180,TFT_BLACK);
set_item = 3;
dummy = 0;
while(digitalRead(WIO_5S_UP) == LOW){}
}
if (digitalRead(WIO_KEY_C) == LOW) {
menu = 0;
dummy = 0;
while(digitalRead(WIO_5S_UP) == LOW){}
}
} //end of while dummy
} //end of set item 0
if(set_item == 1) { // Folder setting
dummy = 1;
tft.drawFastHLine(150,76,36,TFT_WHITE);
while (dummy){
if (digitalRead(WIO_5S_RIGHT) == LOW) {
idx_folder++;
if(idx_folder > 99) idx_folder = 99;
disp_title();
tft.drawFastHLine(150,76,36,TFT_WHITE);
while(digitalRead(WIO_5S_RIGHT) == LOW){}
}
if (digitalRead(WIO_5S_LEFT) == LOW) {
idx_folder--;
if(idx_folder < 1) idx_folder = 1;
disp_title();
tft.drawFastHLine(150,76,36,TFT_WHITE);
while(digitalRead(WIO_5S_LEFT) == LOW){}
}
if (digitalRead(WIO_5S_DOWN) == LOW) {
tft.drawFastHLine(150,76,36,TFT_BLACK);
if (plmode == 1) {
set_item = 3;
dummy = 0;
}
else {
set_item = 2;
dummy = 0;
}
while(digitalRead(WIO_5S_DOWN) == LOW){}
}
if (digitalRead(WIO_5S_UP) == LOW) {
tft.drawFastHLine(150,76,36,TFT_BLACK);
set_item = 0;
dummy = 0;
while(digitalRead(WIO_5S_UP) == LOW){}
}
if (digitalRead(WIO_KEY_C) == LOW) {
menu = 0;
dummy = 0;
while(digitalRead(WIO_5S_UP) == LOW){}
}
} //end of while dummy
} //end of set item 1
if(set_item == 2) { // File setting
dummy = 1;
tft.drawFastHLine(150,101,36,TFT_WHITE);
while (dummy){
if (digitalRead(WIO_5S_RIGHT) == LOW) {
idx_file++;
if(idx_folder > 255) idx_folder = 255;
disp_title();
tft.drawFastHLine(150,101,36,TFT_WHITE);
while(digitalRead(WIO_5S_RIGHT) == LOW){}
}
if (digitalRead(WIO_5S_LEFT) == LOW) {
idx_file--;
if(idx_folder < 1) idx_folder = 1;
disp_title();
tft.drawFastHLine(150,101,36,TFT_WHITE);
while(digitalRead(WIO_5S_LEFT) == LOW){}
}
if (digitalRead(WIO_5S_DOWN) == LOW) {
tft.drawFastHLine(150,101,36,TFT_BLACK);
set_item = 3;
dummy = 0;
while(digitalRead(WIO_5S_DOWN) == LOW){}
}
if (digitalRead(WIO_5S_UP) == LOW) {
tft.drawFastHLine(150,101,36,TFT_BLACK);
if( (plmode == 2) or (plmode == 3) ) {
set_item = 0;
dummy = 0;
}
else {
set_item = 1;
dummy = 0;
}
while(digitalRead(WIO_5S_UP) == LOW){}
}
if (digitalRead(WIO_KEY_C) == LOW) {
menu = 0;
dummy = 0;
while(digitalRead(WIO_5S_UP) == LOW){}
}
} //end of while dummy
} //end of set item 2
if(set_item == 3) { // Equalizer setting
dummy = 1;
tft.drawFastHLine(149,136,84,TFT_WHITE);
while (dummy){
if (digitalRead(WIO_5S_RIGHT) == LOW) {
Eq++;
if(Eq > 5) Eq = 5;
disp_title();
tft.drawFastHLine(149,136,84,TFT_WHITE);
while(digitalRead(WIO_5S_RIGHT) == LOW){}
}
if (digitalRead(WIO_5S_LEFT) == LOW) {
Eq--;
if(Eq < 0) Eq = 0;
disp_title();
tft.drawFastHLine(149,136,84,TFT_WHITE);
while(digitalRead(WIO_5S_LEFT) == LOW){}
}
if (digitalRead(WIO_5S_DOWN) == LOW) {
tft.drawFastHLine(149,136,84,TFT_BLACK);
set_item = 0;
dummy = 0;
while(digitalRead(WIO_5S_DOWN) == LOW){}
}
if (digitalRead(WIO_5S_UP) == LOW) {
tft.drawFastHLine(149,136,84,TFT_BLACK);
if( (plmode == 2) or (plmode == 3) or (plmode == 4) ) {
set_item = 2;
dummy = 0;
}
else if (plmode == 1){
set_item = 1;
dummy = 0;
}
else {
set_item = 0;
dummy = 0;
}
while(digitalRead(WIO_5S_UP) == LOW){}
}
if (digitalRead(WIO_KEY_C) == LOW) {
menu = 0;
dummy = 0;
while(digitalRead(WIO_5S_UP) == LOW){}
}
} //end of while dummy
} //end of set item 3
} //end of menu1
disp_title();
} //end of set_play
void setup() {
/*
//Initialise SD card
if (!SD.begin(SDCARD_SS_PIN, SDCARD_SPI)) {
while (1);
}
*/
tft.begin();
tft.setRotation(3);
tft.fillScreen(TFT_BLACK);
tft.setTextSize(2);
//ShowSerial.begin(9600);
COMSerial.begin(9600);
while (!COMSerial);
Mp3Player.init(COMSerial);
pinMode(WIO_KEY_A, INPUT_PULLUP);
pinMode(WIO_KEY_B, INPUT_PULLUP);
pinMode(WIO_KEY_C, INPUT_PULLUP);
pinMode(WIO_5S_UP, INPUT_PULLUP);
pinMode(WIO_5S_DOWN, INPUT_PULLUP);
pinMode(WIO_5S_LEFT, INPUT_PULLUP);
pinMode(WIO_5S_RIGHT, INPUT_PULLUP);
pinMode(WIO_5S_PRESS, INPUT_PULLUP);
}
void loop() {
if (menu != p_menu) {
disp_title();
}
if (menu == 0) {
if (digitalRead(WIO_5S_PRESS) == LOW) {
ShowSerial.println("Press 5s PRESS");
Mp3Player.pause_or_play();
while(digitalRead(WIO_5S_PRESS) == LOW){}
}
if (digitalRead(WIO_KEY_A) == LOW) {
plmode = 0;
disp_title();
Mp3Player.setEqualizer(Eq_e[Eq]);
Mp3Player.loop(1);
while(digitalRead(WIO_KEY_A) == LOW){}
}
if (digitalRead(WIO_KEY_C) == LOW) {
menu = 1;
while(digitalRead(WIO_KEY_C) == LOW){}
}
if (digitalRead(WIO_KEY_B) == LOW) {
Mp3Player.play();
while(digitalRead(WIO_KEY_B) == LOW){}
}
if (digitalRead(WIO_5S_RIGHT) == LOW) {
Mp3Player.next();
while(digitalRead(WIO_5S_RIGHT) == LOW){}
}
if (digitalRead(WIO_5S_LEFT) == LOW) {
Mp3Player.previous();
while(digitalRead(WIO_5S_LEFT) == LOW){}
}
if (digitalRead(WIO_5S_UP) == LOW) {
Mp3Player.volumeUp();
while(digitalRead(WIO_5S_UP) == LOW){}
}
if (digitalRead(WIO_5S_DOWN) == LOW) {
Mp3Player.volumeDown();
while(digitalRead(WIO_5S_DOWN) == LOW){}
}
}
else if (menu == 1) {
p_menu = 0;
set_play();
switch (plmode) {
case 0: // Loop All
Mp3Player.setEqualizer(Eq_e[Eq]);
Mp3Player.loop(1);
break;
case 1: // Loop Folder
Mp3Player.setEqualizer(Eq_e[Eq]);
Mp3Player.loopFolder(idx_folder);
break;
case 2: // Play index folder (Root)
Mp3Player.setEqualizer(Eq_e[Eq]);
Mp3Player.playSongIndex(idx_file);
break;
case 3: // Play index folder (Root)
Mp3Player.setEqualizer(Eq_e[Eq]);
Mp3Player.playSongMP3(idx_file);
break;
case 4: // Play index folder (Root)
Mp3Player.setEqualizer(Eq_e[Eq]);
Mp3Player.playSongSpecify(idx_folder,idx_file);
break;
} // end of switch
} //end of menu 1
p_menu = menu;
delay(200);
}//end of loop
Comments
Please log in or sign up to comment.