Monil
Dependencies: mbed RA8875 mbed-rtos SDFileSystem Keypad
main.cpp@15:a557a4c85e54, 2021-01-11 (annotated)
- Committer:
- mchheta
- Date:
- Mon Jan 11 17:48:18 2021 +0000
- Revision:
- 15:a557a4c85e54
- Parent:
- 14:d71b1aa3c8bf
This is for Monil's Thesis Project at IAC-IUPUI
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
WiredHome | 0:037b95a5cc85 | 1 | |
mchheta | 15:a557a4c85e54 | 2 | #include "mbed.h" |
mchheta | 15:a557a4c85e54 | 3 | #include <math.h> |
mchheta | 15:a557a4c85e54 | 4 | #include <string.h> |
mchheta | 15:a557a4c85e54 | 5 | #include "SDFileSystem.h" |
mchheta | 15:a557a4c85e54 | 6 | #include <iostream> |
mchheta | 15:a557a4c85e54 | 7 | #include <string> |
mchheta | 15:a557a4c85e54 | 8 | #include "rtos.h" |
mchheta | 15:a557a4c85e54 | 9 | # define FileName "/sd/Backup.txt" |
mchheta | 15:a557a4c85e54 | 10 | using namespace std; |
mchheta | 15:a557a4c85e54 | 11 | |
mchheta | 15:a557a4c85e54 | 12 | |
mchheta | 15:a557a4c85e54 | 13 | SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); //SD card |
mchheta | 15:a557a4c85e54 | 14 | Serial pc(USBTX, USBRX ); //Serial Communication |
mchheta | 15:a557a4c85e54 | 15 | Serial esp(PTC17, PTC16); // tx, rx (Wifi) |
mchheta | 15:a557a4c85e54 | 16 | AnalogIn Port[]={PTB2,PTB3,PTB10, PTB11, PTC11, PTC10, PTC2, PTC0,PTC9, PTC8}; //Define sensor pins |
mchheta | 15:a557a4c85e54 | 17 | float PortVal[10], timeout, Port_Multiplier[11]; |
mchheta | 15:a557a4c85e54 | 18 | char buf[1024], snd[1024], text[1024], cpyStr[1024], Port_Description[11][100]; |
mchheta | 15:a557a4c85e54 | 19 | //char Board_specs[10][50];// Board_specs[1]= Board-id, Board_specs[2]=WIFI ssid, Board_specs[3]=Wifi-Password,Board_specs[4]=Database TableName. |
mchheta | 15:a557a4c85e54 | 20 | char Board_specs[10][50]; //= {"IAC_Board3", "ENGR-IOT", "engr-iot", "sensor_readings"}; |
mchheta | 15:a557a4c85e54 | 21 | int rTime,bufcnt,lineCnt,prtCnt,ended,Multiplier,Port_SensorID[11], brdspCnt=0, count = 0; |
mchheta | 15:a557a4c85e54 | 22 | char port[10][10] = {"Port_1","Port_2","Port_3","Port_4","Port_5","Port_6","Port_7","Port_8","Port_9","Port_10"}; |
mchheta | 15:a557a4c85e54 | 23 | Timer t; |
mchheta | 15:a557a4c85e54 | 24 | int port_number; |
mchheta | 15:a557a4c85e54 | 25 | float port_value; |
mchheta | 15:a557a4c85e54 | 26 | //char ssid[32] = "iPhone"; // enter WiFi router ssid inside the quotes |
mchheta | 15:a557a4c85e54 | 27 | //char pwd [32] = "sl197197"; |
mchheta | 15:a557a4c85e54 | 28 | //char ssid[32] = "ENGR-IOT"; // enter WiFi router ssid inside the quotes |
mchheta | 15:a557a4c85e54 | 29 | //char pwd [32] = "engr-iot"; |
mchheta | 15:a557a4c85e54 | 30 | //char ssid[32] = "BatCave"; // enter WiFi router ssid inside the quotes |
mchheta | 15:a557a4c85e54 | 31 | //char pwd [32] = "bringyourownbeer232"; |
mchheta | 15:a557a4c85e54 | 32 | char ssid[32] ; // enter WiFi router ssid inside the quotes |
mchheta | 15:a557a4c85e54 | 33 | char pwd [32] ; |
mchheta | 15:a557a4c85e54 | 34 | char wifiIP[32]; |
mchheta | 15:a557a4c85e54 | 35 | |
mchheta | 15:a557a4c85e54 | 36 | void SendCMD(),getreply(), TCP_Boardspecs(), TCP_IPSend(), TCP_DataSend(), SDcrdRead(), Backup(char*),SendBackupData(); |
mchheta | 15:a557a4c85e54 | 37 | char readConfigText(); |
mchheta | 15:a557a4c85e54 | 38 | float UnitConversion(int Sens_ID); |
mchheta | 15:a557a4c85e54 | 39 | char *SensorName(int Sens_ID); |
mchheta | 15:a557a4c85e54 | 40 | FILE * fp; |
mchheta | 15:a557a4c85e54 | 41 | FILE * fp2; |
mchheta | 15:a557a4c85e54 | 42 | |
mchheta | 15:a557a4c85e54 | 43 | DigitalOut Relay1(PTD2), Relay2(PTD0), Relay3(PTC4), Relay4(PTC12); |
mchheta | 15:a557a4c85e54 | 44 | time_t seconds = time(NULL); |
mchheta | 15:a557a4c85e54 | 45 | |
mchheta | 15:a557a4c85e54 | 46 | |
mchheta | 15:a557a4c85e54 | 47 | /*This function parses the SD Card Config File*/ |
mchheta | 15:a557a4c85e54 | 48 | |
mchheta | 15:a557a4c85e54 | 49 | void SDcrdRead(void){ |
mchheta | 15:a557a4c85e54 | 50 | //FILE * fp; |
mchheta | 15:a557a4c85e54 | 51 | |
mchheta | 15:a557a4c85e54 | 52 | printf("\r\nReading from SD card...\r\n\n\n"); |
mchheta | 15:a557a4c85e54 | 53 | fp = fopen("/sd/IAC_Config_File.txt", "rb"); |
mchheta | 15:a557a4c85e54 | 54 | if (fp != NULL) { |
mchheta | 15:a557a4c85e54 | 55 | readConfigText(); |
mchheta | 15:a557a4c85e54 | 56 | fclose(fp); |
mchheta | 15:a557a4c85e54 | 57 | printf(" \r\n\r\n\r\nRead Successfully!\r\n\r\n\r\n"); |
mchheta | 15:a557a4c85e54 | 58 | printf(" \r\n\r\n\r\n ---- Config File ---- \r\n\r\n\r\n"); |
mchheta | 15:a557a4c85e54 | 59 | printf("%s\n", text); |
mchheta | 15:a557a4c85e54 | 60 | printf(" \r\n\r\n\r\n ---- End of Config File ---- \r\n\r\n\r\n"); |
mchheta | 15:a557a4c85e54 | 61 | } |
mchheta | 15:a557a4c85e54 | 62 | else { |
mchheta | 15:a557a4c85e54 | 63 | printf("\nReading Failed!\r\n"); |
mchheta | 15:a557a4c85e54 | 64 | } |
mchheta | 15:a557a4c85e54 | 65 | |
mchheta | 15:a557a4c85e54 | 66 | } |
mchheta | 15:a557a4c85e54 | 67 | |
mchheta | 15:a557a4c85e54 | 68 | /*This function is used to rename a file in SD Card.*/ |
mchheta | 15:a557a4c85e54 | 69 | |
mchheta | 15:a557a4c85e54 | 70 | int file_rename(const char *oldfname, const char *newfname) { |
mchheta | 15:a557a4c85e54 | 71 | int retval = 0; |
mchheta | 15:a557a4c85e54 | 72 | int ch; |
mchheta | 15:a557a4c85e54 | 73 | |
mchheta | 15:a557a4c85e54 | 74 | FILE *fpold = fopen(oldfname, "r"); // src file |
mchheta | 15:a557a4c85e54 | 75 | FILE *fpnew = fopen(newfname, "w"); // dest file |
mchheta | 15:a557a4c85e54 | 76 | |
mchheta | 15:a557a4c85e54 | 77 | while (1) { // Copy src to dest |
mchheta | 15:a557a4c85e54 | 78 | ch = fgetc(fpold); // until src EOF read. |
mchheta | 15:a557a4c85e54 | 79 | if (ch == EOF) break; |
mchheta | 15:a557a4c85e54 | 80 | fputc(ch, fpnew); |
mchheta | 15:a557a4c85e54 | 81 | } |
mchheta | 15:a557a4c85e54 | 82 | |
mchheta | 15:a557a4c85e54 | 83 | fclose(fpnew); |
mchheta | 15:a557a4c85e54 | 84 | fclose(fpold); |
mchheta | 15:a557a4c85e54 | 85 | |
mchheta | 15:a557a4c85e54 | 86 | fpnew = fopen(newfname, "r"); // Reopen dest to insure |
mchheta | 15:a557a4c85e54 | 87 | if(fpnew == NULL) { // that it was created. |
mchheta | 15:a557a4c85e54 | 88 | retval = (-1); // Return Error. |
mchheta | 15:a557a4c85e54 | 89 | } |
mchheta | 15:a557a4c85e54 | 90 | else { |
mchheta | 15:a557a4c85e54 | 91 | fclose(fpnew); |
mchheta | 15:a557a4c85e54 | 92 | remove(oldfname); // Remove original file. |
mchheta | 15:a557a4c85e54 | 93 | retval = (0); // Return Success. |
mchheta | 15:a557a4c85e54 | 94 | } |
mchheta | 15:a557a4c85e54 | 95 | return (retval); |
mchheta | 15:a557a4c85e54 | 96 | } |
mchheta | 15:a557a4c85e54 | 97 | |
mchheta | 15:a557a4c85e54 | 98 | /*This function is used to copy contents of one file in SD card to another file in SD card*/ |
mchheta | 15:a557a4c85e54 | 99 | |
mchheta | 15:a557a4c85e54 | 100 | int file_copy (const char *src, const char *dst) { |
mchheta | 15:a557a4c85e54 | 101 | int retval,co = 0; |
mchheta | 15:a557a4c85e54 | 102 | int ch; |
mchheta | 15:a557a4c85e54 | 103 | |
mchheta | 15:a557a4c85e54 | 104 | FILE *fpsrc = fopen(src, "r"); // src file |
mchheta | 15:a557a4c85e54 | 105 | FILE *fpdst = fopen(dst, "w"); // dest file |
mchheta | 15:a557a4c85e54 | 106 | |
mchheta | 15:a557a4c85e54 | 107 | while (1) { // Copy src to dest |
mchheta | 15:a557a4c85e54 | 108 | ch = fgetc(fpsrc); // until src EOF read. |
mchheta | 15:a557a4c85e54 | 109 | if (ch == EOF) break; |
mchheta | 15:a557a4c85e54 | 110 | if(co==1)co++; |
mchheta | 15:a557a4c85e54 | 111 | else fputc(ch, fpdst); |
mchheta | 15:a557a4c85e54 | 112 | } |
mchheta | 15:a557a4c85e54 | 113 | fclose(fpsrc); |
mchheta | 15:a557a4c85e54 | 114 | fclose(fpdst); |
mchheta | 15:a557a4c85e54 | 115 | |
mchheta | 15:a557a4c85e54 | 116 | fpdst = fopen(dst, "r"); // Reopen dest to insure |
mchheta | 15:a557a4c85e54 | 117 | if(fpdst == NULL) { // that it was created. |
mchheta | 15:a557a4c85e54 | 118 | retval = (-1); // Return error. |
mchheta | 15:a557a4c85e54 | 119 | } |
mchheta | 15:a557a4c85e54 | 120 | else { |
mchheta | 15:a557a4c85e54 | 121 | fclose(fpdst); |
mchheta | 15:a557a4c85e54 | 122 | retval = (0); // Return success. |
mchheta | 15:a557a4c85e54 | 123 | } |
mchheta | 15:a557a4c85e54 | 124 | return (retval); |
mchheta | 15:a557a4c85e54 | 125 | } |
mchheta | 15:a557a4c85e54 | 126 | |
mchheta | 15:a557a4c85e54 | 127 | /* This function extracts essential information from SD Card Config file */ |
mchheta | 15:a557a4c85e54 | 128 | char readConfigText() |
mchheta | 15:a557a4c85e54 | 129 | { |
mchheta | 15:a557a4c85e54 | 130 | memset(buf, '\0', sizeof(buf)); |
mchheta | 15:a557a4c85e54 | 131 | t.start(); |
mchheta | 15:a557a4c85e54 | 132 | ended=0; |
mchheta | 15:a557a4c85e54 | 133 | bufcnt=0; |
mchheta | 15:a557a4c85e54 | 134 | lineCnt=0; |
mchheta | 15:a557a4c85e54 | 135 | prtCnt =0; |
mchheta | 15:a557a4c85e54 | 136 | while(true) { |
mchheta | 15:a557a4c85e54 | 137 | char C = fgetc(fp); |
mchheta | 15:a557a4c85e54 | 138 | //if(t.read() <= timeout) { |
mchheta | 15:a557a4c85e54 | 139 | buf[bufcnt] = C; |
mchheta | 15:a557a4c85e54 | 140 | bufcnt++; |
mchheta | 15:a557a4c85e54 | 141 | //printf(buf); |
mchheta | 15:a557a4c85e54 | 142 | if(feof(fp)){ |
mchheta | 15:a557a4c85e54 | 143 | break; |
mchheta | 15:a557a4c85e54 | 144 | } |
mchheta | 15:a557a4c85e54 | 145 | if(C == '\n'){ |
mchheta | 15:a557a4c85e54 | 146 | //buf[bufcnt] = '\0'; |
mchheta | 15:a557a4c85e54 | 147 | lineCnt++; |
mchheta | 15:a557a4c85e54 | 148 | strcpy(snd,buf); |
mchheta | 15:a557a4c85e54 | 149 | strcat(text,snd); |
mchheta | 15:a557a4c85e54 | 150 | if(buf[0]=='B'){ |
mchheta | 15:a557a4c85e54 | 151 | const char s[2] = ":"; |
mchheta | 15:a557a4c85e54 | 152 | char *token; |
mchheta | 15:a557a4c85e54 | 153 | |
mchheta | 15:a557a4c85e54 | 154 | /* get the first token */ |
mchheta | 15:a557a4c85e54 | 155 | token = strtok(buf, s); |
mchheta | 15:a557a4c85e54 | 156 | /* get the other tokens there*/ |
mchheta | 15:a557a4c85e54 | 157 | while( token != NULL ) { |
mchheta | 15:a557a4c85e54 | 158 | brdspCnt++; |
mchheta | 15:a557a4c85e54 | 159 | strcpy(Board_specs[brdspCnt],token); |
mchheta | 15:a557a4c85e54 | 160 | printf( " Boardspec[%d] = %s\r\n\n",brdspCnt, Board_specs[brdspCnt] ); |
mchheta | 15:a557a4c85e54 | 161 | |
mchheta | 15:a557a4c85e54 | 162 | token = strtok(NULL, s); |
mchheta | 15:a557a4c85e54 | 163 | } |
mchheta | 15:a557a4c85e54 | 164 | |
mchheta | 15:a557a4c85e54 | 165 | |
mchheta | 15:a557a4c85e54 | 166 | |
mchheta | 15:a557a4c85e54 | 167 | |
mchheta | 15:a557a4c85e54 | 168 | } |
mchheta | 15:a557a4c85e54 | 169 | else if(buf[0]=='P'){ |
mchheta | 15:a557a4c85e54 | 170 | prtCnt++; |
mchheta | 15:a557a4c85e54 | 171 | if (prtCnt<10){ |
mchheta | 15:a557a4c85e54 | 172 | Port_SensorID[prtCnt]=int(buf[9]-'0'); |
mchheta | 15:a557a4c85e54 | 173 | Port_Multiplier[prtCnt]= UnitConversion(Port_SensorID[prtCnt]); |
mchheta | 15:a557a4c85e54 | 174 | char *senStr = SensorName(Port_SensorID[prtCnt]); |
mchheta | 15:a557a4c85e54 | 175 | strcpy(Port_Description[prtCnt],senStr); |
mchheta | 15:a557a4c85e54 | 176 | |
mchheta | 15:a557a4c85e54 | 177 | printf("%d %0.2f %s\r\n",Port_SensorID[prtCnt],Port_Multiplier[prtCnt],Port_Description[prtCnt]); |
mchheta | 15:a557a4c85e54 | 178 | } |
mchheta | 15:a557a4c85e54 | 179 | else{ |
mchheta | 15:a557a4c85e54 | 180 | Port_SensorID[prtCnt]=int(buf[10]-'0'); |
mchheta | 15:a557a4c85e54 | 181 | Port_Multiplier[prtCnt]= UnitConversion(Port_SensorID[prtCnt]); |
mchheta | 15:a557a4c85e54 | 182 | char *senStr = SensorName(Port_SensorID[prtCnt]); |
mchheta | 15:a557a4c85e54 | 183 | strcpy(Port_Description[prtCnt],senStr); |
mchheta | 15:a557a4c85e54 | 184 | |
mchheta | 15:a557a4c85e54 | 185 | printf("%d %0.2f %s\r\n",Port_SensorID[prtCnt],Port_Multiplier[prtCnt],Port_Description[prtCnt]); |
mchheta | 15:a557a4c85e54 | 186 | } |
mchheta | 15:a557a4c85e54 | 187 | |
mchheta | 15:a557a4c85e54 | 188 | } |
mchheta | 15:a557a4c85e54 | 189 | //printf(text); |
mchheta | 15:a557a4c85e54 | 190 | memset(buf, '\0', sizeof(buf)); |
mchheta | 15:a557a4c85e54 | 191 | bufcnt = 0; |
mchheta | 15:a557a4c85e54 | 192 | } |
mchheta | 15:a557a4c85e54 | 193 | |
mchheta | 15:a557a4c85e54 | 194 | } |
mchheta | 15:a557a4c85e54 | 195 | |
mchheta | 15:a557a4c85e54 | 196 | printf("\r\n End of text file \r\n"); |
mchheta | 15:a557a4c85e54 | 197 | printf("\r\nLine Count %d\r\n",lineCnt); |
mchheta | 15:a557a4c85e54 | 198 | } |
mchheta | 15:a557a4c85e54 | 199 | |
mchheta | 15:a557a4c85e54 | 200 | /*This function returns the multiplying factor for sensor. It helps converting raw value to standard units. Sensor ID is available in SD Card */ |
mchheta | 15:a557a4c85e54 | 201 | |
mchheta | 15:a557a4c85e54 | 202 | float UnitConversion(int Sens_ID){ |
mchheta | 15:a557a4c85e54 | 203 | switch (Sens_ID){ |
mchheta | 15:a557a4c85e54 | 204 | case 0 : |
mchheta | 15:a557a4c85e54 | 205 | Multiplier = 0.0; |
mchheta | 15:a557a4c85e54 | 206 | break; |
mchheta | 15:a557a4c85e54 | 207 | case 1 : |
mchheta | 15:a557a4c85e54 | 208 | Multiplier = 2000.0; |
mchheta | 15:a557a4c85e54 | 209 | break; |
mchheta | 15:a557a4c85e54 | 210 | case 2 : |
mchheta | 15:a557a4c85e54 | 211 | Multiplier = 140; |
mchheta | 15:a557a4c85e54 | 212 | break; |
mchheta | 15:a557a4c85e54 | 213 | case 3 : |
mchheta | 15:a557a4c85e54 | 214 | Multiplier = 27.85; |
mchheta | 15:a557a4c85e54 | 215 | break; |
mchheta | 15:a557a4c85e54 | 216 | case 4 : |
mchheta | 15:a557a4c85e54 | 217 | Multiplier = 50.0; |
mchheta | 15:a557a4c85e54 | 218 | break; |
mchheta | 15:a557a4c85e54 | 219 | case 5 : |
mchheta | 15:a557a4c85e54 | 220 | Multiplier = 50.0; |
mchheta | 15:a557a4c85e54 | 221 | break; |
mchheta | 15:a557a4c85e54 | 222 | case 6 : |
mchheta | 15:a557a4c85e54 | 223 | Multiplier = 240.0; |
mchheta | 15:a557a4c85e54 | 224 | break; |
mchheta | 15:a557a4c85e54 | 225 | case 7 : |
mchheta | 15:a557a4c85e54 | 226 | Multiplier = 100.0; |
mchheta | 15:a557a4c85e54 | 227 | break; |
mchheta | 15:a557a4c85e54 | 228 | case 8 : |
mchheta | 15:a557a4c85e54 | 229 | Multiplier = 100; |
mchheta | 15:a557a4c85e54 | 230 | break; |
mchheta | 15:a557a4c85e54 | 231 | } |
mchheta | 15:a557a4c85e54 | 232 | return Multiplier; |
mchheta | 15:a557a4c85e54 | 233 | } |
mchheta | 15:a557a4c85e54 | 234 | |
mchheta | 15:a557a4c85e54 | 235 | /* This function returns name of the sensor based on Sensor ID */ |
mchheta | 15:a557a4c85e54 | 236 | char *SensorName(int Sens_ID){ |
mchheta | 15:a557a4c85e54 | 237 | |
mchheta | 15:a557a4c85e54 | 238 | static char *strng ; |
mchheta | 15:a557a4c85e54 | 239 | //memset(strng, '\0', sizeof(strng)); |
mchheta | 15:a557a4c85e54 | 240 | |
mchheta | 15:a557a4c85e54 | 241 | switch (Sens_ID){ |
mchheta | 15:a557a4c85e54 | 242 | case 0 : |
mchheta | 15:a557a4c85e54 | 243 | strng = "Null"; |
mchheta | 15:a557a4c85e54 | 244 | break; |
mchheta | 15:a557a4c85e54 | 245 | case 1 : |
mchheta | 15:a557a4c85e54 | 246 | strng = "Carbondioxide(ppm)"; |
mchheta | 15:a557a4c85e54 | 247 | break; |
mchheta | 15:a557a4c85e54 | 248 | case 2 : |
mchheta | 15:a557a4c85e54 | 249 | strng = "Current(0-100)Amps"; |
mchheta | 15:a557a4c85e54 | 250 | break; |
mchheta | 15:a557a4c85e54 | 251 | case 3 : |
mchheta | 15:a557a4c85e54 | 252 | strng = "Current(0-20)Amps"; |
mchheta | 15:a557a4c85e54 | 253 | break; |
mchheta | 15:a557a4c85e54 | 254 | case 4 : |
mchheta | 15:a557a4c85e54 | 255 | strng = "Temperature(0-50)Degree-Celsius"; |
mchheta | 15:a557a4c85e54 | 256 | break; |
mchheta | 15:a557a4c85e54 | 257 | case 5 : |
mchheta | 15:a557a4c85e54 | 258 | strng = "Temperature(0-50)Degree-Celsius"; |
mchheta | 15:a557a4c85e54 | 259 | break; |
mchheta | 15:a557a4c85e54 | 260 | case 6 : |
mchheta | 15:a557a4c85e54 | 261 | strng = "Pressure(PSIG)"; |
mchheta | 15:a557a4c85e54 | 262 | break; |
mchheta | 15:a557a4c85e54 | 263 | case 7 : |
mchheta | 15:a557a4c85e54 | 264 | strng = "Humidity(Percentage)"; |
mchheta | 15:a557a4c85e54 | 265 | break; |
mchheta | 15:a557a4c85e54 | 266 | case 8 : |
mchheta | 15:a557a4c85e54 | 267 | strng = "Compressed-Airflow(Percentage)"; |
mchheta | 15:a557a4c85e54 | 268 | break; |
mchheta | 15:a557a4c85e54 | 269 | } |
mchheta | 15:a557a4c85e54 | 270 | return strng; |
mchheta | 15:a557a4c85e54 | 271 | } |
mchheta | 15:a557a4c85e54 | 272 | |
mchheta | 15:a557a4c85e54 | 273 | /*This function is used to send command to Wi-Fi module. */ |
mchheta | 15:a557a4c85e54 | 274 | void SendCMD() |
mchheta | 15:a557a4c85e54 | 275 | { |
mchheta | 15:a557a4c85e54 | 276 | esp.printf("%s", snd); |
mchheta | 15:a557a4c85e54 | 277 | } |
unix_guru | 14:d71b1aa3c8bf | 278 | |
mchheta | 15:a557a4c85e54 | 279 | /*This function is used to receieve response from the Wi-Fi module */ |
mchheta | 15:a557a4c85e54 | 280 | void getreply() |
mchheta | 15:a557a4c85e54 | 281 | { |
mchheta | 15:a557a4c85e54 | 282 | memset(buf, '\0', sizeof(buf)); |
mchheta | 15:a557a4c85e54 | 283 | t.start(); |
mchheta | 15:a557a4c85e54 | 284 | ended=0; |
mchheta | 15:a557a4c85e54 | 285 | count=0; |
mchheta | 15:a557a4c85e54 | 286 | while(!ended) { |
mchheta | 15:a557a4c85e54 | 287 | if(esp.readable()) { |
mchheta | 15:a557a4c85e54 | 288 | buf[count] = esp.getc(); |
mchheta | 15:a557a4c85e54 | 289 | count++; |
mchheta | 15:a557a4c85e54 | 290 | } |
mchheta | 15:a557a4c85e54 | 291 | if(t.read() > timeout) { |
mchheta | 15:a557a4c85e54 | 292 | ended = 1; |
mchheta | 15:a557a4c85e54 | 293 | t.stop(); |
mchheta | 15:a557a4c85e54 | 294 | t.reset(); |
mchheta | 15:a557a4c85e54 | 295 | } |
mchheta | 15:a557a4c85e54 | 296 | } |
mchheta | 15:a557a4c85e54 | 297 | } |
mchheta | 15:a557a4c85e54 | 298 | |
mchheta | 15:a557a4c85e54 | 299 | /* This function is used to configure Wi-Fi module. It also connects to the internet */ |
mchheta | 15:a557a4c85e54 | 300 | void ESPconfig() |
mchheta | 15:a557a4c85e54 | 301 | { |
mchheta | 15:a557a4c85e54 | 302 | wait(1); |
mchheta | 15:a557a4c85e54 | 303 | strcpy(snd,"AT\r\n"); |
mchheta | 15:a557a4c85e54 | 304 | SendCMD(); |
mchheta | 15:a557a4c85e54 | 305 | wait(1); |
mchheta | 15:a557a4c85e54 | 306 | strcpy(snd,"AT\r\n"); |
mchheta | 15:a557a4c85e54 | 307 | SendCMD(); |
mchheta | 15:a557a4c85e54 | 308 | wait(1); |
mchheta | 15:a557a4c85e54 | 309 | strcpy(snd,"AT\r\n"); |
mchheta | 15:a557a4c85e54 | 310 | SendCMD(); |
mchheta | 15:a557a4c85e54 | 311 | timeout=1; |
mchheta | 15:a557a4c85e54 | 312 | getreply(); |
mchheta | 15:a557a4c85e54 | 313 | wait(1); |
mchheta | 15:a557a4c85e54 | 314 | pc.printf("\f---------- Starting ESP Config ----------\r\n\n"); |
mchheta | 15:a557a4c85e54 | 315 | |
mchheta | 15:a557a4c85e54 | 316 | pc.printf("---------- Reset & get Firmware ----------\r\n"); |
mchheta | 15:a557a4c85e54 | 317 | strcpy(snd,"AT+RST\r\n"); |
mchheta | 15:a557a4c85e54 | 318 | SendCMD(); |
mchheta | 15:a557a4c85e54 | 319 | timeout=5; |
mchheta | 15:a557a4c85e54 | 320 | getreply(); |
mchheta | 15:a557a4c85e54 | 321 | pc.printf(buf); |
mchheta | 15:a557a4c85e54 | 322 | |
mchheta | 15:a557a4c85e54 | 323 | wait(1); |
mchheta | 15:a557a4c85e54 | 324 | |
mchheta | 15:a557a4c85e54 | 325 | pc.printf("\n---------- Get Version ----------\r\n"); |
mchheta | 15:a557a4c85e54 | 326 | strcpy(snd,"AT+GMR\r\n"); |
mchheta | 15:a557a4c85e54 | 327 | SendCMD(); |
mchheta | 15:a557a4c85e54 | 328 | timeout=4; |
mchheta | 15:a557a4c85e54 | 329 | getreply(); |
mchheta | 15:a557a4c85e54 | 330 | pc.printf(buf); |
mchheta | 15:a557a4c85e54 | 331 | |
mchheta | 15:a557a4c85e54 | 332 | wait(1); |
mchheta | 15:a557a4c85e54 | 333 | |
mchheta | 15:a557a4c85e54 | 334 | // set CWMODE to 1=Station,2=AP,3=BOTH, default mode 1 (Station) |
mchheta | 15:a557a4c85e54 | 335 | pc.printf("\n---------- Setting Mode ----------\r\n"); |
mchheta | 15:a557a4c85e54 | 336 | strcpy(snd, "AT+CWMODE=1\r\n"); |
mchheta | 15:a557a4c85e54 | 337 | SendCMD(); |
mchheta | 15:a557a4c85e54 | 338 | timeout=4; |
mchheta | 15:a557a4c85e54 | 339 | getreply(); |
mchheta | 15:a557a4c85e54 | 340 | //getEspReply(); |
mchheta | 15:a557a4c85e54 | 341 | pc.printf(buf); |
mchheta | 15:a557a4c85e54 | 342 | |
mchheta | 15:a557a4c85e54 | 343 | wait(2); |
mchheta | 15:a557a4c85e54 | 344 | |
mchheta | 15:a557a4c85e54 | 345 | // set CIPMUX to 0=Single,1=Multi |
mchheta | 15:a557a4c85e54 | 346 | pc.printf("\n---------- Setting Connection Mode ----------\r\n"); |
mchheta | 15:a557a4c85e54 | 347 | strcpy(snd, "AT+CIPMUX=1\r\n"); |
mchheta | 15:a557a4c85e54 | 348 | SendCMD(); |
mchheta | 15:a557a4c85e54 | 349 | timeout=4; |
mchheta | 15:a557a4c85e54 | 350 | getreply(); |
mchheta | 15:a557a4c85e54 | 351 | //getEspReply(); |
mchheta | 15:a557a4c85e54 | 352 | pc.printf(buf); |
mchheta | 15:a557a4c85e54 | 353 | |
mchheta | 15:a557a4c85e54 | 354 | wait(2); |
mchheta | 15:a557a4c85e54 | 355 | |
mchheta | 15:a557a4c85e54 | 356 | /*pc.printf("\n---------- Listing Access Points ----------\r\n"); |
mchheta | 15:a557a4c85e54 | 357 | strcpy(snd, "AT+CWLAP\r\n"); |
mchheta | 15:a557a4c85e54 | 358 | SendCMD(); |
mchheta | 15:a557a4c85e54 | 359 | timeout=15; |
mchheta | 15:a557a4c85e54 | 360 | getreply(); |
mchheta | 15:a557a4c85e54 | 361 | pc.printf(buf); |
mchheta | 15:a557a4c85e54 | 362 | |
mchheta | 15:a557a4c85e54 | 363 | wait(2);*/ |
mchheta | 15:a557a4c85e54 | 364 | |
mchheta | 15:a557a4c85e54 | 365 | pc.printf("\n---------- Connecting to AP ----------\r\n"); |
mchheta | 15:a557a4c85e54 | 366 | pc.printf("ssid = %s pwd = %s\r\n",Board_specs[2],Board_specs[3]);//,ssid,pwd); |
mchheta | 15:a557a4c85e54 | 367 | strcpy(snd, "AT+CWJAP=\""); |
mchheta | 15:a557a4c85e54 | 368 | strcat(snd, Board_specs[2]); |
mchheta | 15:a557a4c85e54 | 369 | strcat(snd, "\",\"");/* Here (\") denotes inverted commas in strings */ |
mchheta | 15:a557a4c85e54 | 370 | strcat(snd, Board_specs[3]); |
mchheta | 15:a557a4c85e54 | 371 | strcat(snd, "\"\r\n"); |
mchheta | 15:a557a4c85e54 | 372 | pc.printf(snd); |
mchheta | 15:a557a4c85e54 | 373 | SendCMD(); |
mchheta | 15:a557a4c85e54 | 374 | timeout=10; |
mchheta | 15:a557a4c85e54 | 375 | getreply(); |
mchheta | 15:a557a4c85e54 | 376 | //getEspReply(); |
mchheta | 15:a557a4c85e54 | 377 | pc.printf(buf); |
mchheta | 15:a557a4c85e54 | 378 | |
mchheta | 15:a557a4c85e54 | 379 | |
mchheta | 15:a557a4c85e54 | 380 | wait(5); |
mchheta | 15:a557a4c85e54 | 381 | |
mchheta | 15:a557a4c85e54 | 382 | pc.printf("\n---------- Get IP's ----------\r\n"); |
mchheta | 15:a557a4c85e54 | 383 | strcpy(snd, "AT+CIFSR\r\n"); |
mchheta | 15:a557a4c85e54 | 384 | SendCMD(); |
mchheta | 15:a557a4c85e54 | 385 | timeout=3; |
mchheta | 15:a557a4c85e54 | 386 | getreply(); |
mchheta | 15:a557a4c85e54 | 387 | pc.printf(buf); |
mchheta | 15:a557a4c85e54 | 388 | memset(text, '\0', sizeof(text)); |
mchheta | 15:a557a4c85e54 | 389 | strcpy(text,buf); |
mchheta | 15:a557a4c85e54 | 390 | //const char s[2] = ","; |
mchheta | 15:a557a4c85e54 | 391 | char *token2; |
mchheta | 15:a557a4c85e54 | 392 | |
mchheta | 15:a557a4c85e54 | 393 | /* get the first token */ |
mchheta | 15:a557a4c85e54 | 394 | token2 = strtok(text, "\""); |
mchheta | 15:a557a4c85e54 | 395 | token2 = strtok(NULL, "\""); |
mchheta | 15:a557a4c85e54 | 396 | strcpy(wifiIP,token2); |
mchheta | 15:a557a4c85e54 | 397 | //token2 = strtok(NULL, "\""); |
mchheta | 15:a557a4c85e54 | 398 | pc.printf("\n\n%s\n\n",wifiIP); |
mchheta | 15:a557a4c85e54 | 399 | //const char* ipData = string(buf); |
mchheta | 15:a557a4c85e54 | 400 | //const char* msg="Hello World!"; |
mchheta | 15:a557a4c85e54 | 401 | //pc.printf(ipData); |
mchheta | 15:a557a4c85e54 | 402 | |
mchheta | 15:a557a4c85e54 | 403 | wait(1); |
mchheta | 15:a557a4c85e54 | 404 | |
mchheta | 15:a557a4c85e54 | 405 | pc.printf("\n---------- Get Connection Status ----------\r\n"); |
mchheta | 15:a557a4c85e54 | 406 | strcpy(snd, "AT+CIPSTATUS\r\n"); |
mchheta | 15:a557a4c85e54 | 407 | SendCMD(); |
mchheta | 15:a557a4c85e54 | 408 | timeout=5; |
mchheta | 15:a557a4c85e54 | 409 | //getEspReply(); |
mchheta | 15:a557a4c85e54 | 410 | getreply(); |
mchheta | 15:a557a4c85e54 | 411 | pc.printf(buf); |
WiredHome | 0:037b95a5cc85 | 412 | |
mchheta | 15:a557a4c85e54 | 413 | pc.printf("\n\n\n If you get a valid (non zero) IP, ESP8266 has been set up.\r\n"); |
mchheta | 15:a557a4c85e54 | 414 | pc.printf(" Run this if you want to reconfig the ESP8266 at any time.\r\n"); |
mchheta | 15:a557a4c85e54 | 415 | pc.printf(" It saves the SSID and password settings internally\r\n"); |
mchheta | 15:a557a4c85e54 | 416 | wait(1); |
mchheta | 15:a557a4c85e54 | 417 | TCP_Boardspecs(); |
mchheta | 15:a557a4c85e54 | 418 | } |
mchheta | 15:a557a4c85e54 | 419 | void reconnect() |
mchheta | 15:a557a4c85e54 | 420 | { |
mchheta | 15:a557a4c85e54 | 421 | pc.printf("\n---------- Connecting to AP ----------\r\n"); |
mchheta | 15:a557a4c85e54 | 422 | pc.printf("ssid = %s pwd = %s\r\n",Board_specs[2],Board_specs[3]);//,ssid,pwd); |
mchheta | 15:a557a4c85e54 | 423 | strcpy(snd, "AT+CWJAP=\""); |
mchheta | 15:a557a4c85e54 | 424 | strcat(snd, Board_specs[2]); |
mchheta | 15:a557a4c85e54 | 425 | strcat(snd, "\",\"");/* Here (\") denotes inverted commas in strings */ |
mchheta | 15:a557a4c85e54 | 426 | strcat(snd, Board_specs[3]); |
mchheta | 15:a557a4c85e54 | 427 | strcat(snd, "\"\r\n"); |
mchheta | 15:a557a4c85e54 | 428 | pc.printf(snd); |
mchheta | 15:a557a4c85e54 | 429 | SendCMD(); |
mchheta | 15:a557a4c85e54 | 430 | timeout=1; |
mchheta | 15:a557a4c85e54 | 431 | getreply(); |
mchheta | 15:a557a4c85e54 | 432 | //getEspReply(); |
mchheta | 15:a557a4c85e54 | 433 | pc.printf(buf); |
mchheta | 15:a557a4c85e54 | 434 | } |
mchheta | 15:a557a4c85e54 | 435 | |
mchheta | 15:a557a4c85e54 | 436 | |
mchheta | 15:a557a4c85e54 | 437 | /* This function sends information to the server. The information consits of which sensor is connected to each port, board_id and Boot time */ |
mchheta | 15:a557a4c85e54 | 438 | void TCP_Boardspecs(){ |
mchheta | 15:a557a4c85e54 | 439 | |
mchheta | 15:a557a4c85e54 | 440 | pc.printf("\n---------- Start TCP_IP Connection with WAMP ----------\r\n"); |
mchheta | 15:a557a4c85e54 | 441 | strcpy(snd, "AT+CIPSTART=4,\"TCP\",\"134.68.70.220\",80\r\n"); |
mchheta | 15:a557a4c85e54 | 442 | //strcpy(snd, "AT+CIPSTART=4,\"TCP\",\"192.168.1.2\",8181\r\n"); |
mchheta | 15:a557a4c85e54 | 443 | SendCMD(); |
mchheta | 15:a557a4c85e54 | 444 | timeout=0.5; |
mchheta | 15:a557a4c85e54 | 445 | getreply(); |
mchheta | 15:a557a4c85e54 | 446 | pc.printf(buf); |
mchheta | 15:a557a4c85e54 | 447 | |
mchheta | 15:a557a4c85e54 | 448 | //wait(); |
mchheta | 15:a557a4c85e54 | 449 | |
mchheta | 15:a557a4c85e54 | 450 | |
mchheta | 15:a557a4c85e54 | 451 | |
mchheta | 15:a557a4c85e54 | 452 | pc.printf("\n---------- Set TCP Data frame ----------\r\n"); |
mchheta | 15:a557a4c85e54 | 453 | memset(text, '\0', sizeof(text)); |
mchheta | 15:a557a4c85e54 | 454 | sprintf(text, "GET /IAC_BoardSpecs_DataLoad.php?boardId=IAC_%s&wifiIP=%s&Port1Sensor=%s&Port2Sensor=%s&Port3Sensor=%s&Port4Sensor=%s&Port5Sensor=%s&Port6Sensor=%s&Port7Sensor=%s&Port8Sensor=%s&Port9Sensor=%s&Port10Sensor=%s\r\n",Board_specs[1],wifiIP,Port_Description[1],Port_Description[2],Port_Description[3],Port_Description[4],Port_Description[5],Port_Description[6],Port_Description[7],Port_Description[8],Port_Description[9],Port_Description[10]); |
mchheta | 15:a557a4c85e54 | 455 | int sz = strlen(text); |
mchheta | 15:a557a4c85e54 | 456 | pc.printf("\n\n%d\r\n",sz); |
mchheta | 15:a557a4c85e54 | 457 | sprintf(snd, "AT+CIPSEND=4,%d\r\n",sz); |
mchheta | 15:a557a4c85e54 | 458 | //strcpy(snd, "AT+CIPSTART=4,\"TCP\",\"184.106.153.149\",80\r\n") |
mchheta | 15:a557a4c85e54 | 459 | SendCMD(); |
mchheta | 15:a557a4c85e54 | 460 | timeout=0.5; |
mchheta | 15:a557a4c85e54 | 461 | getreply(); |
mchheta | 15:a557a4c85e54 | 462 | pc.printf(buf); |
mchheta | 15:a557a4c85e54 | 463 | |
mchheta | 15:a557a4c85e54 | 464 | |
mchheta | 15:a557a4c85e54 | 465 | //wait(0.5); |
mchheta | 15:a557a4c85e54 | 466 | |
mchheta | 15:a557a4c85e54 | 467 | pc.printf("\n---------- Send Data frame ----------\r\n"); |
mchheta | 15:a557a4c85e54 | 468 | |
mchheta | 15:a557a4c85e54 | 469 | strcpy(snd,text); |
mchheta | 15:a557a4c85e54 | 470 | pc.printf(snd); |
mchheta | 15:a557a4c85e54 | 471 | |
mchheta | 15:a557a4c85e54 | 472 | SendCMD(); |
mchheta | 15:a557a4c85e54 | 473 | timeout=0.5; |
mchheta | 15:a557a4c85e54 | 474 | getreply(); |
mchheta | 15:a557a4c85e54 | 475 | pc.printf(buf); |
mchheta | 15:a557a4c85e54 | 476 | |
mchheta | 15:a557a4c85e54 | 477 | |
mchheta | 15:a557a4c85e54 | 478 | //wait(1); |
mchheta | 15:a557a4c85e54 | 479 | |
mchheta | 15:a557a4c85e54 | 480 | pc.printf("\n---------- Close TCP/IP Connection ----------\r\n"); |
mchheta | 15:a557a4c85e54 | 481 | strcpy(snd, "AT+CIPCLOSE=5\r\n"); |
mchheta | 15:a557a4c85e54 | 482 | SendCMD(); |
mchheta | 15:a557a4c85e54 | 483 | timeout=0.1; |
mchheta | 15:a557a4c85e54 | 484 | getreply(); |
mchheta | 15:a557a4c85e54 | 485 | pc.printf(buf); |
mchheta | 15:a557a4c85e54 | 486 | |
mchheta | 15:a557a4c85e54 | 487 | //wait(2); |
mchheta | 15:a557a4c85e54 | 488 | |
mchheta | 15:a557a4c85e54 | 489 | |
mchheta | 15:a557a4c85e54 | 490 | } |
mchheta | 15:a557a4c85e54 | 491 | |
mchheta | 15:a557a4c85e54 | 492 | /*This function sends sensor data to the server. Once the sensor data is read, this function is used to send the data to the server */ |
mchheta | 15:a557a4c85e54 | 493 | void TCP_DataSend(){ |
mchheta | 15:a557a4c85e54 | 494 | |
mchheta | 15:a557a4c85e54 | 495 | char buffer[32]; |
mchheta | 15:a557a4c85e54 | 496 | pc.printf("\n---------- Start TCP_IP Connection with WAMP ----------\r\n"); |
mchheta | 15:a557a4c85e54 | 497 | strcpy(snd, "AT+CIPSTART=4,\"TCP\",\"134.68.70.220\",80\r\n"); |
mchheta | 15:a557a4c85e54 | 498 | SendCMD(); |
mchheta | 15:a557a4c85e54 | 499 | timeout=0.1; |
mchheta | 15:a557a4c85e54 | 500 | getreply(); |
mchheta | 15:a557a4c85e54 | 501 | pc.printf(buf); |
mchheta | 15:a557a4c85e54 | 502 | pc.printf("\n---------- Set TCP Data frame ----------\r\n"); |
mchheta | 15:a557a4c85e54 | 503 | memset(text, '\0', sizeof(text)); |
mchheta | 15:a557a4c85e54 | 504 | |
mchheta | 15:a557a4c85e54 | 505 | |
mchheta | 15:a557a4c85e54 | 506 | |
mchheta | 15:a557a4c85e54 | 507 | sprintf(text, "GET /Sensor_readings.php?Board_ID=IAC_%s&Port_ID=%s&Value=%0.2f&MCTime=%u\r\n", Board_specs[1], port[port_number], port_value,(unsigned int)seconds); |
mchheta | 15:a557a4c85e54 | 508 | int sz1 = strlen(text); |
mchheta | 15:a557a4c85e54 | 509 | pc.printf("\n\n%d\r\n",sz1); |
mchheta | 15:a557a4c85e54 | 510 | sprintf(snd, "AT+CIPSEND=4,%d\r\n",sz1); |
mchheta | 15:a557a4c85e54 | 511 | SendCMD(); |
mchheta | 15:a557a4c85e54 | 512 | pc.printf("\r \n\nGetting Reply\n\r\n"); |
mchheta | 15:a557a4c85e54 | 513 | timeout=0.1; |
mchheta | 15:a557a4c85e54 | 514 | getreply(); |
mchheta | 15:a557a4c85e54 | 515 | pc.printf(buf); |
mchheta | 15:a557a4c85e54 | 516 | |
mchheta | 15:a557a4c85e54 | 517 | pc.printf("\n---------- Send Data frame ----------\r\n"); |
mchheta | 15:a557a4c85e54 | 518 | strcpy(snd,text); |
mchheta | 15:a557a4c85e54 | 519 | pc.printf(snd); |
mchheta | 15:a557a4c85e54 | 520 | pc.printf("\n\n Getting Reply\n\r\n"); |
mchheta | 15:a557a4c85e54 | 521 | SendCMD(); |
mchheta | 15:a557a4c85e54 | 522 | timeout=0.2; |
mchheta | 15:a557a4c85e54 | 523 | getreply(); |
mchheta | 15:a557a4c85e54 | 524 | pc.printf(buf); |
mchheta | 15:a557a4c85e54 | 525 | |
mchheta | 15:a557a4c85e54 | 526 | /*If the response from wi-fi module is an error, the sensor data is stored as backup data in SD card. It also attempts to reconnect to the server */ |
mchheta | 15:a557a4c85e54 | 527 | if(strstr(buf,"ERROR")!=0 ||strstr(buf,"busy")!=0 || strstr(buf,"404 Not Found")!=0) |
mchheta | 15:a557a4c85e54 | 528 | { |
mchheta | 15:a557a4c85e54 | 529 | Backup(snd); |
mchheta | 15:a557a4c85e54 | 530 | //ESPconfig(); |
mchheta | 15:a557a4c85e54 | 531 | reconnect(); |
mchheta | 15:a557a4c85e54 | 532 | } |
mchheta | 15:a557a4c85e54 | 533 | |
mchheta | 15:a557a4c85e54 | 534 | /*Based on the server response, actuation of relay is done here */ |
mchheta | 15:a557a4c85e54 | 535 | if(strstr(buf,"Relay 1=on")!=0) |
mchheta | 15:a557a4c85e54 | 536 | Relay1=1; |
mchheta | 15:a557a4c85e54 | 537 | else if(strstr(buf,"Relay 1=off")!=0) |
mchheta | 15:a557a4c85e54 | 538 | Relay1=0; |
mchheta | 15:a557a4c85e54 | 539 | |
mchheta | 15:a557a4c85e54 | 540 | if(strstr(buf,"Relay 2=on")!=0) |
mchheta | 15:a557a4c85e54 | 541 | Relay2=1; |
mchheta | 15:a557a4c85e54 | 542 | else if(strstr(buf,"Relay 2=off")!=0) |
mchheta | 15:a557a4c85e54 | 543 | Relay2=0; |
mchheta | 15:a557a4c85e54 | 544 | |
mchheta | 15:a557a4c85e54 | 545 | if(strstr(buf,"Relay 3=on")!=0) |
mchheta | 15:a557a4c85e54 | 546 | Relay3=1; |
mchheta | 15:a557a4c85e54 | 547 | else if(strstr(buf,"Relay 3=off")!=0) |
mchheta | 15:a557a4c85e54 | 548 | Relay3=0; |
mchheta | 15:a557a4c85e54 | 549 | |
mchheta | 15:a557a4c85e54 | 550 | if(strstr(buf,"Relay 4=on")!=0) |
mchheta | 15:a557a4c85e54 | 551 | Relay4=1; |
mchheta | 15:a557a4c85e54 | 552 | else if(strstr(buf,"Relay 4=off")!=0) |
mchheta | 15:a557a4c85e54 | 553 | Relay4=0; |
mchheta | 15:a557a4c85e54 | 554 | |
mchheta | 15:a557a4c85e54 | 555 | /* get the first token */ |
mchheta | 15:a557a4c85e54 | 556 | |
mchheta | 15:a557a4c85e54 | 557 | |
mchheta | 15:a557a4c85e54 | 558 | //wait(1); |
mchheta | 15:a557a4c85e54 | 559 | |
mchheta | 15:a557a4c85e54 | 560 | pc.printf("\n---------- Close TCP/IP Connection ----------\r\n"); |
mchheta | 15:a557a4c85e54 | 561 | strcpy(snd, "AT+CIPCLOSE=5\r\n"); |
mchheta | 15:a557a4c85e54 | 562 | SendCMD(); |
mchheta | 15:a557a4c85e54 | 563 | timeout=0.1; |
mchheta | 15:a557a4c85e54 | 564 | //getreply(); |
mchheta | 15:a557a4c85e54 | 565 | pc.printf(buf); |
mchheta | 15:a557a4c85e54 | 566 | |
mchheta | 15:a557a4c85e54 | 567 | /*If the response from the server is as expected, the command attempts to send backup data from the SD Card */ |
mchheta | 15:a557a4c85e54 | 568 | if(strstr(buf,"Relay")!=0) |
mchheta | 15:a557a4c85e54 | 569 | { |
mchheta | 15:a557a4c85e54 | 570 | //for(int i=0;i<10;i++) |
mchheta | 15:a557a4c85e54 | 571 | //{ |
mchheta | 15:a557a4c85e54 | 572 | SendBackupData(); |
mchheta | 15:a557a4c85e54 | 573 | //} |
mchheta | 15:a557a4c85e54 | 574 | } |
mchheta | 15:a557a4c85e54 | 575 | } |
unix_guru | 13:3f6204d6140a | 576 | |
unix_guru | 13:3f6204d6140a | 577 | |
unix_guru | 13:3f6204d6140a | 578 | |
mchheta | 15:a557a4c85e54 | 579 | /*This function is used to extract particular information from string. For example, information enclosed between < and > symbol will be extracted into a string */ |
mchheta | 15:a557a4c85e54 | 580 | std::string extract(const std::string& str, char beg, char end) |
mchheta | 15:a557a4c85e54 | 581 | { |
mchheta | 15:a557a4c85e54 | 582 | std::size_t begPos ; |
mchheta | 15:a557a4c85e54 | 583 | if ( (begPos = str.find(beg)) != std::string::npos ) |
mchheta | 15:a557a4c85e54 | 584 | { |
mchheta | 15:a557a4c85e54 | 585 | std::size_t endPos ; |
mchheta | 15:a557a4c85e54 | 586 | if ( (endPos = str.find(end, begPos)) != std::string::npos && endPos != begPos+1 ) |
mchheta | 15:a557a4c85e54 | 587 | return str.substr(begPos+1, endPos-begPos-1) ; |
mchheta | 15:a557a4c85e54 | 588 | } |
unix_guru | 13:3f6204d6140a | 589 | |
mchheta | 15:a557a4c85e54 | 590 | return std::string() ; |
mchheta | 15:a557a4c85e54 | 591 | } |
mchheta | 15:a557a4c85e54 | 592 | |
mchheta | 15:a557a4c85e54 | 593 | /*This function is used to retrieve current time from the web */ |
mchheta | 15:a557a4c85e54 | 594 | int retriveTime() |
mchheta | 15:a557a4c85e54 | 595 | { |
mchheta | 15:a557a4c85e54 | 596 | |
mchheta | 15:a557a4c85e54 | 597 | pc.printf("\n---------- Start TCP_IP Connection with WAMP ----------\r\n"); |
mchheta | 15:a557a4c85e54 | 598 | strcpy(snd, "AT+CIPSTART=4,\"TCP\",\"134.68.70.220\",80\r\n"); |
mchheta | 15:a557a4c85e54 | 599 | SendCMD(); |
mchheta | 15:a557a4c85e54 | 600 | timeout=0.5; |
mchheta | 15:a557a4c85e54 | 601 | getreply(); |
mchheta | 15:a557a4c85e54 | 602 | pc.printf(buf); |
WiredHome | 0:037b95a5cc85 | 603 | |
mchheta | 15:a557a4c85e54 | 604 | //wait(); |
mchheta | 15:a557a4c85e54 | 605 | |
mchheta | 15:a557a4c85e54 | 606 | |
mchheta | 15:a557a4c85e54 | 607 | |
mchheta | 15:a557a4c85e54 | 608 | pc.printf("\n---------- Set TCP Data frame ----------\r\n"); |
mchheta | 15:a557a4c85e54 | 609 | memset(text, '\0', sizeof(text)); |
mchheta | 15:a557a4c85e54 | 610 | //sprintf(text, "GET /test1.php?\r\n"); |
mchheta | 15:a557a4c85e54 | 611 | sprintf(text, "GET /TimeQuery.php?\r\n"); |
mchheta | 15:a557a4c85e54 | 612 | int sz = strlen(text); |
mchheta | 15:a557a4c85e54 | 613 | pc.printf("\n\n%d\r\n",sz); |
mchheta | 15:a557a4c85e54 | 614 | sprintf(snd, "AT+CIPSEND=4,%d\r\n",sz); |
mchheta | 15:a557a4c85e54 | 615 | //strcpy(snd, "AT+CIPSTART=4,\"TCP\",\"184.106.153.149\",80\r\n") |
mchheta | 15:a557a4c85e54 | 616 | SendCMD(); |
mchheta | 15:a557a4c85e54 | 617 | timeout=0.5; |
mchheta | 15:a557a4c85e54 | 618 | getreply(); |
mchheta | 15:a557a4c85e54 | 619 | pc.printf(buf); |
mchheta | 15:a557a4c85e54 | 620 | |
mchheta | 15:a557a4c85e54 | 621 | |
mchheta | 15:a557a4c85e54 | 622 | pc.printf("\n---------- Send Data frame ----------\r\n"); |
mchheta | 15:a557a4c85e54 | 623 | |
mchheta | 15:a557a4c85e54 | 624 | strcpy(snd,text); |
mchheta | 15:a557a4c85e54 | 625 | pc.printf(snd); |
mchheta | 15:a557a4c85e54 | 626 | |
mchheta | 15:a557a4c85e54 | 627 | SendCMD(); |
mchheta | 15:a557a4c85e54 | 628 | timeout=0.5; |
mchheta | 15:a557a4c85e54 | 629 | getreply(); |
mchheta | 15:a557a4c85e54 | 630 | pc.printf("Start"); |
mchheta | 15:a557a4c85e54 | 631 | |
mchheta | 15:a557a4c85e54 | 632 | |
mchheta | 15:a557a4c85e54 | 633 | pc.printf(buf); |
mchheta | 15:a557a4c85e54 | 634 | pc.printf("End"); |
mchheta | 15:a557a4c85e54 | 635 | |
mchheta | 15:a557a4c85e54 | 636 | string time = extract(buf,'>','<'); |
mchheta | 15:a557a4c85e54 | 637 | int rTime = atoi(time.c_str()); |
mchheta | 15:a557a4c85e54 | 638 | //int rtime = stoi(time); |
mchheta | 15:a557a4c85e54 | 639 | pc.printf("Time = %d",rTime); |
mchheta | 15:a557a4c85e54 | 640 | pc.printf("\n---------- Close TCP/IP Connection ----------\r\n"); |
mchheta | 15:a557a4c85e54 | 641 | strcpy(snd, "AT+CIPCLOSE=5\r\n"); |
unix_guru | 14:d71b1aa3c8bf | 642 | |
mchheta | 15:a557a4c85e54 | 643 | SendCMD(); |
mchheta | 15:a557a4c85e54 | 644 | timeout=0.5; |
mchheta | 15:a557a4c85e54 | 645 | getreply(); |
mchheta | 15:a557a4c85e54 | 646 | pc.printf(buf); |
mchheta | 15:a557a4c85e54 | 647 | return rTime; |
unix_guru | 14:d71b1aa3c8bf | 648 | } |
mchheta | 15:a557a4c85e54 | 649 | |
mchheta | 15:a557a4c85e54 | 650 | /*This function is responsible to open TCP/IP connection and send the backup data to server */ |
mchheta | 15:a557a4c85e54 | 651 | void Senddta(char bckp[]) |
unix_guru | 14:d71b1aa3c8bf | 652 | { |
mchheta | 15:a557a4c85e54 | 653 | if(strlen(bckp)>1){ |
mchheta | 15:a557a4c85e54 | 654 | pc.printf("\n---------- Start TCP_IP Connection with WAMP ----------\r\n"); |
mchheta | 15:a557a4c85e54 | 655 | strcpy(snd, "AT+CIPSTART=4,\"TCP\",\"134.68.70.220\",80\r\n"); |
mchheta | 15:a557a4c85e54 | 656 | //strcpy(snd, "AT+CIPSTART=4,\"TCP\",\"149.165.231.70\",8660\r\n"); |
mchheta | 15:a557a4c85e54 | 657 | SendCMD(); |
mchheta | 15:a557a4c85e54 | 658 | timeout=0.1; |
mchheta | 15:a557a4c85e54 | 659 | getreply(); |
mchheta | 15:a557a4c85e54 | 660 | pc.printf(buf); |
mchheta | 15:a557a4c85e54 | 661 | pc.printf("\n---------- Set TCP Data frame ----------\r\n"); |
mchheta | 15:a557a4c85e54 | 662 | memset(text, '\0', sizeof(text)); |
mchheta | 15:a557a4c85e54 | 663 | |
mchheta | 15:a557a4c85e54 | 664 | char buffer[32]; |
mchheta | 15:a557a4c85e54 | 665 | //strftime(buffer, 32,"%Y%m%d%H%M%S\n", localtime(&seconds)); |
mchheta | 15:a557a4c85e54 | 666 | //strftime(buffer, 32,"%s\n", localtime(&seconds)); |
mchheta | 15:a557a4c85e54 | 667 | //printf("Time as a custom formatted string = %s", buffer); |
mchheta | 15:a557a4c85e54 | 668 | sprintf(text, bckp); |
mchheta | 15:a557a4c85e54 | 669 | int sz1 = strlen(text); |
mchheta | 15:a557a4c85e54 | 670 | pc.printf("\n\n%d\r\n",sz1); |
mchheta | 15:a557a4c85e54 | 671 | sprintf(snd, "AT+CIPSEND=4,%d\r\n",sz1); |
mchheta | 15:a557a4c85e54 | 672 | SendCMD(); |
mchheta | 15:a557a4c85e54 | 673 | pc.printf("\r \n\nGetting Reply\n\r\n"); |
mchheta | 15:a557a4c85e54 | 674 | timeout=0.2; |
mchheta | 15:a557a4c85e54 | 675 | getreply(); |
mchheta | 15:a557a4c85e54 | 676 | pc.printf(buf); |
mchheta | 15:a557a4c85e54 | 677 | pc.printf("\n---------- Send Backup Data frame ----------\r\n"); |
mchheta | 15:a557a4c85e54 | 678 | strcpy(snd,bckp); |
mchheta | 15:a557a4c85e54 | 679 | pc.printf(snd); |
mchheta | 15:a557a4c85e54 | 680 | pc.printf("\n\n Getting Reply\n\r\n"); |
mchheta | 15:a557a4c85e54 | 681 | SendCMD(); |
mchheta | 15:a557a4c85e54 | 682 | timeout=0.1; |
mchheta | 15:a557a4c85e54 | 683 | getreply(); |
mchheta | 15:a557a4c85e54 | 684 | pc.printf(buf); |
mchheta | 15:a557a4c85e54 | 685 | } |
mchheta | 15:a557a4c85e54 | 686 | //else |
mchheta | 15:a557a4c85e54 | 687 | //wait(0.15); |
mchheta | 15:a557a4c85e54 | 688 | } |
mchheta | 15:a557a4c85e54 | 689 | |
mchheta | 15:a557a4c85e54 | 690 | /*In case the firmware is unable to send data to the server, this function stores data into SD Card */ |
mchheta | 15:a557a4c85e54 | 691 | void Backup(char text[]) |
mchheta | 15:a557a4c85e54 | 692 | { fclose(fp); |
mchheta | 15:a557a4c85e54 | 693 | pc.printf("Appending data to data file \r\n"); |
mchheta | 15:a557a4c85e54 | 694 | //fp = fopen("/sd/Backup.txt", "a"); |
mchheta | 15:a557a4c85e54 | 695 | if((fp=fopen("/sd/Backup.txt","a")) == NULL){ |
mchheta | 15:a557a4c85e54 | 696 | pc.printf("Could not open file"); |
mchheta | 15:a557a4c85e54 | 697 | fclose(fp); |
mchheta | 15:a557a4c85e54 | 698 | fp=fopen("/sd/Backup.txt","w"); |
mchheta | 15:a557a4c85e54 | 699 | fclose(fp); |
mchheta | 15:a557a4c85e54 | 700 | } |
mchheta | 15:a557a4c85e54 | 701 | fclose(fp); |
mchheta | 15:a557a4c85e54 | 702 | fp = fopen("/sd/Backup.txt", "a"); |
mchheta | 15:a557a4c85e54 | 703 | fprintf(fp, "%s", text); |
mchheta | 15:a557a4c85e54 | 704 | pc.printf("\n\n%s\n\n", text); |
mchheta | 15:a557a4c85e54 | 705 | //fputc('\n', fp); |
mchheta | 15:a557a4c85e54 | 706 | fclose(fp); |
mchheta | 15:a557a4c85e54 | 707 | wait(0.5); |
unix_guru | 14:d71b1aa3c8bf | 708 | } |
mchheta | 15:a557a4c85e54 | 709 | |
mchheta | 15:a557a4c85e54 | 710 | /*This function extracts data from backup file in SD Card. It passes data Senddta function which opens TCP/IP connection and sends data to server. |
mchheta | 15:a557a4c85e54 | 711 | Once data is sent to the server, that particular sent data is deleted from Backup file. */ |
mchheta | 15:a557a4c85e54 | 712 | void SendBackupData() |
mchheta | 15:a557a4c85e54 | 713 | { |
mchheta | 15:a557a4c85e54 | 714 | char bckp[1024]; |
mchheta | 15:a557a4c85e54 | 715 | fp = fopen("/sd/Backup.txt","r"); |
mchheta | 15:a557a4c85e54 | 716 | //fp2 = fopen("/sd/temp.txt","w"); |
mchheta | 15:a557a4c85e54 | 717 | if(strlen(fgets(bckp, sizeof(bckp), fp)) < 10){ |
mchheta | 15:a557a4c85e54 | 718 | pc.printf("No Backup Data"); |
mchheta | 15:a557a4c85e54 | 719 | fclose(fp); |
mchheta | 15:a557a4c85e54 | 720 | wait(1.5); |
mchheta | 15:a557a4c85e54 | 721 | //remove("/sd/Backup.txt"); |
mchheta | 15:a557a4c85e54 | 722 | } |
mchheta | 15:a557a4c85e54 | 723 | //fclose(fp); |
mchheta | 15:a557a4c85e54 | 724 | else |
mchheta | 15:a557a4c85e54 | 725 | { |
mchheta | 15:a557a4c85e54 | 726 | fclose(fp); |
mchheta | 15:a557a4c85e54 | 727 | fp = fopen("/sd/Backup.txt","r"); |
mchheta | 15:a557a4c85e54 | 728 | //for(int i=0;i<5;i++){ |
mchheta | 15:a557a4c85e54 | 729 | fgets(bckp, sizeof(bckp), fp); |
mchheta | 15:a557a4c85e54 | 730 | pc.printf("%s", bckp); |
mchheta | 15:a557a4c85e54 | 731 | fclose(fp); |
mchheta | 15:a557a4c85e54 | 732 | |
mchheta | 15:a557a4c85e54 | 733 | //wait(2); |
mchheta | 15:a557a4c85e54 | 734 | Senddta(bckp); |
mchheta | 15:a557a4c85e54 | 735 | //} |
mchheta | 15:a557a4c85e54 | 736 | fclose(fp); |
mchheta | 15:a557a4c85e54 | 737 | int ctr = 0; |
mchheta | 15:a557a4c85e54 | 738 | memset(bckp, '\0', sizeof(bckp)); |
mchheta | 15:a557a4c85e54 | 739 | //char c = fgetc(fp); |
mchheta | 15:a557a4c85e54 | 740 | char copy[100]; |
mchheta | 15:a557a4c85e54 | 741 | //wait(3); |
mchheta | 15:a557a4c85e54 | 742 | fp=fopen("/sd/Backup.txt","r"); |
mchheta | 15:a557a4c85e54 | 743 | fp2 = fopen("/sd/temp.txt","w"); |
mchheta | 15:a557a4c85e54 | 744 | while ((fgets(copy,sizeof(copy),fp))!=NULL) |
mchheta | 15:a557a4c85e54 | 745 | { |
mchheta | 15:a557a4c85e54 | 746 | ctr++; |
mchheta | 15:a557a4c85e54 | 747 | if(ctr==1) |
mchheta | 15:a557a4c85e54 | 748 | pc.printf("Skip first line\r\n"); |
mchheta | 15:a557a4c85e54 | 749 | else |
mchheta | 15:a557a4c85e54 | 750 | fputs(copy,fp2); |
mchheta | 15:a557a4c85e54 | 751 | } |
mchheta | 15:a557a4c85e54 | 752 | //sprintf(copy,"\0"); |
mchheta | 15:a557a4c85e54 | 753 | //sprintf(bckp,"\0"); |
mchheta | 15:a557a4c85e54 | 754 | //wait(2); |
mchheta | 15:a557a4c85e54 | 755 | |
mchheta | 15:a557a4c85e54 | 756 | |
mchheta | 15:a557a4c85e54 | 757 | fclose(fp); |
mchheta | 15:a557a4c85e54 | 758 | fclose(fp2); |
mchheta | 15:a557a4c85e54 | 759 | remove("/sd/Backup.txt"); |
mchheta | 15:a557a4c85e54 | 760 | file_rename("/sd/temp.txt", "/sd/Backup.txt"); |
mchheta | 15:a557a4c85e54 | 761 | memset(copy, '\0', sizeof(copy)); |
mchheta | 15:a557a4c85e54 | 762 | } |
unix_guru | 14:d71b1aa3c8bf | 763 | } |
WiredHome | 0:037b95a5cc85 | 764 | int main() |
WiredHome | 0:037b95a5cc85 | 765 | { |
mchheta | 15:a557a4c85e54 | 766 | pc.baud(115200); |
mchheta | 15:a557a4c85e54 | 767 | esp.baud(115200); |
mchheta | 15:a557a4c85e54 | 768 | SDcrdRead(); |
mchheta | 15:a557a4c85e54 | 769 | |
mchheta | 15:a557a4c85e54 | 770 | pc.printf("Board_specs[2] = %s and Board_specs[3]= %s \r\n", Board_specs[2], Board_specs[3]); |
mchheta | 15:a557a4c85e54 | 771 | wait(2); |
mchheta | 15:a557a4c85e54 | 772 | ESPconfig(); |
mchheta | 15:a557a4c85e54 | 773 | set_time(retriveTime()); |
mchheta | 15:a557a4c85e54 | 774 | |
mchheta | 15:a557a4c85e54 | 775 | while (true) { |
mchheta | 15:a557a4c85e54 | 776 | seconds = time(NULL); |
mchheta | 15:a557a4c85e54 | 777 | //wait(1); |
mchheta | 15:a557a4c85e54 | 778 | /*Loop to read and send data to server */ |
mchheta | 15:a557a4c85e54 | 779 | for(int i = 0; i <10; i++){ |
mchheta | 15:a557a4c85e54 | 780 | if(Port_Multiplier[i+1]==0) //If no sensor attached, don't read data |
mchheta | 15:a557a4c85e54 | 781 | { |
mchheta | 15:a557a4c85e54 | 782 | } |
mchheta | 15:a557a4c85e54 | 783 | else{ |
mchheta | 15:a557a4c85e54 | 784 | //seconds = time(NULL); |
mchheta | 15:a557a4c85e54 | 785 | port_value=Port[i].read()*Port_Multiplier[i+1]; //Read data and convert raw value to standard units |
mchheta | 15:a557a4c85e54 | 786 | port_number=i; |
mchheta | 15:a557a4c85e54 | 787 | TCP_DataSend(); //Send data to the server |
mchheta | 15:a557a4c85e54 | 788 | pc.printf(" %f",port_value); |
mchheta | 15:a557a4c85e54 | 789 | } |
unix_guru | 14:d71b1aa3c8bf | 790 | } |
mchheta | 15:a557a4c85e54 | 791 | |
mchheta | 15:a557a4c85e54 | 792 | //wait(4); |
mchheta | 15:a557a4c85e54 | 793 | //fp = fopen("/sd/Backup.txt","r"); |
mchheta | 15:a557a4c85e54 | 794 | |
mchheta | 15:a557a4c85e54 | 795 | |
mchheta | 15:a557a4c85e54 | 796 | pc.printf("\n"); |
WiredHome | 3:ca6a1026c28e | 797 | } |
mchheta | 15:a557a4c85e54 | 798 | } |