A Speech Controlled Music Player that uses Google Speech API and Dialogflow API to understand natural speech.
Dependencies: 4DGL-uLCD-SE PinDetect SDFileSystem Speaker mbed wave_player
Fork of Project_MP by
main.cpp@3:ecf799cef1db, 2017-12-13 (annotated)
- Committer:
- georgekamar
- Date:
- Wed Dec 13 05:30:52 2017 +0000
- Revision:
- 3:ecf799cef1db
- Parent:
- 2:54dcfef5c648
Speech Controlled Music Player Version 1.0
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sarthakjaiswal | 0:4b3056d3c684 | 1 | #include "mbed.h" |
sarthakjaiswal | 0:4b3056d3c684 | 2 | #include "SDFileSystem.h" |
sarthakjaiswal | 0:4b3056d3c684 | 3 | #include "wave_player.h" |
amaclean6 | 2:54dcfef5c648 | 4 | #include "uLCD_4DGL.h" |
sarthakjaiswal | 0:4b3056d3c684 | 5 | #include "PinDetect.h" |
sarthakjaiswal | 0:4b3056d3c684 | 6 | #include "Speaker.h" |
sarthakjaiswal | 0:4b3056d3c684 | 7 | #include <vector> |
sarthakjaiswal | 0:4b3056d3c684 | 8 | #include <string> |
sarthakjaiswal | 1:45d8f6557ff8 | 9 | |
georgekamar | 3:ecf799cef1db | 10 | Serial pc(USBTX, USBRX); |
georgekamar | 3:ecf799cef1db | 11 | Serial esp(p28, p27); // tx, rx |
georgekamar | 3:ecf799cef1db | 12 | DigitalOut reset(p26); |
georgekamar | 3:ecf799cef1db | 13 | |
sarthakjaiswal | 1:45d8f6557ff8 | 14 | //Set up LEDs |
sarthakjaiswal | 0:4b3056d3c684 | 15 | DigitalOut myled(LED1); |
sarthakjaiswal | 0:4b3056d3c684 | 16 | DigitalOut myled2(LED2); |
sarthakjaiswal | 0:4b3056d3c684 | 17 | DigitalOut myled3(LED3); |
sarthakjaiswal | 0:4b3056d3c684 | 18 | DigitalOut myled4(LED4); |
sarthakjaiswal | 0:4b3056d3c684 | 19 | |
georgekamar | 3:ecf799cef1db | 20 | AnalogIn seed(p16); |
georgekamar | 3:ecf799cef1db | 21 | Timer t; |
georgekamar | 3:ecf799cef1db | 22 | |
georgekamar | 3:ecf799cef1db | 23 | int count,ended,timeout; |
georgekamar | 3:ecf799cef1db | 24 | char buf[2024]; |
georgekamar | 3:ecf799cef1db | 25 | char snd[1024]; |
georgekamar | 3:ecf799cef1db | 26 | |
georgekamar | 3:ecf799cef1db | 27 | char ssid[32] = "Mbednode"; // enter WiFi router ssid inside the quotes |
georgekamar | 3:ecf799cef1db | 28 | char pwd [32] = "Hello"; // enter WiFi router password inside the quotes |
georgekamar | 3:ecf799cef1db | 29 | |
sarthakjaiswal | 0:4b3056d3c684 | 30 | using namespace std; |
sarthakjaiswal | 0:4b3056d3c684 | 31 | |
sarthakjaiswal | 0:4b3056d3c684 | 32 | SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card |
amaclean6 | 2:54dcfef5c648 | 33 | uLCD_4DGL uLCD(p9,p10,p11); |
sarthakjaiswal | 1:45d8f6557ff8 | 34 | DigitalIn sdDetect(p17); // Set up a pin for SD Card Detect |
sarthakjaiswal | 0:4b3056d3c684 | 35 | |
sarthakjaiswal | 1:45d8f6557ff8 | 36 | AnalogOut DACout(p18); //set up speaker |
sarthakjaiswal | 1:45d8f6557ff8 | 37 | wave_player waver(&DACout); //set up wave player library |
sarthakjaiswal | 1:45d8f6557ff8 | 38 | int pos = 0; // index of the song |
georgekamar | 3:ecf799cef1db | 39 | int currentSongIndex = -1; |
amaclean6 | 2:54dcfef5c648 | 40 | int vol = 0; |
amaclean6 | 2:54dcfef5c648 | 41 | |
sarthakjaiswal | 1:45d8f6557ff8 | 42 | |
georgekamar | 3:ecf799cef1db | 43 | bool playing = false; //variable for pause/play |
georgekamar | 3:ecf799cef1db | 44 | vector<string> song_names; //filenames are stored in a vector string |
georgekamar | 3:ecf799cef1db | 45 | vector<string> artist_names; //filenames are stored in a vector string |
georgekamar | 3:ecf799cef1db | 46 | string fname; |
georgekamar | 3:ecf799cef1db | 47 | FILE *wave_file; |
georgekamar | 3:ecf799cef1db | 48 | |
georgekamar | 3:ecf799cef1db | 49 | void SendCMD(),getreply(),ESPconfig(),ESPsetbaudrate(); |
georgekamar | 3:ecf799cef1db | 50 | |
georgekamar | 3:ecf799cef1db | 51 | /* implementation of strcmp that ignores cases */ |
georgekamar | 3:ecf799cef1db | 52 | int strcmpi(char *s1, char *s2) |
georgekamar | 3:ecf799cef1db | 53 | { |
georgekamar | 3:ecf799cef1db | 54 | int i; |
georgekamar | 3:ecf799cef1db | 55 | for (i = 0; s1[i] && s2[i]; ++i) |
georgekamar | 3:ecf799cef1db | 56 | { |
georgekamar | 3:ecf799cef1db | 57 | /* If characters are same or inverting the |
georgekamar | 3:ecf799cef1db | 58 | 6th bit makes them same */ |
georgekamar | 3:ecf799cef1db | 59 | if (s1[i] == s2[i] || (s1[i] ^ 32) == s2[i]) |
georgekamar | 3:ecf799cef1db | 60 | continue; |
georgekamar | 3:ecf799cef1db | 61 | else |
georgekamar | 3:ecf799cef1db | 62 | break; |
georgekamar | 3:ecf799cef1db | 63 | } |
georgekamar | 3:ecf799cef1db | 64 | |
georgekamar | 3:ecf799cef1db | 65 | /* Compare the last (or first mismatching in |
georgekamar | 3:ecf799cef1db | 66 | case of not same) characters */ |
georgekamar | 3:ecf799cef1db | 67 | if (s1[i] == s2[i]) |
georgekamar | 3:ecf799cef1db | 68 | return 0; |
georgekamar | 3:ecf799cef1db | 69 | |
georgekamar | 3:ecf799cef1db | 70 | // Set the 6th bit in both, then compare |
georgekamar | 3:ecf799cef1db | 71 | if ((s1[i] | 32) < (s2[i] | 32)) |
georgekamar | 3:ecf799cef1db | 72 | return -1; |
georgekamar | 3:ecf799cef1db | 73 | return 1; |
georgekamar | 3:ecf799cef1db | 74 | } |
georgekamar | 3:ecf799cef1db | 75 | |
georgekamar | 3:ecf799cef1db | 76 | void read_file_names(char *dir, vector<string> &filenames) // function that reads in file names from sd cards |
sarthakjaiswal | 0:4b3056d3c684 | 77 | { |
sarthakjaiswal | 0:4b3056d3c684 | 78 | DIR *dp; |
sarthakjaiswal | 0:4b3056d3c684 | 79 | struct dirent *dirp; |
sarthakjaiswal | 0:4b3056d3c684 | 80 | dp = opendir(dir); |
sarthakjaiswal | 0:4b3056d3c684 | 81 | //read all directory and file names in current directory into filename vector |
georgekamar | 3:ecf799cef1db | 82 | if(dp == NULL){ |
georgekamar | 3:ecf799cef1db | 83 | return; |
georgekamar | 3:ecf799cef1db | 84 | } |
georgekamar | 3:ecf799cef1db | 85 | if((dirp = readdir(dp)) != NULL) { |
georgekamar | 3:ecf799cef1db | 86 | filenames.clear(); |
georgekamar | 3:ecf799cef1db | 87 | filenames.push_back(string(dirp->d_name)); |
georgekamar | 3:ecf799cef1db | 88 | } |
georgekamar | 3:ecf799cef1db | 89 | |
sarthakjaiswal | 0:4b3056d3c684 | 90 | while((dirp = readdir(dp)) != NULL) { |
sarthakjaiswal | 0:4b3056d3c684 | 91 | filenames.push_back(string(dirp->d_name)); |
sarthakjaiswal | 0:4b3056d3c684 | 92 | } |
sarthakjaiswal | 0:4b3056d3c684 | 93 | } |
georgekamar | 3:ecf799cef1db | 94 | |
georgekamar | 3:ecf799cef1db | 95 | char pcCommand[1024] = ""; |
georgekamar | 3:ecf799cef1db | 96 | char espCommand[1024] = ""; |
georgekamar | 3:ecf799cef1db | 97 | string testIt = ""; |
georgekamar | 3:ecf799cef1db | 98 | bool flag = false; |
georgekamar | 3:ecf799cef1db | 99 | bool espflag = false; |
georgekamar | 3:ecf799cef1db | 100 | |
georgekamar | 3:ecf799cef1db | 101 | int espcnt = -1; |
georgekamar | 3:ecf799cef1db | 102 | |
georgekamar | 3:ecf799cef1db | 103 | void dev_recv() |
sarthakjaiswal | 0:4b3056d3c684 | 104 | { |
georgekamar | 3:ecf799cef1db | 105 | while(esp.readable()) { |
georgekamar | 3:ecf799cef1db | 106 | |
georgekamar | 3:ecf799cef1db | 107 | if(espcnt == -1) { |
georgekamar | 3:ecf799cef1db | 108 | espcnt++; |
georgekamar | 3:ecf799cef1db | 109 | esp.getc(); |
georgekamar | 3:ecf799cef1db | 110 | } else { |
georgekamar | 3:ecf799cef1db | 111 | espCommand[espcnt] = esp.getc(); |
georgekamar | 3:ecf799cef1db | 112 | espcnt++; |
georgekamar | 3:ecf799cef1db | 113 | |
georgekamar | 3:ecf799cef1db | 114 | if(espCommand[espcnt-1] == 34) { |
georgekamar | 3:ecf799cef1db | 115 | playing = 0; |
georgekamar | 3:ecf799cef1db | 116 | espflag = true; |
georgekamar | 3:ecf799cef1db | 117 | } |
georgekamar | 3:ecf799cef1db | 118 | } |
sarthakjaiswal | 0:4b3056d3c684 | 119 | } |
georgekamar | 3:ecf799cef1db | 120 | |
sarthakjaiswal | 0:4b3056d3c684 | 121 | } |
georgekamar | 3:ecf799cef1db | 122 | |
georgekamar | 3:ecf799cef1db | 123 | int cnt = -1; |
georgekamar | 3:ecf799cef1db | 124 | |
georgekamar | 3:ecf799cef1db | 125 | void pc_recv() |
sarthakjaiswal | 0:4b3056d3c684 | 126 | { |
georgekamar | 3:ecf799cef1db | 127 | while(pc.readable()) { |
georgekamar | 3:ecf799cef1db | 128 | |
georgekamar | 3:ecf799cef1db | 129 | if(cnt == -1) { |
georgekamar | 3:ecf799cef1db | 130 | cnt++; |
georgekamar | 3:ecf799cef1db | 131 | pc.getc(); |
georgekamar | 3:ecf799cef1db | 132 | } else { |
georgekamar | 3:ecf799cef1db | 133 | pcCommand[cnt] = pc.getc(); |
georgekamar | 3:ecf799cef1db | 134 | cnt++; |
georgekamar | 3:ecf799cef1db | 135 | |
georgekamar | 3:ecf799cef1db | 136 | if(pcCommand[cnt-1] == 34) { |
georgekamar | 3:ecf799cef1db | 137 | playing = 0; |
georgekamar | 3:ecf799cef1db | 138 | flag = true; |
georgekamar | 3:ecf799cef1db | 139 | } |
georgekamar | 3:ecf799cef1db | 140 | } |
sarthakjaiswal | 0:4b3056d3c684 | 141 | } |
sarthakjaiswal | 0:4b3056d3c684 | 142 | } |
amaclean6 | 2:54dcfef5c648 | 143 | |
georgekamar | 3:ecf799cef1db | 144 | string song = ""; |
georgekamar | 3:ecf799cef1db | 145 | string artist = ""; |
sarthakjaiswal | 0:4b3056d3c684 | 146 | |
georgekamar | 3:ecf799cef1db | 147 | void executeCommand(char command[]) |
sarthakjaiswal | 0:4b3056d3c684 | 148 | { |
georgekamar | 3:ecf799cef1db | 149 | |
georgekamar | 3:ecf799cef1db | 150 | uLCD.printf("Command: %s\n", command); |
georgekamar | 3:ecf799cef1db | 151 | |
georgekamar | 3:ecf799cef1db | 152 | char parsedCommand[20][20]; |
georgekamar | 3:ecf799cef1db | 153 | int finalCommand = 0; |
georgekamar | 3:ecf799cef1db | 154 | song = ""; |
georgekamar | 3:ecf799cef1db | 155 | int i,j,ctr; |
georgekamar | 3:ecf799cef1db | 156 | |
georgekamar | 3:ecf799cef1db | 157 | j=0; ctr=0; |
georgekamar | 3:ecf799cef1db | 158 | for(i=0;i<=(strlen(command));i++) |
georgekamar | 3:ecf799cef1db | 159 | { |
georgekamar | 3:ecf799cef1db | 160 | // if space or NULL found, assign NULL into parsedCommand[ctr] |
georgekamar | 3:ecf799cef1db | 161 | if(command[i]==' '||command[i]=='\0') |
georgekamar | 3:ecf799cef1db | 162 | { |
georgekamar | 3:ecf799cef1db | 163 | parsedCommand[ctr][j]='\0'; |
georgekamar | 3:ecf799cef1db | 164 | ctr++; //for next word |
georgekamar | 3:ecf799cef1db | 165 | j=0; //for next word, init index to 0 |
georgekamar | 3:ecf799cef1db | 166 | } |
georgekamar | 3:ecf799cef1db | 167 | else |
georgekamar | 3:ecf799cef1db | 168 | { |
georgekamar | 3:ecf799cef1db | 169 | parsedCommand[ctr][j]=command[i]; |
georgekamar | 3:ecf799cef1db | 170 | j++; |
georgekamar | 3:ecf799cef1db | 171 | } |
georgekamar | 3:ecf799cef1db | 172 | } |
georgekamar | 3:ecf799cef1db | 173 | |
georgekamar | 3:ecf799cef1db | 174 | if(strcmp (parsedCommand[0],"play") == 0) { |
georgekamar | 3:ecf799cef1db | 175 | finalCommand = 1; |
georgekamar | 3:ecf799cef1db | 176 | }else if(strcmp (parsedCommand[0],"stop") == 0) { |
georgekamar | 3:ecf799cef1db | 177 | finalCommand = 0; |
georgekamar | 3:ecf799cef1db | 178 | }else if(strcmp (parsedCommand[0],"playnext") == 0) { |
georgekamar | 3:ecf799cef1db | 179 | finalCommand = 2; |
georgekamar | 3:ecf799cef1db | 180 | }else if(strcmp (parsedCommand[0],"playback") == 0) { |
georgekamar | 3:ecf799cef1db | 181 | finalCommand = 3; |
georgekamar | 3:ecf799cef1db | 182 | } |
georgekamar | 3:ecf799cef1db | 183 | |
georgekamar | 3:ecf799cef1db | 184 | |
georgekamar | 3:ecf799cef1db | 185 | int ii = 2; |
georgekamar | 3:ecf799cef1db | 186 | int songLength = 0; |
georgekamar | 3:ecf799cef1db | 187 | int artistLength = 0; |
georgekamar | 3:ecf799cef1db | 188 | |
georgekamar | 3:ecf799cef1db | 189 | |
georgekamar | 3:ecf799cef1db | 190 | if(strcmp (parsedCommand[0],"play") == 0) { |
georgekamar | 3:ecf799cef1db | 191 | ctr--; |
georgekamar | 3:ecf799cef1db | 192 | artist = ""; |
georgekamar | 3:ecf799cef1db | 193 | if(strcmp (parsedCommand[1],"song") == 0) { |
georgekamar | 3:ecf799cef1db | 194 | while((ii <= ctr) && (strcmp (parsedCommand[ii],"artist") != 0)){ |
georgekamar | 3:ecf799cef1db | 195 | string songstr(parsedCommand[ii]); |
georgekamar | 3:ecf799cef1db | 196 | songLength++; |
georgekamar | 3:ecf799cef1db | 197 | if(ii == ctr || (strcmp (parsedCommand[ii+1],"artist") == 0)){ |
georgekamar | 3:ecf799cef1db | 198 | song = song + songstr; |
georgekamar | 3:ecf799cef1db | 199 | }else{ |
georgekamar | 3:ecf799cef1db | 200 | song = song + songstr + " "; |
georgekamar | 3:ecf799cef1db | 201 | } |
georgekamar | 3:ecf799cef1db | 202 | ii++; |
georgekamar | 3:ecf799cef1db | 203 | } |
georgekamar | 3:ecf799cef1db | 204 | if(strcmp (parsedCommand[ii],"artist") == 0) { |
georgekamar | 3:ecf799cef1db | 205 | |
georgekamar | 3:ecf799cef1db | 206 | ii++; |
georgekamar | 3:ecf799cef1db | 207 | while(ii <= ctr) { |
georgekamar | 3:ecf799cef1db | 208 | string artiststr(parsedCommand[ii]); |
georgekamar | 3:ecf799cef1db | 209 | artistLength++; |
georgekamar | 3:ecf799cef1db | 210 | if(ii == ctr) { |
georgekamar | 3:ecf799cef1db | 211 | artist = artist + artiststr; |
georgekamar | 3:ecf799cef1db | 212 | } else { |
georgekamar | 3:ecf799cef1db | 213 | artist = artist + artiststr + " "; |
georgekamar | 3:ecf799cef1db | 214 | } |
georgekamar | 3:ecf799cef1db | 215 | ii++; |
georgekamar | 3:ecf799cef1db | 216 | } |
georgekamar | 3:ecf799cef1db | 217 | } |
georgekamar | 3:ecf799cef1db | 218 | }else if(strcmp (parsedCommand[1],"artist") == 0) { |
georgekamar | 3:ecf799cef1db | 219 | |
georgekamar | 3:ecf799cef1db | 220 | while(ii <= ctr){ |
georgekamar | 3:ecf799cef1db | 221 | string artiststr(parsedCommand[ii]); |
georgekamar | 3:ecf799cef1db | 222 | artistLength++; |
georgekamar | 3:ecf799cef1db | 223 | if(ii == ctr) { |
georgekamar | 3:ecf799cef1db | 224 | artist = artist + artiststr; |
georgekamar | 3:ecf799cef1db | 225 | } else { |
georgekamar | 3:ecf799cef1db | 226 | artist = artist + artiststr + " "; |
georgekamar | 3:ecf799cef1db | 227 | } |
georgekamar | 3:ecf799cef1db | 228 | ii++; |
georgekamar | 3:ecf799cef1db | 229 | } |
georgekamar | 3:ecf799cef1db | 230 | } |
georgekamar | 3:ecf799cef1db | 231 | } |
georgekamar | 3:ecf799cef1db | 232 | |
sarthakjaiswal | 0:4b3056d3c684 | 233 | sdDetect.mode(PullUp); |
sarthakjaiswal | 0:4b3056d3c684 | 234 | wait(.1); |
sarthakjaiswal | 0:4b3056d3c684 | 235 | //wait after pulling up the sd card, |
amaclean6 | 2:54dcfef5c648 | 236 | |
amaclean6 | 2:54dcfef5c648 | 237 | uLCD.cls(); |
sarthakjaiswal | 1:45d8f6557ff8 | 238 | //detects whethere there is a SD card or not.. if not then it prints and informs the user |
georgekamar | 3:ecf799cef1db | 239 | while(sdDetect == 0) { |
amaclean6 | 2:54dcfef5c648 | 240 | uLCD.locate(0,0); |
amaclean6 | 2:54dcfef5c648 | 241 | uLCD.printf("Insert SD Card"); |
sarthakjaiswal | 0:4b3056d3c684 | 242 | wait(.5); |
sarthakjaiswal | 1:45d8f6557ff8 | 243 | } |
georgekamar | 3:ecf799cef1db | 244 | uLCD.cls(); |
georgekamar | 3:ecf799cef1db | 245 | |
sarthakjaiswal | 0:4b3056d3c684 | 246 | wait(.5); |
sarthakjaiswal | 0:4b3056d3c684 | 247 | sd.disk_initialize(); |
georgekamar | 3:ecf799cef1db | 248 | |
georgekamar | 3:ecf799cef1db | 249 | |
georgekamar | 3:ecf799cef1db | 250 | switch(finalCommand) { |
georgekamar | 3:ecf799cef1db | 251 | |
georgekamar | 3:ecf799cef1db | 252 | case 0: // stop |
georgekamar | 3:ecf799cef1db | 253 | { |
georgekamar | 3:ecf799cef1db | 254 | fclose(wave_file); |
georgekamar | 3:ecf799cef1db | 255 | uLCD.cls(); |
georgekamar | 3:ecf799cef1db | 256 | playing = false; |
georgekamar | 3:ecf799cef1db | 257 | pc.printf("Case 0: Stop !"); |
georgekamar | 3:ecf799cef1db | 258 | break; |
georgekamar | 3:ecf799cef1db | 259 | } |
georgekamar | 3:ecf799cef1db | 260 | case 1: // play song |
georgekamar | 3:ecf799cef1db | 261 | { |
georgekamar | 3:ecf799cef1db | 262 | read_file_names("/sd/wave", artist_names); |
georgekamar | 3:ecf799cef1db | 263 | |
georgekamar | 3:ecf799cef1db | 264 | if((strcmp (artist.c_str(), "") == 0) && (strcmp (song.c_str(), "") != 0)) { // no artist, but song name |
georgekamar | 3:ecf799cef1db | 265 | |
georgekamar | 3:ecf799cef1db | 266 | int search = 1; |
georgekamar | 3:ecf799cef1db | 267 | int artistCounter = 0; |
georgekamar | 3:ecf799cef1db | 268 | artist = ""; |
georgekamar | 3:ecf799cef1db | 269 | while(search){ |
georgekamar | 3:ecf799cef1db | 270 | fname = "/sd/wave/" + artist_names[artistCounter] + "/" + song + ".wav"; |
georgekamar | 3:ecf799cef1db | 271 | wave_file = fopen(fname.c_str(),"r"); |
georgekamar | 3:ecf799cef1db | 272 | if(wave_file != NULL){ |
georgekamar | 3:ecf799cef1db | 273 | search = 0; |
georgekamar | 3:ecf799cef1db | 274 | fclose(wave_file); |
georgekamar | 3:ecf799cef1db | 275 | string artistDirectory = "/sd/wave/" + artist_names[artistCounter]; |
georgekamar | 3:ecf799cef1db | 276 | char *charArtistDirectory = new char[artistDirectory.length() + 1]; |
georgekamar | 3:ecf799cef1db | 277 | strcpy(charArtistDirectory, artistDirectory.c_str()); |
georgekamar | 3:ecf799cef1db | 278 | read_file_names(charArtistDirectory, song_names); |
georgekamar | 3:ecf799cef1db | 279 | artist = artist_names[artistCounter]; |
georgekamar | 3:ecf799cef1db | 280 | delete [] charArtistDirectory; |
georgekamar | 3:ecf799cef1db | 281 | playing = true; |
georgekamar | 3:ecf799cef1db | 282 | }else{ |
georgekamar | 3:ecf799cef1db | 283 | artistCounter++; |
georgekamar | 3:ecf799cef1db | 284 | } |
georgekamar | 3:ecf799cef1db | 285 | if(artistCounter >= artist_names.size()){ |
georgekamar | 3:ecf799cef1db | 286 | uLCD.printf("Song not found"); |
georgekamar | 3:ecf799cef1db | 287 | break; |
georgekamar | 3:ecf799cef1db | 288 | } |
georgekamar | 3:ecf799cef1db | 289 | } |
georgekamar | 3:ecf799cef1db | 290 | |
georgekamar | 3:ecf799cef1db | 291 | } else if((strcmp (artist.c_str(), "") == 0) && (strcmp (song.c_str(), "") == 0)) { // no artist, no song name. Plays random song |
georgekamar | 3:ecf799cef1db | 292 | |
georgekamar | 3:ecf799cef1db | 293 | artist = ""; |
georgekamar | 3:ecf799cef1db | 294 | int seedVal = seed * 1000; |
georgekamar | 3:ecf799cef1db | 295 | srand(seedVal); |
georgekamar | 3:ecf799cef1db | 296 | int artistIndex = rand() % artist_names.size(); |
georgekamar | 3:ecf799cef1db | 297 | string artistDirectory = "/sd/wave/" + artist_names[artistIndex]; |
georgekamar | 3:ecf799cef1db | 298 | char *charArtistDirectory = new char[artistDirectory.length() + 1]; |
georgekamar | 3:ecf799cef1db | 299 | strcpy(charArtistDirectory, artistDirectory.c_str()); |
georgekamar | 3:ecf799cef1db | 300 | read_file_names(charArtistDirectory, song_names); |
georgekamar | 3:ecf799cef1db | 301 | delete [] charArtistDirectory; |
georgekamar | 3:ecf799cef1db | 302 | int songIndex = rand() % song_names.size(); |
georgekamar | 3:ecf799cef1db | 303 | fname = artistDirectory + "/" + song_names[songIndex]; |
georgekamar | 3:ecf799cef1db | 304 | song = song_names[songIndex].substr(0 ,((song_names[songIndex]).length() - 4)); |
georgekamar | 3:ecf799cef1db | 305 | artist = artist_names[artistIndex]; |
georgekamar | 3:ecf799cef1db | 306 | playing = true; |
georgekamar | 3:ecf799cef1db | 307 | |
georgekamar | 3:ecf799cef1db | 308 | }else if((strcmp (artist.c_str(), "") != 0) && (strcmp (song.c_str(), "") == 0)){ //no song name but artist |
georgekamar | 3:ecf799cef1db | 309 | string artistDirectory = "/sd/wave/" + artist; |
georgekamar | 3:ecf799cef1db | 310 | char *charArtistDirectory = new char[artistDirectory.length() + 1]; |
georgekamar | 3:ecf799cef1db | 311 | strcpy(charArtistDirectory, artistDirectory.c_str()); |
georgekamar | 3:ecf799cef1db | 312 | read_file_names(charArtistDirectory, song_names); |
georgekamar | 3:ecf799cef1db | 313 | delete [] charArtistDirectory; |
georgekamar | 3:ecf799cef1db | 314 | fname = artistDirectory + "/" + song_names[0]; |
georgekamar | 3:ecf799cef1db | 315 | song = song_names[0].substr(0, ((song_names[0]).length() - 4)); |
georgekamar | 3:ecf799cef1db | 316 | wave_file = fopen(fname.c_str(),"r"); |
georgekamar | 3:ecf799cef1db | 317 | playing = true; |
georgekamar | 3:ecf799cef1db | 318 | if(wave_file == NULL){ |
georgekamar | 3:ecf799cef1db | 319 | uLCD.printf("Artist not found"); |
georgekamar | 3:ecf799cef1db | 320 | playing = false; |
georgekamar | 3:ecf799cef1db | 321 | } |
georgekamar | 3:ecf799cef1db | 322 | fclose(wave_file); |
georgekamar | 3:ecf799cef1db | 323 | }else{ // song name and artist |
georgekamar | 3:ecf799cef1db | 324 | fname = "/sd/wave/" + artist + "/" + song + ".wav"; |
georgekamar | 3:ecf799cef1db | 325 | wave_file = fopen(fname.c_str(),"r"); |
georgekamar | 3:ecf799cef1db | 326 | playing = true; |
georgekamar | 3:ecf799cef1db | 327 | if(wave_file == NULL){ |
georgekamar | 3:ecf799cef1db | 328 | uLCD.printf("Song not found"); |
georgekamar | 3:ecf799cef1db | 329 | playing = false; |
georgekamar | 3:ecf799cef1db | 330 | } |
georgekamar | 3:ecf799cef1db | 331 | fclose(wave_file); |
georgekamar | 3:ecf799cef1db | 332 | } |
georgekamar | 3:ecf799cef1db | 333 | |
georgekamar | 3:ecf799cef1db | 334 | int entering = 1; |
georgekamar | 3:ecf799cef1db | 335 | |
georgekamar | 3:ecf799cef1db | 336 | while(playing == true){ |
georgekamar | 3:ecf799cef1db | 337 | uLCD.cls(); |
georgekamar | 3:ecf799cef1db | 338 | uLCD.printf("Now playing "); |
georgekamar | 3:ecf799cef1db | 339 | uLCD.printf("\n%s\n%s\n", song.c_str(), artist.c_str()); |
georgekamar | 3:ecf799cef1db | 340 | |
georgekamar | 3:ecf799cef1db | 341 | if(entering == 1) { |
georgekamar | 3:ecf799cef1db | 342 | entering = 0; |
georgekamar | 3:ecf799cef1db | 343 | string songWav = song + ".wav"; |
georgekamar | 3:ecf799cef1db | 344 | char *songNameChar = new char[songWav.length() + 1]; |
georgekamar | 3:ecf799cef1db | 345 | strcpy(songNameChar, songWav.c_str()); |
georgekamar | 3:ecf799cef1db | 346 | for(int index=0; index<song_names.size(); index++) { |
georgekamar | 3:ecf799cef1db | 347 | char *songNameChar2 = new char[song_names[index].length() + 1]; |
georgekamar | 3:ecf799cef1db | 348 | strcpy(songNameChar2, song_names[index].c_str()); |
georgekamar | 3:ecf799cef1db | 349 | if(strcmpi(songNameChar, songNameChar2) == 0) { |
georgekamar | 3:ecf799cef1db | 350 | currentSongIndex = index; |
georgekamar | 3:ecf799cef1db | 351 | delete [] songNameChar2; |
georgekamar | 3:ecf799cef1db | 352 | break; |
georgekamar | 3:ecf799cef1db | 353 | } |
georgekamar | 3:ecf799cef1db | 354 | delete [] songNameChar2; |
georgekamar | 3:ecf799cef1db | 355 | } |
georgekamar | 3:ecf799cef1db | 356 | delete [] songNameChar; |
georgekamar | 3:ecf799cef1db | 357 | } |
georgekamar | 3:ecf799cef1db | 358 | wave_file = fopen(fname.c_str(),"r"); |
georgekamar | 3:ecf799cef1db | 359 | waver.play(wave_file); |
georgekamar | 3:ecf799cef1db | 360 | fclose(wave_file); |
georgekamar | 3:ecf799cef1db | 361 | if(!flag && !espflag){ |
georgekamar | 3:ecf799cef1db | 362 | if (currentSongIndex < (song_names.size()-1)) { |
georgekamar | 3:ecf799cef1db | 363 | currentSongIndex++; |
georgekamar | 3:ecf799cef1db | 364 | } else if (currentSongIndex == (song_names.size()-1)) { |
georgekamar | 3:ecf799cef1db | 365 | currentSongIndex = 0; |
georgekamar | 3:ecf799cef1db | 366 | } |
georgekamar | 3:ecf799cef1db | 367 | song = song_names[currentSongIndex].substr(0, ((song_names[currentSongIndex]).length() - 4)); |
georgekamar | 3:ecf799cef1db | 368 | fname = "/sd/wave/" + artist + "/" + song + ".wav"; |
georgekamar | 3:ecf799cef1db | 369 | } |
georgekamar | 3:ecf799cef1db | 370 | } |
georgekamar | 3:ecf799cef1db | 371 | |
georgekamar | 3:ecf799cef1db | 372 | // fclose(wave_file); |
georgekamar | 3:ecf799cef1db | 373 | |
georgekamar | 3:ecf799cef1db | 374 | pc.printf("Case 1: Play !"); |
georgekamar | 3:ecf799cef1db | 375 | break; |
georgekamar | 3:ecf799cef1db | 376 | } |
georgekamar | 3:ecf799cef1db | 377 | case 2: // play next |
georgekamar | 3:ecf799cef1db | 378 | { |
georgekamar | 3:ecf799cef1db | 379 | |
georgekamar | 3:ecf799cef1db | 380 | if(currentSongIndex != -1){ |
georgekamar | 3:ecf799cef1db | 381 | currentSongIndex++; |
georgekamar | 3:ecf799cef1db | 382 | playing = true; |
georgekamar | 3:ecf799cef1db | 383 | song = song_names[currentSongIndex].substr(0, ((song_names[currentSongIndex]).length() - 4)); |
georgekamar | 3:ecf799cef1db | 384 | fname = "/sd/wave/" + artist + "/" + song + ".wav"; |
georgekamar | 3:ecf799cef1db | 385 | }else{ |
georgekamar | 3:ecf799cef1db | 386 | uLCD.printf("No song playing"); |
georgekamar | 3:ecf799cef1db | 387 | } |
georgekamar | 3:ecf799cef1db | 388 | |
georgekamar | 3:ecf799cef1db | 389 | while(playing == true){ |
georgekamar | 3:ecf799cef1db | 390 | uLCD.cls(); |
georgekamar | 3:ecf799cef1db | 391 | uLCD.printf("Now playing "); |
georgekamar | 3:ecf799cef1db | 392 | uLCD.printf("\n%s\n%s\n", song.c_str(), artist.c_str()); |
georgekamar | 3:ecf799cef1db | 393 | |
georgekamar | 3:ecf799cef1db | 394 | |
georgekamar | 3:ecf799cef1db | 395 | wave_file = fopen(fname.c_str(),"r"); |
georgekamar | 3:ecf799cef1db | 396 | waver.play(wave_file); |
georgekamar | 3:ecf799cef1db | 397 | fclose(wave_file); |
georgekamar | 3:ecf799cef1db | 398 | if(!flag && !espflag){ |
georgekamar | 3:ecf799cef1db | 399 | if (currentSongIndex < (song_names.size()-1)) { |
georgekamar | 3:ecf799cef1db | 400 | currentSongIndex++; |
georgekamar | 3:ecf799cef1db | 401 | } else if (currentSongIndex == (song_names.size()-1)) { |
georgekamar | 3:ecf799cef1db | 402 | currentSongIndex = 0; |
georgekamar | 3:ecf799cef1db | 403 | } |
georgekamar | 3:ecf799cef1db | 404 | song = song_names[currentSongIndex].substr(0, ((song_names[currentSongIndex]).length() - 4)); |
georgekamar | 3:ecf799cef1db | 405 | fname = "/sd/wave/" + artist + "/" + song + ".wav"; |
georgekamar | 3:ecf799cef1db | 406 | } |
georgekamar | 3:ecf799cef1db | 407 | |
georgekamar | 3:ecf799cef1db | 408 | } |
georgekamar | 3:ecf799cef1db | 409 | |
georgekamar | 3:ecf799cef1db | 410 | pc.printf("Case 2: Play Next!"); |
georgekamar | 3:ecf799cef1db | 411 | break; |
georgekamar | 3:ecf799cef1db | 412 | } |
georgekamar | 3:ecf799cef1db | 413 | case 3: // play back |
georgekamar | 3:ecf799cef1db | 414 | { |
georgekamar | 3:ecf799cef1db | 415 | if(currentSongIndex != -1){ |
georgekamar | 3:ecf799cef1db | 416 | if (currentSongIndex > 0) { |
georgekamar | 3:ecf799cef1db | 417 | currentSongIndex--; |
georgekamar | 3:ecf799cef1db | 418 | } else if (currentSongIndex == 0) { |
georgekamar | 3:ecf799cef1db | 419 | currentSongIndex = (song_names.size()-1); |
georgekamar | 3:ecf799cef1db | 420 | } |
georgekamar | 3:ecf799cef1db | 421 | playing = true; |
georgekamar | 3:ecf799cef1db | 422 | song = song_names[currentSongIndex].substr(0, ((song_names[currentSongIndex]).length() - 4)); |
georgekamar | 3:ecf799cef1db | 423 | fname = "/sd/wave/" + artist + "/" + song + ".wav"; |
georgekamar | 3:ecf799cef1db | 424 | }else{ |
georgekamar | 3:ecf799cef1db | 425 | uLCD.printf("No song playing"); |
georgekamar | 3:ecf799cef1db | 426 | } |
georgekamar | 3:ecf799cef1db | 427 | |
georgekamar | 3:ecf799cef1db | 428 | while(playing == true){ |
georgekamar | 3:ecf799cef1db | 429 | uLCD.cls(); |
georgekamar | 3:ecf799cef1db | 430 | uLCD.printf("Now playing "); |
georgekamar | 3:ecf799cef1db | 431 | uLCD.printf("\n%s\n%s\n", song.c_str(), artist.c_str()); |
georgekamar | 3:ecf799cef1db | 432 | |
georgekamar | 3:ecf799cef1db | 433 | |
georgekamar | 3:ecf799cef1db | 434 | wave_file = fopen(fname.c_str(),"r"); |
georgekamar | 3:ecf799cef1db | 435 | waver.play(wave_file); |
georgekamar | 3:ecf799cef1db | 436 | fclose(wave_file); |
georgekamar | 3:ecf799cef1db | 437 | if(!flag && !espflag){ |
georgekamar | 3:ecf799cef1db | 438 | if (currentSongIndex < (song_names.size()-1)) { |
georgekamar | 3:ecf799cef1db | 439 | currentSongIndex++; |
georgekamar | 3:ecf799cef1db | 440 | } else if (currentSongIndex == (song_names.size()-1)) { |
georgekamar | 3:ecf799cef1db | 441 | currentSongIndex = 0; |
georgekamar | 3:ecf799cef1db | 442 | } |
georgekamar | 3:ecf799cef1db | 443 | song = song_names[currentSongIndex].substr(0, ((song_names[currentSongIndex]).length() - 4)); |
georgekamar | 3:ecf799cef1db | 444 | fname = "/sd/wave/" + artist + "/" + song + ".wav"; |
georgekamar | 3:ecf799cef1db | 445 | } |
georgekamar | 3:ecf799cef1db | 446 | } |
georgekamar | 3:ecf799cef1db | 447 | pc.printf("Case 3: Play Previous!"); |
georgekamar | 3:ecf799cef1db | 448 | break; |
georgekamar | 3:ecf799cef1db | 449 | } |
georgekamar | 3:ecf799cef1db | 450 | default: // stop |
georgekamar | 3:ecf799cef1db | 451 | { |
georgekamar | 3:ecf799cef1db | 452 | pc.printf("DEFAULT"); |
georgekamar | 3:ecf799cef1db | 453 | break; |
georgekamar | 3:ecf799cef1db | 454 | } |
georgekamar | 3:ecf799cef1db | 455 | } |
georgekamar | 3:ecf799cef1db | 456 | |
georgekamar | 3:ecf799cef1db | 457 | } |
georgekamar | 3:ecf799cef1db | 458 | |
georgekamar | 3:ecf799cef1db | 459 | int main(){ |
georgekamar | 3:ecf799cef1db | 460 | |
georgekamar | 3:ecf799cef1db | 461 | reset=0; //hardware reset for 8266 |
georgekamar | 3:ecf799cef1db | 462 | pc.baud(9600); // set what you want here depending on your terminal program speed |
georgekamar | 3:ecf799cef1db | 463 | pc.printf("\f\n\r-------------ESP8266 Hardware Reset-------------\n\r"); |
georgekamar | 3:ecf799cef1db | 464 | wait(0.5); |
georgekamar | 3:ecf799cef1db | 465 | reset=1; |
georgekamar | 3:ecf799cef1db | 466 | timeout=2; |
georgekamar | 3:ecf799cef1db | 467 | getreply(); |
georgekamar | 3:ecf799cef1db | 468 | esp.baud(9600); |
georgekamar | 3:ecf799cef1db | 469 | ESPconfig(); //****************** include Config to set the ESP8266 configuration *********************** |
georgekamar | 3:ecf799cef1db | 470 | |
georgekamar | 3:ecf799cef1db | 471 | pc.baud(9600); |
georgekamar | 3:ecf799cef1db | 472 | char oldCommand[1024]; |
georgekamar | 3:ecf799cef1db | 473 | pc.attach(&pc_recv, Serial::RxIrq); |
georgekamar | 3:ecf799cef1db | 474 | esp.attach(&dev_recv, Serial::RxIrq); |
georgekamar | 3:ecf799cef1db | 475 | |
sarthakjaiswal | 0:4b3056d3c684 | 476 | while(1) { |
georgekamar | 3:ecf799cef1db | 477 | |
georgekamar | 3:ecf799cef1db | 478 | if(flag){ |
georgekamar | 3:ecf799cef1db | 479 | memset(oldCommand, '\0', 1024); |
georgekamar | 3:ecf799cef1db | 480 | pcCommand[cnt-1] = '\0'; |
georgekamar | 3:ecf799cef1db | 481 | pc.printf("pcCommand: %s", pcCommand); |
georgekamar | 3:ecf799cef1db | 482 | strncpy(oldCommand, pcCommand, sizeof(pcCommand)); |
georgekamar | 3:ecf799cef1db | 483 | flag = false; |
georgekamar | 3:ecf799cef1db | 484 | espflag = false; |
georgekamar | 3:ecf799cef1db | 485 | memset(pcCommand, '\0', sizeof(pcCommand)); |
georgekamar | 3:ecf799cef1db | 486 | memset(espCommand, '\0', sizeof(espCommand)); |
georgekamar | 3:ecf799cef1db | 487 | cnt = -1; |
georgekamar | 3:ecf799cef1db | 488 | espcnt = -1; |
georgekamar | 3:ecf799cef1db | 489 | executeCommand(oldCommand); |
georgekamar | 3:ecf799cef1db | 490 | } |
georgekamar | 3:ecf799cef1db | 491 | |
georgekamar | 3:ecf799cef1db | 492 | if(espflag){ |
georgekamar | 3:ecf799cef1db | 493 | memset(oldCommand, '\0', 1024); |
georgekamar | 3:ecf799cef1db | 494 | espCommand[espcnt-1] = '\0'; |
georgekamar | 3:ecf799cef1db | 495 | for(int j = espcnt; j > 0; j--){ |
georgekamar | 3:ecf799cef1db | 496 | if(espCommand[j] == 34){ |
georgekamar | 3:ecf799cef1db | 497 | espCommand[j] = '\0'; |
georgekamar | 3:ecf799cef1db | 498 | break; |
georgekamar | 3:ecf799cef1db | 499 | } |
georgekamar | 3:ecf799cef1db | 500 | } |
georgekamar | 3:ecf799cef1db | 501 | pc.printf("espCommand: %s", espCommand); |
georgekamar | 3:ecf799cef1db | 502 | strncpy(oldCommand, espCommand, sizeof(espCommand)); |
georgekamar | 3:ecf799cef1db | 503 | espflag = false; |
georgekamar | 3:ecf799cef1db | 504 | flag = false; |
georgekamar | 3:ecf799cef1db | 505 | memset(espCommand, '\0', sizeof(espCommand)); |
georgekamar | 3:ecf799cef1db | 506 | memset(pcCommand, '\0', sizeof(pcCommand)); |
georgekamar | 3:ecf799cef1db | 507 | cnt = -1; |
georgekamar | 3:ecf799cef1db | 508 | espcnt = -1; |
georgekamar | 3:ecf799cef1db | 509 | executeCommand(oldCommand); |
georgekamar | 3:ecf799cef1db | 510 | } |
georgekamar | 3:ecf799cef1db | 511 | |
georgekamar | 3:ecf799cef1db | 512 | } |
georgekamar | 3:ecf799cef1db | 513 | |
georgekamar | 3:ecf799cef1db | 514 | } |
georgekamar | 3:ecf799cef1db | 515 | |
georgekamar | 3:ecf799cef1db | 516 | void ESPsetbaudrate() |
georgekamar | 3:ecf799cef1db | 517 | { |
georgekamar | 3:ecf799cef1db | 518 | strcpy(snd, "AT+CIOBAUD=9600\r\n"); // change the numeric value to the required baudrate |
georgekamar | 3:ecf799cef1db | 519 | SendCMD(); |
georgekamar | 3:ecf799cef1db | 520 | } |
georgekamar | 3:ecf799cef1db | 521 | |
georgekamar | 3:ecf799cef1db | 522 | // +++++++++++++++++++++++++++++++++ This is for ESP8266 config only, run this once to set up the ESP8266 +++++++++++++++ |
georgekamar | 3:ecf799cef1db | 523 | void ESPconfig() |
georgekamar | 3:ecf799cef1db | 524 | { |
georgekamar | 3:ecf799cef1db | 525 | |
georgekamar | 3:ecf799cef1db | 526 | wait(5); |
georgekamar | 3:ecf799cef1db | 527 | pc.printf("\f---------- Starting ESP Config ----------\r\n\n"); |
georgekamar | 3:ecf799cef1db | 528 | strcpy(snd,".\r\n.\r\n"); |
georgekamar | 3:ecf799cef1db | 529 | SendCMD(); |
georgekamar | 3:ecf799cef1db | 530 | wait(1); |
georgekamar | 3:ecf799cef1db | 531 | pc.printf("---------- Reset & get Firmware ----------\r\n"); |
georgekamar | 3:ecf799cef1db | 532 | strcpy(snd,"node.restart()\r\n"); |
georgekamar | 3:ecf799cef1db | 533 | SendCMD(); |
georgekamar | 3:ecf799cef1db | 534 | timeout=5; |
georgekamar | 3:ecf799cef1db | 535 | getreply(); |
georgekamar | 3:ecf799cef1db | 536 | pc.printf(buf); |
georgekamar | 3:ecf799cef1db | 537 | |
georgekamar | 3:ecf799cef1db | 538 | wait(2); |
georgekamar | 3:ecf799cef1db | 539 | |
georgekamar | 3:ecf799cef1db | 540 | pc.printf("\n---------- Get Version ----------\r\n"); |
georgekamar | 3:ecf799cef1db | 541 | strcpy(snd,"print(node.info())\r\n"); |
georgekamar | 3:ecf799cef1db | 542 | SendCMD(); |
georgekamar | 3:ecf799cef1db | 543 | timeout=4; |
georgekamar | 3:ecf799cef1db | 544 | getreply(); |
georgekamar | 3:ecf799cef1db | 545 | pc.printf(buf); |
georgekamar | 3:ecf799cef1db | 546 | |
georgekamar | 3:ecf799cef1db | 547 | wait(3); |
georgekamar | 3:ecf799cef1db | 548 | |
georgekamar | 3:ecf799cef1db | 549 | // set CWMODE to 1=Station,2=AP,3=BOTH, default mode 1 (Station) |
georgekamar | 3:ecf799cef1db | 550 | pc.printf("\n---------- Setting Mode ----------\r\n"); |
georgekamar | 3:ecf799cef1db | 551 | strcpy(snd, "wifi.setmode(wifi.STATION)\r\n"); |
georgekamar | 3:ecf799cef1db | 552 | SendCMD(); |
georgekamar | 3:ecf799cef1db | 553 | timeout=4; |
georgekamar | 3:ecf799cef1db | 554 | getreply(); |
georgekamar | 3:ecf799cef1db | 555 | pc.printf(buf); |
georgekamar | 3:ecf799cef1db | 556 | |
georgekamar | 3:ecf799cef1db | 557 | wait(2); |
georgekamar | 3:ecf799cef1db | 558 | |
georgekamar | 3:ecf799cef1db | 559 | |
georgekamar | 3:ecf799cef1db | 560 | |
georgekamar | 3:ecf799cef1db | 561 | pc.printf("\n---------- Listing Access Points ----------\r\n"); |
georgekamar | 3:ecf799cef1db | 562 | strcpy(snd, "function listap(t)\r\n"); |
georgekamar | 3:ecf799cef1db | 563 | SendCMD(); |
georgekamar | 3:ecf799cef1db | 564 | wait(1); |
georgekamar | 3:ecf799cef1db | 565 | strcpy(snd, "for k,v in pairs(t) do\r\n"); |
georgekamar | 3:ecf799cef1db | 566 | SendCMD(); |
georgekamar | 3:ecf799cef1db | 567 | wait(1); |
georgekamar | 3:ecf799cef1db | 568 | strcpy(snd, "print(k..\" : \"..v)\r\n"); |
georgekamar | 3:ecf799cef1db | 569 | SendCMD(); |
georgekamar | 3:ecf799cef1db | 570 | wait(1); |
georgekamar | 3:ecf799cef1db | 571 | strcpy(snd, "end\r\n"); |
georgekamar | 3:ecf799cef1db | 572 | SendCMD(); |
georgekamar | 3:ecf799cef1db | 573 | wait(1); |
georgekamar | 3:ecf799cef1db | 574 | strcpy(snd, "end\r\n"); |
georgekamar | 3:ecf799cef1db | 575 | SendCMD(); |
georgekamar | 3:ecf799cef1db | 576 | wait(1); |
georgekamar | 3:ecf799cef1db | 577 | strcpy(snd, "wifi.sta.getap(listap)\r\n"); |
georgekamar | 3:ecf799cef1db | 578 | SendCMD(); |
georgekamar | 3:ecf799cef1db | 579 | wait(1); |
georgekamar | 3:ecf799cef1db | 580 | timeout=15; |
georgekamar | 3:ecf799cef1db | 581 | getreply(); |
georgekamar | 3:ecf799cef1db | 582 | pc.printf(buf); |
georgekamar | 3:ecf799cef1db | 583 | |
georgekamar | 3:ecf799cef1db | 584 | wait(2); |
georgekamar | 3:ecf799cef1db | 585 | |
georgekamar | 3:ecf799cef1db | 586 | pc.printf("\n---------- Connecting to AP ----------\r\n"); |
georgekamar | 3:ecf799cef1db | 587 | pc.printf("ssid = %s pwd = %s\r\n",ssid,pwd); |
georgekamar | 3:ecf799cef1db | 588 | strcpy(snd, "wifi.sta.config(\""); |
georgekamar | 3:ecf799cef1db | 589 | strcat(snd, ssid); |
georgekamar | 3:ecf799cef1db | 590 | strcat(snd, "\",\""); |
georgekamar | 3:ecf799cef1db | 591 | strcat(snd, pwd); |
georgekamar | 3:ecf799cef1db | 592 | strcat(snd, "\")\r\n"); |
georgekamar | 3:ecf799cef1db | 593 | SendCMD(); |
georgekamar | 3:ecf799cef1db | 594 | timeout=10; |
georgekamar | 3:ecf799cef1db | 595 | getreply(); |
georgekamar | 3:ecf799cef1db | 596 | pc.printf(buf); |
georgekamar | 3:ecf799cef1db | 597 | |
georgekamar | 3:ecf799cef1db | 598 | wait(5); |
georgekamar | 3:ecf799cef1db | 599 | |
georgekamar | 3:ecf799cef1db | 600 | pc.printf("\n---------- Get IP's ----------\r\n"); |
georgekamar | 3:ecf799cef1db | 601 | strcpy(snd, "print(wifi.sta.getip())\r\n"); |
georgekamar | 3:ecf799cef1db | 602 | SendCMD(); |
georgekamar | 3:ecf799cef1db | 603 | timeout=3; |
georgekamar | 3:ecf799cef1db | 604 | getreply(); |
georgekamar | 3:ecf799cef1db | 605 | pc.printf(buf); |
georgekamar | 3:ecf799cef1db | 606 | |
georgekamar | 3:ecf799cef1db | 607 | wait(1); |
georgekamar | 3:ecf799cef1db | 608 | |
georgekamar | 3:ecf799cef1db | 609 | pc.printf("\n---------- Get Connection Status ----------\r\n"); |
georgekamar | 3:ecf799cef1db | 610 | strcpy(snd, "print(wifi.sta.status())\r\n"); |
georgekamar | 3:ecf799cef1db | 611 | SendCMD(); |
georgekamar | 3:ecf799cef1db | 612 | timeout=5; |
georgekamar | 3:ecf799cef1db | 613 | getreply(); |
georgekamar | 3:ecf799cef1db | 614 | pc.printf(buf); |
georgekamar | 3:ecf799cef1db | 615 | |
georgekamar | 3:ecf799cef1db | 616 | pc.printf("\n\n\n If you get a valid (non zero) IP, ESP8266 has been set up.\r\n"); |
georgekamar | 3:ecf799cef1db | 617 | pc.printf(" Run this if you want to reconfig the ESP8266 at any time.\r\n"); |
georgekamar | 3:ecf799cef1db | 618 | pc.printf(" It saves the SSID and password settings internally\r\n"); |
georgekamar | 3:ecf799cef1db | 619 | wait(10); |
georgekamar | 3:ecf799cef1db | 620 | |
georgekamar | 3:ecf799cef1db | 621 | |
georgekamar | 3:ecf799cef1db | 622 | pc.printf("\n---------- Setting up http server ----------\r\n"); |
georgekamar | 3:ecf799cef1db | 623 | strcpy(snd, "srv=net.createServer(net.TCP)\r\n"); |
georgekamar | 3:ecf799cef1db | 624 | SendCMD(); |
georgekamar | 3:ecf799cef1db | 625 | wait(1); |
georgekamar | 3:ecf799cef1db | 626 | |
georgekamar | 3:ecf799cef1db | 627 | strcpy(snd, "srv:listen(80,function(conn)\r\n"); |
georgekamar | 3:ecf799cef1db | 628 | SendCMD(); |
georgekamar | 3:ecf799cef1db | 629 | wait(1); |
georgekamar | 3:ecf799cef1db | 630 | |
georgekamar | 3:ecf799cef1db | 631 | strcpy(snd, "conn:on(\"receive\",function(conn,payload)\r\n"); |
georgekamar | 3:ecf799cef1db | 632 | SendCMD(); |
georgekamar | 3:ecf799cef1db | 633 | wait(1); |
georgekamar | 3:ecf799cef1db | 634 | |
georgekamar | 3:ecf799cef1db | 635 | strcpy(snd, "print(payload)"); |
georgekamar | 3:ecf799cef1db | 636 | SendCMD(); |
georgekamar | 3:ecf799cef1db | 637 | wait(1); |
georgekamar | 3:ecf799cef1db | 638 | |
georgekamar | 3:ecf799cef1db | 639 | strcpy(snd, "end)\r\n"); |
georgekamar | 3:ecf799cef1db | 640 | SendCMD(); |
georgekamar | 3:ecf799cef1db | 641 | wait(1); |
georgekamar | 3:ecf799cef1db | 642 | |
georgekamar | 3:ecf799cef1db | 643 | strcpy(snd, "conn:on(\"sent\",function(conn) conn:close() end)\r\n"); |
georgekamar | 3:ecf799cef1db | 644 | SendCMD(); |
georgekamar | 3:ecf799cef1db | 645 | wait(1); |
georgekamar | 3:ecf799cef1db | 646 | |
georgekamar | 3:ecf799cef1db | 647 | strcpy(snd, "end)\r\n"); |
georgekamar | 3:ecf799cef1db | 648 | SendCMD(); |
georgekamar | 3:ecf799cef1db | 649 | wait(1); |
georgekamar | 3:ecf799cef1db | 650 | |
georgekamar | 3:ecf799cef1db | 651 | timeout=17; |
georgekamar | 3:ecf799cef1db | 652 | getreply(); |
georgekamar | 3:ecf799cef1db | 653 | pc.printf(buf); |
georgekamar | 3:ecf799cef1db | 654 | pc.printf("\r\nDONE"); |
georgekamar | 3:ecf799cef1db | 655 | } |
georgekamar | 3:ecf799cef1db | 656 | |
georgekamar | 3:ecf799cef1db | 657 | void SendCMD() |
georgekamar | 3:ecf799cef1db | 658 | { |
georgekamar | 3:ecf799cef1db | 659 | esp.printf("%s", snd); |
georgekamar | 3:ecf799cef1db | 660 | } |
georgekamar | 3:ecf799cef1db | 661 | |
georgekamar | 3:ecf799cef1db | 662 | void getreply() |
georgekamar | 3:ecf799cef1db | 663 | { |
georgekamar | 3:ecf799cef1db | 664 | memset(buf, '\0', sizeof(buf)); |
georgekamar | 3:ecf799cef1db | 665 | t.start(); |
georgekamar | 3:ecf799cef1db | 666 | ended=0; |
georgekamar | 3:ecf799cef1db | 667 | count=0; |
georgekamar | 3:ecf799cef1db | 668 | while(!ended) { |
georgekamar | 3:ecf799cef1db | 669 | if(esp.readable()) { |
georgekamar | 3:ecf799cef1db | 670 | buf[count] = esp.getc(); |
georgekamar | 3:ecf799cef1db | 671 | count++; |
georgekamar | 3:ecf799cef1db | 672 | } |
georgekamar | 3:ecf799cef1db | 673 | if(t.read() > timeout) { |
georgekamar | 3:ecf799cef1db | 674 | ended = 1; |
georgekamar | 3:ecf799cef1db | 675 | t.stop(); |
georgekamar | 3:ecf799cef1db | 676 | t.reset(); |
sarthakjaiswal | 0:4b3056d3c684 | 677 | } |
sarthakjaiswal | 0:4b3056d3c684 | 678 | } |
sarthakjaiswal | 0:4b3056d3c684 | 679 | } |
georgekamar | 3:ecf799cef1db | 680 | |
georgekamar | 3:ecf799cef1db | 681 |