![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
Program code for the project
Dependencies: 4DGL-uLCD-SE SDAlarm mbed SDFileSystem SoundAPI mbed-rtos
main.cpp@3:01d4b03ade7c, 2017-12-13 (annotated)
- Committer:
- blazar
- Date:
- Wed Dec 13 02:01:44 2017 +0000
- Revision:
- 3:01d4b03ade7c
- Parent:
- 2:15ba42aea6c7
commit;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
megnor3 | 0:ecc736db2e40 | 1 | #include "mbed.h" |
megnor3 | 0:ecc736db2e40 | 2 | #include "uLCD_4DGL.h" |
blazar | 1:049d9c16aa35 | 3 | #include "rtos.h" |
blazar | 1:049d9c16aa35 | 4 | #include "SDFileSystem.h" |
blazar | 1:049d9c16aa35 | 5 | #include "SDAlarm.h" |
blazar | 1:049d9c16aa35 | 6 | #include "wave_player.h" |
megnor3 | 0:ecc736db2e40 | 7 | |
megnor3 | 0:ecc736db2e40 | 8 | Serial pc(USBTX, USBRX); |
megnor3 | 0:ecc736db2e40 | 9 | Serial esp(p28, p27); // tx, rx |
blazar | 1:049d9c16aa35 | 10 | SDFileSystem sd(p5, p6, p7, p8, "sd"); |
blazar | 1:049d9c16aa35 | 11 | |
blazar | 1:049d9c16aa35 | 12 | RawSerial blue(p13,p14); |
megnor3 | 0:ecc736db2e40 | 13 | DigitalOut reset(p26); |
megnor3 | 0:ecc736db2e40 | 14 | DigitalOut led1(LED1); |
megnor3 | 0:ecc736db2e40 | 15 | DigitalOut led4(LED4); |
megnor3 | 0:ecc736db2e40 | 16 | Timer t; |
blazar | 1:049d9c16aa35 | 17 | SDAlarm sdalarm; |
megnor3 | 0:ecc736db2e40 | 18 | |
blazar | 1:049d9c16aa35 | 19 | AnalogOut ao(p18); |
blazar | 1:049d9c16aa35 | 20 | wave_player wp(&ao); |
blazar | 1:049d9c16aa35 | 21 | |
blazar | 1:049d9c16aa35 | 22 | time_t global_time; |
megnor3 | 0:ecc736db2e40 | 23 | uLCD_4DGL uLCD(p9,p10,p11); // serial tx, serial rx, reset pin; |
blazar | 1:049d9c16aa35 | 24 | Mutex lcd_mutex; |
blazar | 1:049d9c16aa35 | 25 | |
blazar | 1:049d9c16aa35 | 26 | Thread alarmThread; |
blazar | 1:049d9c16aa35 | 27 | Thread alarmSound; |
blazar | 1:049d9c16aa35 | 28 | |
megnor3 | 0:ecc736db2e40 | 29 | |
blazar | 1:049d9c16aa35 | 30 | bool alarmWentOff = false; |
blazar | 1:049d9c16aa35 | 31 | bool play = false; |
megnor3 | 0:ecc736db2e40 | 32 | |
blazar | 1:049d9c16aa35 | 33 | DigitalOut one(LED1); |
blazar | 1:049d9c16aa35 | 34 | DigitalOut two(LED2); |
blazar | 1:049d9c16aa35 | 35 | DigitalOut three(LED3); |
blazar | 1:049d9c16aa35 | 36 | DigitalOut four(LED4); |
megnor3 | 0:ecc736db2e40 | 37 | // Global count variable |
megnor3 | 0:ecc736db2e40 | 38 | |
blazar | 1:049d9c16aa35 | 39 | int volatile hours=0; |
megnor3 | 0:ecc736db2e40 | 40 | int volatile minutes=0; |
megnor3 | 0:ecc736db2e40 | 41 | bool volatile alarmSet=false; |
megnor3 | 0:ecc736db2e40 | 42 | int volatile alarmTimeSet = 0; |
megnor3 | 0:ecc736db2e40 | 43 | int volatile timeDisp=0; |
megnor3 | 0:ecc736db2e40 | 44 | bool volatile AMPM=false; //False AM, true PM |
megnor3 | 0:ecc736db2e40 | 45 | |
megnor3 | 0:ecc736db2e40 | 46 | int count,ended,timeout; |
megnor3 | 0:ecc736db2e40 | 47 | char buf[2024]; |
megnor3 | 0:ecc736db2e40 | 48 | char snd[1024]; |
blazar | 2:15ba42aea6c7 | 49 | char ssid[32] = ""; // enter WiFi router ssid inside the quotes |
blazar | 2:15ba42aea6c7 | 50 | char pwd [32] = ""; // enter WiFi router password inside the quotes |
megnor3 | 0:ecc736db2e40 | 51 | bool timeReady = false; |
megnor3 | 0:ecc736db2e40 | 52 | |
megnor3 | 0:ecc736db2e40 | 53 | char curTime[20]; |
megnor3 | 0:ecc736db2e40 | 54 | |
megnor3 | 0:ecc736db2e40 | 55 | void SendCMD(),getreply(),ESPconfig(),ESPsetbaudrate(), getTime(); |
megnor3 | 0:ecc736db2e40 | 56 | int timeFromResponse(); |
megnor3 | 0:ecc736db2e40 | 57 | void dev_recv() |
megnor3 | 0:ecc736db2e40 | 58 | { |
megnor3 | 0:ecc736db2e40 | 59 | led1 = !led1; |
megnor3 | 0:ecc736db2e40 | 60 | while(esp.readable()) { |
megnor3 | 0:ecc736db2e40 | 61 | pc.putc(esp.getc()); |
megnor3 | 0:ecc736db2e40 | 62 | } |
megnor3 | 0:ecc736db2e40 | 63 | } |
megnor3 | 0:ecc736db2e40 | 64 | |
megnor3 | 0:ecc736db2e40 | 65 | void pc_recv() |
megnor3 | 0:ecc736db2e40 | 66 | { |
megnor3 | 0:ecc736db2e40 | 67 | led4 = !led4; |
megnor3 | 0:ecc736db2e40 | 68 | while(pc.readable()) { |
megnor3 | 0:ecc736db2e40 | 69 | esp.putc(pc.getc()); |
megnor3 | 0:ecc736db2e40 | 70 | } |
megnor3 | 0:ecc736db2e40 | 71 | } |
megnor3 | 0:ecc736db2e40 | 72 | |
blazar | 1:049d9c16aa35 | 73 | |
blazar | 1:049d9c16aa35 | 74 | |
blazar | 1:049d9c16aa35 | 75 | void bt_rec() { |
blazar | 1:049d9c16aa35 | 76 | while(blue.readable()) { |
blazar | 1:049d9c16aa35 | 77 | if (blue.getc()=='!') { |
blazar | 1:049d9c16aa35 | 78 | char c = blue.getc(); |
blazar | 1:049d9c16aa35 | 79 | if (c=='B') { //button data |
blazar | 1:049d9c16aa35 | 80 | char bnum = blue.getc(); //button number |
blazar | 1:049d9c16aa35 | 81 | char pressedOrReleased = blue.getc(); |
blazar | 1:049d9c16aa35 | 82 | |
blazar | 1:049d9c16aa35 | 83 | if (pressedOrReleased == '0') { |
blazar | 1:049d9c16aa35 | 84 | if (bnum=='1') { |
blazar | 1:049d9c16aa35 | 85 | alarmSet = !alarmSet; |
blazar | 1:049d9c16aa35 | 86 | } |
blazar | 1:049d9c16aa35 | 87 | } |
blazar | 1:049d9c16aa35 | 88 | if (pressedOrReleased == '1') { |
blazar | 1:049d9c16aa35 | 89 | |
blazar | 1:049d9c16aa35 | 90 | if (bnum=='2') { |
blazar | 1:049d9c16aa35 | 91 | hours++; |
blazar | 1:049d9c16aa35 | 92 | if(hours>24){ hours= 0;} |
blazar | 1:049d9c16aa35 | 93 | } |
blazar | 1:049d9c16aa35 | 94 | if (bnum=='3') { |
blazar | 1:049d9c16aa35 | 95 | minutes++; |
blazar | 1:049d9c16aa35 | 96 | if(minutes>59) minutes= 0; |
blazar | 1:049d9c16aa35 | 97 | } |
blazar | 1:049d9c16aa35 | 98 | } |
blazar | 1:049d9c16aa35 | 99 | |
blazar | 1:049d9c16aa35 | 100 | } |
blazar | 1:049d9c16aa35 | 101 | } |
blazar | 1:049d9c16aa35 | 102 | } |
megnor3 | 0:ecc736db2e40 | 103 | } |
blazar | 1:049d9c16aa35 | 104 | void alarm_sound() { |
blazar | 1:049d9c16aa35 | 105 | while (true) { |
blazar | 1:049d9c16aa35 | 106 | if (play){ |
blazar | 1:049d9c16aa35 | 107 | FILE *wave_file; |
blazar | 1:049d9c16aa35 | 108 | wave_file=fopen("/sd/alarm_beep.wav","r"); |
megnor3 | 0:ecc736db2e40 | 109 | |
blazar | 1:049d9c16aa35 | 110 | wp.play(wave_file); |
blazar | 1:049d9c16aa35 | 111 | fclose(wave_file); |
blazar | 1:049d9c16aa35 | 112 | } |
blazar | 1:049d9c16aa35 | 113 | } |
megnor3 | 0:ecc736db2e40 | 114 | } |
blazar | 1:049d9c16aa35 | 115 | void alarm_thread() { |
blazar | 1:049d9c16aa35 | 116 | time_t lastalarm = time(NULL); |
blazar | 1:049d9c16aa35 | 117 | bool lastset = false; |
blazar | 1:049d9c16aa35 | 118 | while(1) { |
blazar | 1:049d9c16aa35 | 119 | time_t rawtime = hours*60*60 + minutes*60; |
blazar | 1:049d9c16aa35 | 120 | struct tm * timeinfo; |
blazar | 1:049d9c16aa35 | 121 | char buffer [80]; |
megnor3 | 0:ecc736db2e40 | 122 | |
blazar | 1:049d9c16aa35 | 123 | timeinfo = localtime (&rawtime); |
blazar | 1:049d9c16aa35 | 124 | strftime (buffer,80,"%I:%M %p",timeinfo); |
blazar | 1:049d9c16aa35 | 125 | //if (lastalarm != rawtime) { |
blazar | 1:049d9c16aa35 | 126 | lcd_mutex.lock(); |
blazar | 1:049d9c16aa35 | 127 | uLCD.locate(3,11); |
blazar | 1:049d9c16aa35 | 128 | uLCD.color(WHITE); |
blazar | 1:049d9c16aa35 | 129 | uLCD.text_width(1); |
blazar | 1:049d9c16aa35 | 130 | uLCD.text_height(1); |
blazar | 1:049d9c16aa35 | 131 | uLCD.printf("%s", buffer); |
blazar | 1:049d9c16aa35 | 132 | |
blazar | 1:049d9c16aa35 | 133 | lastalarm = rawtime; |
blazar | 1:049d9c16aa35 | 134 | |
blazar | 1:049d9c16aa35 | 135 | //} |
blazar | 1:049d9c16aa35 | 136 | if (lastset != alarmSet) { |
blazar | 1:049d9c16aa35 | 137 | |
megnor3 | 0:ecc736db2e40 | 138 | |
blazar | 1:049d9c16aa35 | 139 | uLCD.color(WHITE); |
blazar | 1:049d9c16aa35 | 140 | uLCD.text_width(1); |
blazar | 1:049d9c16aa35 | 141 | uLCD.text_height(1); |
blazar | 1:049d9c16aa35 | 142 | uLCD.locate(3,12); |
blazar | 1:049d9c16aa35 | 143 | if (alarmSet) { |
blazar | 1:049d9c16aa35 | 144 | |
blazar | 1:049d9c16aa35 | 145 | uLCD.color(WHITE); |
blazar | 1:049d9c16aa35 | 146 | uLCD.printf("Alarm Set"); |
blazar | 1:049d9c16aa35 | 147 | sdalarm.setAlarm(rawtime); |
blazar | 1:049d9c16aa35 | 148 | } else { |
blazar | 1:049d9c16aa35 | 149 | |
blazar | 1:049d9c16aa35 | 150 | uLCD.color(BLACK); |
blazar | 1:049d9c16aa35 | 151 | uLCD.printf("Alarm Set"); |
blazar | 1:049d9c16aa35 | 152 | } |
blazar | 1:049d9c16aa35 | 153 | lastset = alarmSet; |
blazar | 1:049d9c16aa35 | 154 | |
blazar | 1:049d9c16aa35 | 155 | } |
blazar | 1:049d9c16aa35 | 156 | |
blazar | 1:049d9c16aa35 | 157 | lcd_mutex.unlock(); |
blazar | 1:049d9c16aa35 | 158 | Thread::wait(50); |
blazar | 1:049d9c16aa35 | 159 | } |
megnor3 | 0:ecc736db2e40 | 160 | } |
megnor3 | 0:ecc736db2e40 | 161 | int main() |
megnor3 | 0:ecc736db2e40 | 162 | { |
blazar | 1:049d9c16aa35 | 163 | uLCD.baudrate(3000000); |
blazar | 1:049d9c16aa35 | 164 | blue.attach(&bt_rec,Serial::RxIrq); |
blazar | 1:049d9c16aa35 | 165 | |
megnor3 | 0:ecc736db2e40 | 166 | |
megnor3 | 0:ecc736db2e40 | 167 | reset=0; //hardware reset for 8266 |
megnor3 | 0:ecc736db2e40 | 168 | pc.baud(9600); // set what you want here depending on your terminal program speed |
megnor3 | 0:ecc736db2e40 | 169 | pc.printf("\f\n\r-------------ESP8266 Hardware Reset-------------\n\r"); |
megnor3 | 0:ecc736db2e40 | 170 | wait(0.5); |
megnor3 | 0:ecc736db2e40 | 171 | reset=1; |
megnor3 | 0:ecc736db2e40 | 172 | timeout=2; |
megnor3 | 0:ecc736db2e40 | 173 | getreply(); |
megnor3 | 0:ecc736db2e40 | 174 | |
megnor3 | 0:ecc736db2e40 | 175 | esp.baud(9600); // change this to the new ESP8266 baudrate if it is changed at any time. |
megnor3 | 0:ecc736db2e40 | 176 | |
megnor3 | 0:ecc736db2e40 | 177 | //ESPsetbaudrate(); //****************** include this routine to set a different ESP8266 baudrate ****************** |
megnor3 | 0:ecc736db2e40 | 178 | |
megnor3 | 0:ecc736db2e40 | 179 | ESPconfig(); //****************** include Config to set the ESP8266 configuration *********************** |
megnor3 | 0:ecc736db2e40 | 180 | getTime(); |
megnor3 | 0:ecc736db2e40 | 181 | pc.printf("%s", buf); |
megnor3 | 0:ecc736db2e40 | 182 | |
blazar | 1:049d9c16aa35 | 183 | timeDisp = timeFromResponse() + 18; |
megnor3 | 0:ecc736db2e40 | 184 | set_time(timeDisp); |
blazar | 1:049d9c16aa35 | 185 | |
blazar | 1:049d9c16aa35 | 186 | |
blazar | 1:049d9c16aa35 | 187 | |
blazar | 1:049d9c16aa35 | 188 | time_t alarmTime = sdalarm.getAlarm(); |
blazar | 1:049d9c16aa35 | 189 | char timebuffer[80]; |
blazar | 1:049d9c16aa35 | 190 | struct tm * timeinfo; |
blazar | 1:049d9c16aa35 | 191 | timeinfo = localtime (&alarmTime); |
blazar | 1:049d9c16aa35 | 192 | |
blazar | 1:049d9c16aa35 | 193 | strftime (timebuffer,80,"%H",timeinfo); |
blazar | 1:049d9c16aa35 | 194 | |
blazar | 1:049d9c16aa35 | 195 | hours = atoi(timebuffer); |
blazar | 1:049d9c16aa35 | 196 | strftime (timebuffer,80,"%M",timeinfo); |
blazar | 1:049d9c16aa35 | 197 | minutes = atoi(timebuffer); |
blazar | 1:049d9c16aa35 | 198 | |
blazar | 1:049d9c16aa35 | 199 | alarmThread.start(alarm_thread); |
blazar | 1:049d9c16aa35 | 200 | alarmSound.start(alarm_sound); |
blazar | 1:049d9c16aa35 | 201 | |
blazar | 1:049d9c16aa35 | 202 | |
blazar | 1:049d9c16aa35 | 203 | while (1) { |
blazar | 1:049d9c16aa35 | 204 | time_t rawtime; |
blazar | 1:049d9c16aa35 | 205 | struct tm * timeinfo; |
blazar | 1:049d9c16aa35 | 206 | char buffer [80]; |
blazar | 1:049d9c16aa35 | 207 | time (&rawtime); |
blazar | 1:049d9c16aa35 | 208 | global_time = rawtime; |
blazar | 1:049d9c16aa35 | 209 | timeinfo = localtime (&rawtime); |
blazar | 1:049d9c16aa35 | 210 | strftime (buffer,80,"%I:%M %p",timeinfo); |
blazar | 1:049d9c16aa35 | 211 | |
blazar | 1:049d9c16aa35 | 212 | if ((hours*60*60 + minutes*60) < (rawtime % (60*60*24))) { |
blazar | 1:049d9c16aa35 | 213 | alarmWentOff = true; |
blazar | 1:049d9c16aa35 | 214 | } else { |
blazar | 1:049d9c16aa35 | 215 | alarmWentOff = false; |
blazar | 1:049d9c16aa35 | 216 | } |
megnor3 | 0:ecc736db2e40 | 217 | |
blazar | 1:049d9c16aa35 | 218 | lcd_mutex.lock(); |
blazar | 1:049d9c16aa35 | 219 | uLCD.locate(0,0); |
blazar | 1:049d9c16aa35 | 220 | uLCD.color(WHITE); |
blazar | 1:049d9c16aa35 | 221 | uLCD.text_width(2); |
blazar | 1:049d9c16aa35 | 222 | uLCD.text_height(2); |
blazar | 1:049d9c16aa35 | 223 | uLCD.printf("%s", buffer); |
blazar | 1:049d9c16aa35 | 224 | lcd_mutex.unlock(); |
blazar | 1:049d9c16aa35 | 225 | Thread::wait(500); |
blazar | 1:049d9c16aa35 | 226 | |
blazar | 1:049d9c16aa35 | 227 | if (global_time % (60*60*24) == 0) { |
blazar | 1:049d9c16aa35 | 228 | alarmWentOff = false; |
blazar | 1:049d9c16aa35 | 229 | } |
blazar | 1:049d9c16aa35 | 230 | if ((((int)global_time) % (60*60*24)) >= (hours*60*60 + minutes*60) && alarmSet && !alarmWentOff) { |
blazar | 1:049d9c16aa35 | 231 | one = !one; |
blazar | 1:049d9c16aa35 | 232 | lcd_mutex.lock(); |
blazar | 1:049d9c16aa35 | 233 | uLCD.locate(2,6); |
blazar | 1:049d9c16aa35 | 234 | uLCD.color(RED); |
blazar | 1:049d9c16aa35 | 235 | uLCD.text_width(2); |
blazar | 1:049d9c16aa35 | 236 | uLCD.text_height(2); |
megnor3 | 0:ecc736db2e40 | 237 | uLCD.printf("ALARM"); |
blazar | 1:049d9c16aa35 | 238 | lcd_mutex.unlock(); |
blazar | 1:049d9c16aa35 | 239 | alarmWentOff = true; |
blazar | 1:049d9c16aa35 | 240 | play = true; |
blazar | 1:049d9c16aa35 | 241 | } else { |
blazar | 1:049d9c16aa35 | 242 | play = false; |
blazar | 1:049d9c16aa35 | 243 | lcd_mutex.lock(); |
blazar | 1:049d9c16aa35 | 244 | uLCD.locate(2,6); |
blazar | 1:049d9c16aa35 | 245 | uLCD.color(BLACK); |
blazar | 1:049d9c16aa35 | 246 | uLCD.text_width(2); |
blazar | 1:049d9c16aa35 | 247 | uLCD.text_height(2); |
blazar | 1:049d9c16aa35 | 248 | uLCD.printf("ALARM"); |
blazar | 1:049d9c16aa35 | 249 | lcd_mutex.unlock(); |
blazar | 1:049d9c16aa35 | 250 | } |
megnor3 | 0:ecc736db2e40 | 251 | |
blazar | 1:049d9c16aa35 | 252 | |
blazar | 1:049d9c16aa35 | 253 | |
megnor3 | 0:ecc736db2e40 | 254 | } |
megnor3 | 0:ecc736db2e40 | 255 | |
megnor3 | 0:ecc736db2e40 | 256 | } |
megnor3 | 0:ecc736db2e40 | 257 | |
megnor3 | 0:ecc736db2e40 | 258 | // Sets new ESP8266 baurate, change the esp.baud(xxxxx) to match your new setting once this has been executed |
megnor3 | 0:ecc736db2e40 | 259 | void ESPsetbaudrate() |
megnor3 | 0:ecc736db2e40 | 260 | { |
megnor3 | 0:ecc736db2e40 | 261 | strcpy(snd, "AT+CIOBAUD=115200\r\n"); // change the numeric value to the required baudrate |
megnor3 | 0:ecc736db2e40 | 262 | SendCMD(); |
megnor3 | 0:ecc736db2e40 | 263 | } |
megnor3 | 0:ecc736db2e40 | 264 | |
megnor3 | 0:ecc736db2e40 | 265 | // +++++++++++++++++++++++++++++++++ This is for ESP8266 config only, run this once to set up the ESP8266 +++++++++++++++ |
megnor3 | 0:ecc736db2e40 | 266 | void ESPconfig() |
megnor3 | 0:ecc736db2e40 | 267 | { |
megnor3 | 0:ecc736db2e40 | 268 | |
megnor3 | 0:ecc736db2e40 | 269 | wait(5); |
megnor3 | 0:ecc736db2e40 | 270 | pc.printf("\f---------- Starting ESP Config ----------\r\n\n"); |
megnor3 | 0:ecc736db2e40 | 271 | strcpy(snd,".\r\n.\r\n"); |
megnor3 | 0:ecc736db2e40 | 272 | SendCMD(); |
megnor3 | 0:ecc736db2e40 | 273 | wait(1); |
megnor3 | 0:ecc736db2e40 | 274 | pc.printf("---------- Reset & get Firmware ----------\r\n"); |
megnor3 | 0:ecc736db2e40 | 275 | strcpy(snd,"node.restart()\r\n"); |
megnor3 | 0:ecc736db2e40 | 276 | SendCMD(); |
megnor3 | 0:ecc736db2e40 | 277 | timeout=5; |
megnor3 | 0:ecc736db2e40 | 278 | getreply(); |
megnor3 | 0:ecc736db2e40 | 279 | pc.printf(buf); |
megnor3 | 0:ecc736db2e40 | 280 | |
megnor3 | 0:ecc736db2e40 | 281 | |
megnor3 | 0:ecc736db2e40 | 282 | // set CWMODE to 1=Station,2=AP,3=BOTH, default mode 1 (Station) |
megnor3 | 0:ecc736db2e40 | 283 | strcpy(snd, "wifi.setmode(wifi.STATION)\r\n"); |
megnor3 | 0:ecc736db2e40 | 284 | SendCMD(); |
megnor3 | 0:ecc736db2e40 | 285 | timeout=4; |
megnor3 | 0:ecc736db2e40 | 286 | getreply(); |
megnor3 | 0:ecc736db2e40 | 287 | pc.printf(buf); |
megnor3 | 0:ecc736db2e40 | 288 | |
megnor3 | 0:ecc736db2e40 | 289 | wait(1); |
megnor3 | 0:ecc736db2e40 | 290 | |
megnor3 | 0:ecc736db2e40 | 291 | strcpy(snd, "wifi.sta.config(\""); |
megnor3 | 0:ecc736db2e40 | 292 | strcat(snd, ssid); |
megnor3 | 0:ecc736db2e40 | 293 | strcat(snd, "\",\""); |
megnor3 | 0:ecc736db2e40 | 294 | strcat(snd, pwd); |
megnor3 | 0:ecc736db2e40 | 295 | strcat(snd, "\")\r\n"); |
megnor3 | 0:ecc736db2e40 | 296 | SendCMD(); |
megnor3 | 0:ecc736db2e40 | 297 | timeout=10; |
megnor3 | 0:ecc736db2e40 | 298 | getreply(); |
megnor3 | 0:ecc736db2e40 | 299 | pc.printf(buf); |
megnor3 | 0:ecc736db2e40 | 300 | |
megnor3 | 0:ecc736db2e40 | 301 | wait(1); |
megnor3 | 0:ecc736db2e40 | 302 | |
megnor3 | 0:ecc736db2e40 | 303 | strcpy(snd, "print(wifi.sta.getip())\r\n"); |
megnor3 | 0:ecc736db2e40 | 304 | SendCMD(); |
megnor3 | 0:ecc736db2e40 | 305 | timeout=3; |
megnor3 | 0:ecc736db2e40 | 306 | getreply(); |
megnor3 | 0:ecc736db2e40 | 307 | pc.printf(buf); |
megnor3 | 0:ecc736db2e40 | 308 | |
megnor3 | 0:ecc736db2e40 | 309 | wait(1); |
megnor3 | 0:ecc736db2e40 | 310 | |
blazar | 3:01d4b03ade7c | 311 | |
megnor3 | 0:ecc736db2e40 | 312 | strcpy(snd, "print(wifi.sta.status())\r\n"); |
megnor3 | 0:ecc736db2e40 | 313 | SendCMD(); |
megnor3 | 0:ecc736db2e40 | 314 | timeout=5; |
megnor3 | 0:ecc736db2e40 | 315 | getreply(); |
megnor3 | 0:ecc736db2e40 | 316 | |
megnor3 | 0:ecc736db2e40 | 317 | } |
megnor3 | 0:ecc736db2e40 | 318 | void getTime() { |
megnor3 | 0:ecc736db2e40 | 319 | wait(1); |
megnor3 | 0:ecc736db2e40 | 320 | strcpy(snd,"sk=net.createConnection(net.TCP, 0)\r\n"); |
megnor3 | 0:ecc736db2e40 | 321 | SendCMD(); |
megnor3 | 0:ecc736db2e40 | 322 | timeout=3; |
megnor3 | 0:ecc736db2e40 | 323 | getreply(); |
megnor3 | 0:ecc736db2e40 | 324 | |
megnor3 | 0:ecc736db2e40 | 325 | strcpy(snd,"sk:on(\"receive\", function(sck, c) print(c) end )\r\n"); |
megnor3 | 0:ecc736db2e40 | 326 | SendCMD(); |
megnor3 | 0:ecc736db2e40 | 327 | timeout=3; |
megnor3 | 0:ecc736db2e40 | 328 | getreply(); |
megnor3 | 0:ecc736db2e40 | 329 | |
megnor3 | 0:ecc736db2e40 | 330 | strcpy(snd,"sk:connect(80,\"api.timezonedb.com\")\r\n"); |
megnor3 | 0:ecc736db2e40 | 331 | SendCMD(); |
megnor3 | 0:ecc736db2e40 | 332 | timeout=3; |
megnor3 | 0:ecc736db2e40 | 333 | getreply(); |
megnor3 | 0:ecc736db2e40 | 334 | wait(1); |
megnor3 | 0:ecc736db2e40 | 335 | |
blazar | 2:15ba42aea6c7 | 336 | strcpy(snd, "sk:send(\"GET /v2/get-time-zone?key=[API key here]&format=json&by=zone&zone=America/New_York HTTP/1.1\\r\\nHost: api.timezonedb.com\\r\\nConnection: keep-alive\\r\\nAccept: */*\\r\\n\\r\\n\")\r\n"); |
megnor3 | 0:ecc736db2e40 | 337 | SendCMD(); |
megnor3 | 0:ecc736db2e40 | 338 | timeout=17; |
megnor3 | 0:ecc736db2e40 | 339 | getreply(); |
megnor3 | 0:ecc736db2e40 | 340 | |
megnor3 | 0:ecc736db2e40 | 341 | timeReady = true; |
megnor3 | 0:ecc736db2e40 | 342 | |
megnor3 | 0:ecc736db2e40 | 343 | } |
megnor3 | 0:ecc736db2e40 | 344 | void SendCMD() |
megnor3 | 0:ecc736db2e40 | 345 | { |
megnor3 | 0:ecc736db2e40 | 346 | esp.printf("%s", snd); |
megnor3 | 0:ecc736db2e40 | 347 | } |
megnor3 | 0:ecc736db2e40 | 348 | |
megnor3 | 0:ecc736db2e40 | 349 | void getreply() |
megnor3 | 0:ecc736db2e40 | 350 | { |
megnor3 | 0:ecc736db2e40 | 351 | memset(buf, '\0', sizeof(buf)); |
megnor3 | 0:ecc736db2e40 | 352 | t.start(); |
megnor3 | 0:ecc736db2e40 | 353 | ended=0; |
megnor3 | 0:ecc736db2e40 | 354 | count=0; |
megnor3 | 0:ecc736db2e40 | 355 | while(!ended) { |
megnor3 | 0:ecc736db2e40 | 356 | if(esp.readable()) { |
megnor3 | 0:ecc736db2e40 | 357 | buf[count] = esp.getc(); |
megnor3 | 0:ecc736db2e40 | 358 | count++; |
megnor3 | 0:ecc736db2e40 | 359 | } |
megnor3 | 0:ecc736db2e40 | 360 | if(t.read() > timeout) { |
megnor3 | 0:ecc736db2e40 | 361 | ended = 1; |
megnor3 | 0:ecc736db2e40 | 362 | t.stop(); |
megnor3 | 0:ecc736db2e40 | 363 | t.reset(); |
megnor3 | 0:ecc736db2e40 | 364 | } |
megnor3 | 0:ecc736db2e40 | 365 | } |
megnor3 | 0:ecc736db2e40 | 366 | } |
megnor3 | 0:ecc736db2e40 | 367 | |
megnor3 | 0:ecc736db2e40 | 368 | int timeFromResponse() { |
megnor3 | 0:ecc736db2e40 | 369 | char * timestamp; |
megnor3 | 0:ecc736db2e40 | 370 | timestamp = strstr(buf, "\"timestamp\":"); |
megnor3 | 0:ecc736db2e40 | 371 | |
megnor3 | 0:ecc736db2e40 | 372 | timestamp = timestamp + 12; |
megnor3 | 0:ecc736db2e40 | 373 | int count = 0; |
megnor3 | 0:ecc736db2e40 | 374 | |
megnor3 | 0:ecc736db2e40 | 375 | while(timestamp[count] != ',') { |
megnor3 | 0:ecc736db2e40 | 376 | count++; |
megnor3 | 0:ecc736db2e40 | 377 | } |
megnor3 | 0:ecc736db2e40 | 378 | |
megnor3 | 0:ecc736db2e40 | 379 | strncpy(curTime, timestamp, count); |
megnor3 | 0:ecc736db2e40 | 380 | return atoi(curTime); |
megnor3 | 0:ecc736db2e40 | 381 | } |