.kgj
Dependencies: DS3231 RHT03 TextLCD mbed
Fork of HomeStatus by
main.cpp@3:19accdf325fe, 2015-05-26 (annotated)
- Committer:
- poomyuttt
- Date:
- Tue May 26 18:00:45 2015 +0000
- Revision:
- 3:19accdf325fe
- Parent:
- 2:dad081eaee81
- Child:
- 4:33cfa6f20f2f
present
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
poomyuttt | 0:894306d5cad7 | 1 | #include "mbed.h" |
poomyuttt | 0:894306d5cad7 | 2 | #include "TextLCD.h" |
poomyuttt | 0:894306d5cad7 | 3 | #include "DS3231.h" |
poomyuttt | 0:894306d5cad7 | 4 | #include "RHT03.h" |
poomyuttt | 0:894306d5cad7 | 5 | I2C i2c(D14,D15); |
poomyuttt | 0:894306d5cad7 | 6 | TextLCD_I2C lcd(&i2c,0x4E,TextLCD::LCD16x2); |
poomyuttt | 0:894306d5cad7 | 7 | DS3231 rtc(D14,D15); |
poomyuttt | 0:894306d5cad7 | 8 | RHT03 rht(D13); |
fookies | 1:ae97d85a47dd | 9 | DigitalOut p1(D3),p2(D4),p3(D5),p4(D6),p5(D7),p6(D9),p7(D10),p8(D11); |
poomyuttt | 2:dad081eaee81 | 10 | Serial esp(D8, D2); // tx, rx |
poomyuttt | 2:dad081eaee81 | 11 | Serial pc(USBTX, USBRX); // tx, rx |
poomyuttt | 2:dad081eaee81 | 12 | |
poomyuttt | 3:19accdf325fe | 13 | char IP[100]; |
poomyuttt | 3:19accdf325fe | 14 | int SERVtimeout =5; // set server timeout in seconds incase link breaks. |
poomyuttt | 2:dad081eaee81 | 15 | int bufflen, DataRX, count, getcount, replycount, servreq, timeout; |
poomyuttt | 2:dad081eaee81 | 16 | int bufl, ipdLen, linkID, weberror, webcounter; |
poomyuttt | 2:dad081eaee81 | 17 | float Temp,Hum; |
poomyuttt | 2:dad081eaee81 | 18 | int dw,d,M,y,h,m,s; |
poomyuttt | 2:dad081eaee81 | 19 | char webcount[8]; |
poomyuttt | 2:dad081eaee81 | 20 | char lasthit[30]; |
poomyuttt | 2:dad081eaee81 | 21 | char timebuf[30]; |
poomyuttt | 2:dad081eaee81 | 22 | char type[16]; |
poomyuttt | 2:dad081eaee81 | 23 | char type1[16]; |
poomyuttt | 2:dad081eaee81 | 24 | char channel[2]; |
poomyuttt | 2:dad081eaee81 | 25 | char cmdbuff[32]; |
poomyuttt | 2:dad081eaee81 | 26 | char replybuff[512]; |
poomyuttt | 2:dad081eaee81 | 27 | char webdata[1024]; // This may need to be bigger depending on WEB browser used |
poomyuttt | 2:dad081eaee81 | 28 | char webbuff[4096]; // Currently using 1986 characters, Increase this if more web page data added |
poomyuttt | 2:dad081eaee81 | 29 | Timer t1; |
poomyuttt | 2:dad081eaee81 | 30 | Timer t2; |
poomyuttt | 3:19accdf325fe | 31 | Timer t3; |
poomyuttt | 3:19accdf325fe | 32 | int PageNo=1; |
poomyuttt | 2:dad081eaee81 | 33 | |
poomyuttt | 2:dad081eaee81 | 34 | void sendpage(); |
poomyuttt | 2:dad081eaee81 | 35 | void ReadWebData(); |
poomyuttt | 2:dad081eaee81 | 36 | void SendCMD(),getreply(),ReadWebData(),startserver(),sendpage(),SendWEB(),sendcheck(); |
poomyuttt | 2:dad081eaee81 | 37 | |
poomyuttt | 2:dad081eaee81 | 38 | // Serial Interrupt read ESP data |
poomyuttt | 2:dad081eaee81 | 39 | void callback() { |
poomyuttt | 2:dad081eaee81 | 40 | while (esp.readable()) {webbuff[count] = esp.getc();count++;} |
poomyuttt | 2:dad081eaee81 | 41 | if(strlen(webbuff)>bufflen){DataRX=1;} |
poomyuttt | 2:dad081eaee81 | 42 | } |
poomyuttt | 2:dad081eaee81 | 43 | |
poomyuttt | 2:dad081eaee81 | 44 | |
poomyuttt | 2:dad081eaee81 | 45 | |
poomyuttt | 2:dad081eaee81 | 46 | |
poomyuttt | 0:894306d5cad7 | 47 | |
poomyuttt | 0:894306d5cad7 | 48 | int main() |
poomyuttt | 0:894306d5cad7 | 49 | { |
poomyuttt | 0:894306d5cad7 | 50 | lcd.setMode(TextLCD::DispOn); |
poomyuttt | 0:894306d5cad7 | 51 | lcd.setBacklight(TextLCD::LightOff); |
poomyuttt | 0:894306d5cad7 | 52 | lcd.setCursor(TextLCD::CurOff_BlkOff); |
poomyuttt | 3:19accdf325fe | 53 | //rtc.setTime(23,04,50); |
poomyuttt | 3:19accdf325fe | 54 | //rtc.setDate(2,26,5,2015); |
poomyuttt | 3:19accdf325fe | 55 | pc.baud(9600); |
poomyuttt | 3:19accdf325fe | 56 | esp.baud(9600); |
poomyuttt | 3:19accdf325fe | 57 | startserver(); |
poomyuttt | 3:19accdf325fe | 58 | t3.start(); |
poomyuttt | 0:894306d5cad7 | 59 | while(1) |
poomyuttt | 0:894306d5cad7 | 60 | { |
poomyuttt | 3:19accdf325fe | 61 | if(PageNo==1){ |
poomyuttt | 3:19accdf325fe | 62 | if(t3.read_ms () >3000){ |
poomyuttt | 3:19accdf325fe | 63 | rtc.readDateTime(&dw,&d,&M,&y,&h,&m,&s); |
poomyuttt | 3:19accdf325fe | 64 | rht.readData(); |
poomyuttt | 3:19accdf325fe | 65 | Temp=rht.getTemperatureC(); |
poomyuttt | 3:19accdf325fe | 66 | Hum=rht.getHumidity(); |
poomyuttt | 3:19accdf325fe | 67 | lcd.cls(); |
poomyuttt | 3:19accdf325fe | 68 | lcd.setAddress(0,0); |
poomyuttt | 3:19accdf325fe | 69 | lcd.printf("%02d/%02d/%4d",d,M,y); |
poomyuttt | 3:19accdf325fe | 70 | lcd.setAddress(0,1); |
poomyuttt | 3:19accdf325fe | 71 | lcd.printf("%02d:%02d:%02d",h,m,s); |
poomyuttt | 3:19accdf325fe | 72 | t3.reset(); |
poomyuttt | 3:19accdf325fe | 73 | PageNo=2; |
poomyuttt | 3:19accdf325fe | 74 | } |
poomyuttt | 3:19accdf325fe | 75 | } |
poomyuttt | 3:19accdf325fe | 76 | if(PageNo==2){ |
poomyuttt | 3:19accdf325fe | 77 | if(t3.read_ms () >3000){ |
poomyuttt | 3:19accdf325fe | 78 | lcd.cls(); |
poomyuttt | 3:19accdf325fe | 79 | lcd.setAddress(0,0); |
poomyuttt | 3:19accdf325fe | 80 | lcd.printf("Temp:%.1f",Temp); |
poomyuttt | 3:19accdf325fe | 81 | lcd.setAddress(0,1); |
poomyuttt | 3:19accdf325fe | 82 | lcd.printf("Hum:%.1f",Hum); |
poomyuttt | 3:19accdf325fe | 83 | PageNo=3; |
poomyuttt | 3:19accdf325fe | 84 | t3.reset(); |
poomyuttt | 3:19accdf325fe | 85 | } |
poomyuttt | 3:19accdf325fe | 86 | } |
poomyuttt | 3:19accdf325fe | 87 | if(PageNo==3){ |
poomyuttt | 3:19accdf325fe | 88 | if(t3.read_ms () >3000){ |
poomyuttt | 3:19accdf325fe | 89 | lcd.cls(); |
poomyuttt | 3:19accdf325fe | 90 | lcd.setAddress(0,0); |
poomyuttt | 3:19accdf325fe | 91 | lcd.printf("P1:%3s P2:%3s",(p1==1)?"On":"Off",(p2==1)?"On":"Off"); |
poomyuttt | 3:19accdf325fe | 92 | lcd.setAddress(0,1); |
poomyuttt | 3:19accdf325fe | 93 | lcd.printf("P3:%3s P4:%3s",(p3==1)?"On":"Off",(p4==1)?"On":"Off"); |
poomyuttt | 3:19accdf325fe | 94 | PageNo=4; |
poomyuttt | 3:19accdf325fe | 95 | t3.reset(); |
poomyuttt | 3:19accdf325fe | 96 | } |
poomyuttt | 3:19accdf325fe | 97 | } |
poomyuttt | 3:19accdf325fe | 98 | if(PageNo==4){ |
poomyuttt | 3:19accdf325fe | 99 | if(t3.read_ms () >3000){ |
poomyuttt | 3:19accdf325fe | 100 | lcd.cls(); |
poomyuttt | 3:19accdf325fe | 101 | lcd.setAddress(0,0); |
poomyuttt | 3:19accdf325fe | 102 | lcd.printf("P5:%3s P6:%3s",(p5==1)?"On":"Off",(p6==1)?"On":"Off"); |
poomyuttt | 3:19accdf325fe | 103 | lcd.setAddress(0,1); |
poomyuttt | 3:19accdf325fe | 104 | lcd.printf("P7:%3s P8:%3s",(p7==1)?"On":"Off",(p8==1)?"On":"Off"); |
poomyuttt | 3:19accdf325fe | 105 | PageNo=5; |
poomyuttt | 3:19accdf325fe | 106 | t3.reset(); |
poomyuttt | 3:19accdf325fe | 107 | |
poomyuttt | 3:19accdf325fe | 108 | } |
poomyuttt | 3:19accdf325fe | 109 | } |
poomyuttt | 3:19accdf325fe | 110 | if(PageNo==5) |
poomyuttt | 3:19accdf325fe | 111 | { |
poomyuttt | 3:19accdf325fe | 112 | if(t3.read_ms () >3000){ |
poomyuttt | 3:19accdf325fe | 113 | lcd.cls(); |
poomyuttt | 3:19accdf325fe | 114 | lcd.setAddress(0,0); |
poomyuttt | 3:19accdf325fe | 115 | strcpy(cmdbuff, "AT+CIFSR\r\n"); |
poomyuttt | 3:19accdf325fe | 116 | timeout=1000;getcount=50; |
poomyuttt | 3:19accdf325fe | 117 | while(weberror==0){ |
poomyuttt | 3:19accdf325fe | 118 | SendCMD();getreply(); |
poomyuttt | 3:19accdf325fe | 119 | if (strstr(replybuff, "0.0.0.0") == NULL) {weberror=1;} // wait for valid IP |
poomyuttt | 3:19accdf325fe | 120 | } |
poomyuttt | 3:19accdf325fe | 121 | replybuff[strlen(replybuff)] = '\0'; |
poomyuttt | 3:19accdf325fe | 122 | strcpy(IP, replybuff + 5); |
poomyuttt | 3:19accdf325fe | 123 | lcd.printf("%s",IP); |
poomyuttt | 3:19accdf325fe | 124 | lcd.setAddress(0,1); |
poomyuttt | 3:19accdf325fe | 125 | lcd.printf("Fookies-One(m8)"); |
poomyuttt | 3:19accdf325fe | 126 | PageNo=1; |
poomyuttt | 3:19accdf325fe | 127 | t3.reset(); |
poomyuttt | 3:19accdf325fe | 128 | } |
poomyuttt | 3:19accdf325fe | 129 | } |
poomyuttt | 2:dad081eaee81 | 130 | |
poomyuttt | 2:dad081eaee81 | 131 | if(DataRX==1){ |
poomyuttt | 2:dad081eaee81 | 132 | ReadWebData(); |
poomyuttt | 2:dad081eaee81 | 133 | if (servreq == 1 && weberror == 0){sendpage();} |
poomyuttt | 2:dad081eaee81 | 134 | esp.attach(&callback); |
poomyuttt | 2:dad081eaee81 | 135 | pc.printf(" IPD Data:\r\n\n Link ID = %d,\r\n IPD Header Length = %d \r\n IPD Type = %s\r\n", linkID, ipdLen, type); |
poomyuttt | 2:dad081eaee81 | 136 | pc.printf("\n\n HTTP Packet: \n\n%s\n", webdata); |
poomyuttt | 2:dad081eaee81 | 137 | pc.printf(" Web Characters sent : %d\n\n", bufl); |
poomyuttt | 2:dad081eaee81 | 138 | pc.printf(" -------------------------------------\n\n"); |
poomyuttt | 2:dad081eaee81 | 139 | strcpy(lasthit, timebuf); |
poomyuttt | 2:dad081eaee81 | 140 | servreq=0; |
poomyuttt | 2:dad081eaee81 | 141 | } |
poomyuttt | 0:894306d5cad7 | 142 | } |
poomyuttt | 0:894306d5cad7 | 143 | |
poomyuttt | 0:894306d5cad7 | 144 | |
poomyuttt | 0:894306d5cad7 | 145 | return 0; |
poomyuttt | 0:894306d5cad7 | 146 | |
poomyuttt | 0:894306d5cad7 | 147 | } |
poomyuttt | 3:19accdf325fe | 148 | void startserver() |
poomyuttt | 3:19accdf325fe | 149 | { |
poomyuttt | 3:19accdf325fe | 150 | pc.printf("++++++++++ Resetting ESP ++++++++++\r\n"); |
poomyuttt | 3:19accdf325fe | 151 | strcpy(cmdbuff,"AT+RST\r\n"); |
poomyuttt | 3:19accdf325fe | 152 | timeout=2000;getcount=600; |
poomyuttt | 3:19accdf325fe | 153 | SendCMD(); |
poomyuttt | 3:19accdf325fe | 154 | getreply(); |
poomyuttt | 3:19accdf325fe | 155 | pc.printf(replybuff); |
poomyuttt | 3:19accdf325fe | 156 | pc.printf("%d",count); |
poomyuttt | 3:19accdf325fe | 157 | if (strstr(replybuff, "OK") != NULL) { |
poomyuttt | 3:19accdf325fe | 158 | strcpy(cmdbuff, "AT+CWMODE=1\r\n"); // set wifi to station |
poomyuttt | 3:19accdf325fe | 159 | timeout=500;getcount=10; |
poomyuttt | 3:19accdf325fe | 160 | SendCMD(); |
poomyuttt | 3:19accdf325fe | 161 | getreply(); |
poomyuttt | 3:19accdf325fe | 162 | strcpy(cmdbuff, "AT+CWJAP=""FSE-Wireless"",""1234567890""\r\n"); // set wifi to station |
poomyuttt | 3:19accdf325fe | 163 | timeout=500;getcount=50; |
poomyuttt | 3:19accdf325fe | 164 | SendCMD(); |
poomyuttt | 3:19accdf325fe | 165 | getreply(); |
poomyuttt | 3:19accdf325fe | 166 | lcd.printf("\n++++++++++ Starting Server ++++++++++\r\n"); |
poomyuttt | 3:19accdf325fe | 167 | strcpy(cmdbuff, "AT+CIPMUX=1\r\n"); // set multiple connections. |
poomyuttt | 3:19accdf325fe | 168 | timeout=500;getcount=10; |
poomyuttt | 3:19accdf325fe | 169 | SendCMD(); |
poomyuttt | 3:19accdf325fe | 170 | getreply(); |
poomyuttt | 3:19accdf325fe | 171 | sprintf(cmdbuff,"AT+CIPSERVER=1,%d\r\n", 80); |
poomyuttt | 3:19accdf325fe | 172 | timeout=500;getcount=10; |
poomyuttt | 3:19accdf325fe | 173 | SendCMD(); |
poomyuttt | 3:19accdf325fe | 174 | getreply(); |
poomyuttt | 3:19accdf325fe | 175 | //sprintf(cmdbuff,"AT+CIPSTO=%d\r\n",SERVtimeout); |
poomyuttt | 3:19accdf325fe | 176 | //timeout=500;getcount=50; |
poomyuttt | 3:19accdf325fe | 177 | //SendCMD(); |
poomyuttt | 3:19accdf325fe | 178 | //getreply(); |
poomyuttt | 3:19accdf325fe | 179 | lcd.printf("\n Getting Server IP \r\n"); |
poomyuttt | 3:19accdf325fe | 180 | strcpy(cmdbuff, "AT+CIFSR\r\n"); |
poomyuttt | 3:19accdf325fe | 181 | timeout=1000;getcount=50; |
poomyuttt | 3:19accdf325fe | 182 | while(weberror==0){ |
poomyuttt | 3:19accdf325fe | 183 | SendCMD();getreply(); |
poomyuttt | 3:19accdf325fe | 184 | if (strstr(replybuff, "0.0.0.0") == NULL) {weberror=1;} // wait for valid IP |
poomyuttt | 3:19accdf325fe | 185 | } |
poomyuttt | 3:19accdf325fe | 186 | lcd.printf("\n Enter WEB address in your browser \r\n\n"); |
poomyuttt | 3:19accdf325fe | 187 | replybuff[strlen(replybuff) - 8] = '\0'; |
poomyuttt | 3:19accdf325fe | 188 | strcpy(IP, replybuff + 5); |
poomyuttt | 3:19accdf325fe | 189 | sprintf(webdata," http://%s:%d", IP, 80); |
poomyuttt | 3:19accdf325fe | 190 | lcd.printf(webdata); |
poomyuttt | 3:19accdf325fe | 191 | wait(2); |
poomyuttt | 3:19accdf325fe | 192 | bufflen=200;count=0; |
poomyuttt | 3:19accdf325fe | 193 | lcd.printf("\n\n++++++++++ Ready ++++++++++\r\n\n"); |
poomyuttt | 3:19accdf325fe | 194 | esp.attach(&callback); |
poomyuttt | 3:19accdf325fe | 195 | } |
poomyuttt | 3:19accdf325fe | 196 | else{ |
poomyuttt | 3:19accdf325fe | 197 | lcd.printf("\n++++++++++ ESP8266 error, check power/connections ++++++++++\r\n"); |
poomyuttt | 3:19accdf325fe | 198 | while(1){} |
poomyuttt | 3:19accdf325fe | 199 | } |
poomyuttt | 3:19accdf325fe | 200 | t2.reset();t2.start(); |
poomyuttt | 3:19accdf325fe | 201 | } |
poomyuttt | 2:dad081eaee81 | 202 | |
poomyuttt | 2:dad081eaee81 | 203 | void sendpage() |
poomyuttt | 2:dad081eaee81 | 204 | { |
poomyuttt | 2:dad081eaee81 | 205 | char t1[1000]; |
poomyuttt | 2:dad081eaee81 | 206 | |
poomyuttt | 2:dad081eaee81 | 207 | // WEB page data |
poomyuttt | 2:dad081eaee81 | 208 | strcpy(webbuff, "<!DOCTYPE html>"); |
poomyuttt | 2:dad081eaee81 | 209 | strcat(webbuff, "<html><head><title>Home Status</title></head>"); |
poomyuttt | 2:dad081eaee81 | 210 | strcat(webbuff, "<body>"); |
poomyuttt | 2:dad081eaee81 | 211 | strcat(webbuff, "<p>"); |
poomyuttt | 2:dad081eaee81 | 212 | sprintf(t1,"%02d/%02d/%4d %02d:%02d:%02d",d,M,y,h,m,s); |
poomyuttt | 2:dad081eaee81 | 213 | strcat(webbuff,t1); |
poomyuttt | 2:dad081eaee81 | 214 | strcat(webbuff, "<p>"); |
poomyuttt | 2:dad081eaee81 | 215 | strcat(webbuff,"<p>Temperature : "); |
poomyuttt | 2:dad081eaee81 | 216 | sprintf(t1,"%.1f",Temp); |
poomyuttt | 2:dad081eaee81 | 217 | strcat(webbuff,t1); |
poomyuttt | 2:dad081eaee81 | 218 | strcat(webbuff, " C<p>"); |
poomyuttt | 2:dad081eaee81 | 219 | strcat(webbuff,"<p>Humidity : "); |
poomyuttt | 2:dad081eaee81 | 220 | sprintf(t1,"%.1f",Hum); |
poomyuttt | 2:dad081eaee81 | 221 | strcat(webbuff,t1); |
poomyuttt | 2:dad081eaee81 | 222 | strcat(webbuff, " %<p>"); |
poomyuttt | 2:dad081eaee81 | 223 | strcat(webbuff, "<table>"); |
poomyuttt | 2:dad081eaee81 | 224 | strcat(webbuff, "<tr>"); |
poomyuttt | 2:dad081eaee81 | 225 | strcat(webbuff, "<td>Light 1 :</td><td>"); |
poomyuttt | 2:dad081eaee81 | 226 | if(p1==1) |
poomyuttt | 2:dad081eaee81 | 227 | { |
poomyuttt | 2:dad081eaee81 | 228 | strcat(webbuff, "<form action=\"Light1:OFF\"><input type=\"submit\" value=\"ON\" /></form></td></tr>"); |
poomyuttt | 2:dad081eaee81 | 229 | }else{ |
poomyuttt | 2:dad081eaee81 | 230 | strcat(webbuff, "<form action=\"Light1:ON\"><input type=\"submit\" value=\"OFF\" /></form></td></tr>"); |
poomyuttt | 2:dad081eaee81 | 231 | } |
poomyuttt | 2:dad081eaee81 | 232 | strcat(webbuff, "<tr>"); |
poomyuttt | 2:dad081eaee81 | 233 | strcat(webbuff, "<td>Light 2 :</td><td>"); |
poomyuttt | 2:dad081eaee81 | 234 | if(p2==1) |
poomyuttt | 2:dad081eaee81 | 235 | { |
poomyuttt | 2:dad081eaee81 | 236 | strcat(webbuff, "<form action=\"Light2:OFF\"><input type=\"submit\" value=\"ON\" /></form></td></tr>"); |
poomyuttt | 2:dad081eaee81 | 237 | }else{ |
poomyuttt | 2:dad081eaee81 | 238 | strcat(webbuff, "<form action=\"Light2:ON\"><input type=\"submit\" value=\"OFF\" /></form></td></tr>"); |
poomyuttt | 2:dad081eaee81 | 239 | } |
poomyuttt | 2:dad081eaee81 | 240 | strcat(webbuff, "<tr>"); |
poomyuttt | 2:dad081eaee81 | 241 | strcat(webbuff, "<td>Light 2 :</td><td>"); |
poomyuttt | 2:dad081eaee81 | 242 | if(p3==1) |
poomyuttt | 2:dad081eaee81 | 243 | { |
poomyuttt | 2:dad081eaee81 | 244 | strcat(webbuff, "<form action=\"Light3:OFF\"><input type=\"submit\" value=\"ON\" /></form></td></tr>"); |
poomyuttt | 2:dad081eaee81 | 245 | }else{ |
poomyuttt | 2:dad081eaee81 | 246 | strcat(webbuff, "<form action=\"Light3:ON\"><input type=\"submit\" value=\"OFF\" /></form></td></tr>"); |
poomyuttt | 2:dad081eaee81 | 247 | }strcat(webbuff, "<tr>"); |
poomyuttt | 2:dad081eaee81 | 248 | strcat(webbuff, "<td>Light 2 :</td><td>"); |
poomyuttt | 2:dad081eaee81 | 249 | if(p4==1) |
poomyuttt | 2:dad081eaee81 | 250 | { |
poomyuttt | 2:dad081eaee81 | 251 | strcat(webbuff, "<form action=\"Light4:OFF\"><input type=\"submit\" value=\"ON\" /></form></td></tr>"); |
poomyuttt | 2:dad081eaee81 | 252 | }else{ |
poomyuttt | 2:dad081eaee81 | 253 | strcat(webbuff, "<form action=\"Light4:ON\"><input type=\"submit\" value=\"OFF\" /></form></td></tr>"); |
poomyuttt | 2:dad081eaee81 | 254 | }strcat(webbuff, "<tr>"); |
poomyuttt | 2:dad081eaee81 | 255 | strcat(webbuff, "<td>Light 2 :</td><td>"); |
poomyuttt | 2:dad081eaee81 | 256 | if(p5==1) |
poomyuttt | 2:dad081eaee81 | 257 | { |
poomyuttt | 2:dad081eaee81 | 258 | strcat(webbuff, "<form action=\"Light5:OFF\"><input type=\"submit\" value=\"ON\" /></form></td></tr>"); |
poomyuttt | 2:dad081eaee81 | 259 | }else{ |
poomyuttt | 2:dad081eaee81 | 260 | strcat(webbuff, "<form action=\"Light5:ON\"><input type=\"submit\" value=\"OFF\" /></form></td></tr>"); |
poomyuttt | 2:dad081eaee81 | 261 | }strcat(webbuff, "<tr>"); |
poomyuttt | 2:dad081eaee81 | 262 | strcat(webbuff, "<td>Light 2 :</td><td>"); |
poomyuttt | 2:dad081eaee81 | 263 | if(p6==1) |
poomyuttt | 2:dad081eaee81 | 264 | { |
poomyuttt | 2:dad081eaee81 | 265 | strcat(webbuff, "<form action=\"Light6:OFF\"><input type=\"submit\" value=\"ON\" /></form></td></tr>"); |
poomyuttt | 2:dad081eaee81 | 266 | }else{ |
poomyuttt | 2:dad081eaee81 | 267 | strcat(webbuff, "<form action=\"Light6:ON\"><input type=\"submit\" value=\"OFF\" /></form></td></tr>"); |
poomyuttt | 2:dad081eaee81 | 268 | }strcat(webbuff, "<tr>"); |
poomyuttt | 2:dad081eaee81 | 269 | strcat(webbuff, "<td>Light 2 :</td><td>"); |
poomyuttt | 2:dad081eaee81 | 270 | if(p7==1) |
poomyuttt | 2:dad081eaee81 | 271 | { |
poomyuttt | 2:dad081eaee81 | 272 | strcat(webbuff, "<form action=\"Light7:OFF\"><input type=\"submit\" value=\"ON\" /></form></td></tr>"); |
poomyuttt | 2:dad081eaee81 | 273 | }else{ |
poomyuttt | 2:dad081eaee81 | 274 | strcat(webbuff, "<form action=\"Light7:ON\"><input type=\"submit\" value=\"OFF\" /></form></td></tr>"); |
poomyuttt | 2:dad081eaee81 | 275 | }strcat(webbuff, "<tr>"); |
poomyuttt | 2:dad081eaee81 | 276 | strcat(webbuff, "<td>Light 2 :</td><td>"); |
poomyuttt | 2:dad081eaee81 | 277 | if(p8==1) |
poomyuttt | 2:dad081eaee81 | 278 | { |
poomyuttt | 2:dad081eaee81 | 279 | strcat(webbuff, "<form action=\"Light8:OFF\"><input type=\"submit\" value=\"ON\" /></form></td></tr>"); |
poomyuttt | 2:dad081eaee81 | 280 | }else{ |
poomyuttt | 2:dad081eaee81 | 281 | strcat(webbuff, "<form action=\"Light8:ON\"><input type=\"submit\" value=\"OFF\" /></form></td></tr>"); |
poomyuttt | 2:dad081eaee81 | 282 | } |
poomyuttt | 2:dad081eaee81 | 283 | |
poomyuttt | 2:dad081eaee81 | 284 | |
poomyuttt | 2:dad081eaee81 | 285 | |
poomyuttt | 2:dad081eaee81 | 286 | |
poomyuttt | 2:dad081eaee81 | 287 | strcat(webbuff, "</table></p></body></html>"); |
poomyuttt | 2:dad081eaee81 | 288 | // end of WEB page data |
poomyuttt | 2:dad081eaee81 | 289 | bufl = strlen(webbuff); // get total page buffer length |
poomyuttt | 2:dad081eaee81 | 290 | sprintf(cmdbuff,"AT+CIPSEND=%d,%d\r\n", linkID, bufl); // send IPD link channel and buffer character length. |
poomyuttt | 2:dad081eaee81 | 291 | timeout=200;getcount=7; |
poomyuttt | 2:dad081eaee81 | 292 | SendCMD(); |
poomyuttt | 2:dad081eaee81 | 293 | getreply(); |
poomyuttt | 2:dad081eaee81 | 294 | SendWEB(); // send web page |
poomyuttt | 2:dad081eaee81 | 295 | memset(webbuff, '\0', sizeof(webbuff)); |
poomyuttt | 2:dad081eaee81 | 296 | sendcheck(); |
poomyuttt | 2:dad081eaee81 | 297 | } |
poomyuttt | 2:dad081eaee81 | 298 | void ReadWebData() |
poomyuttt | 2:dad081eaee81 | 299 | { |
poomyuttt | 2:dad081eaee81 | 300 | wait_ms(200); |
poomyuttt | 2:dad081eaee81 | 301 | esp.attach(NULL); |
poomyuttt | 2:dad081eaee81 | 302 | count=0;DataRX=0;weberror=0; |
poomyuttt | 2:dad081eaee81 | 303 | memset(webdata, '\0', sizeof(webdata)); |
poomyuttt | 2:dad081eaee81 | 304 | int x = strcspn (webbuff,"+"); |
poomyuttt | 2:dad081eaee81 | 305 | if(x){ |
poomyuttt | 2:dad081eaee81 | 306 | strcpy(webdata, webbuff + x);weberror=0; |
poomyuttt | 2:dad081eaee81 | 307 | int numMatched = sscanf(webdata,"+IPD,%d,%d:%s", &linkID, &ipdLen, type); |
poomyuttt | 2:dad081eaee81 | 308 | |
poomyuttt | 2:dad081eaee81 | 309 | if( strstr(webdata, "Light1:OFF") != NULL ) {p1=0;} |
poomyuttt | 2:dad081eaee81 | 310 | if( strstr(webdata, "Light1:ON") != NULL ) {p1=1;} |
poomyuttt | 2:dad081eaee81 | 311 | if( strstr(webdata, "Light2:OFF") != NULL ) {p2=0;} |
poomyuttt | 2:dad081eaee81 | 312 | if( strstr(webdata, "Light2:ON") != NULL ) {p2=1;} |
poomyuttt | 2:dad081eaee81 | 313 | if( strstr(webdata, "Light3:OFF") != NULL ) {p3=0;} |
poomyuttt | 2:dad081eaee81 | 314 | if( strstr(webdata, "Light3:ON") != NULL ) {p3=1;} |
poomyuttt | 2:dad081eaee81 | 315 | if( strstr(webdata, "Light4:OFF") != NULL ) {p4=0;} |
poomyuttt | 2:dad081eaee81 | 316 | if( strstr(webdata, "Light4:ON") != NULL ) {p4=1;} |
poomyuttt | 2:dad081eaee81 | 317 | if( strstr(webdata, "Light5:OFF") != NULL ) {p5=0;} |
poomyuttt | 2:dad081eaee81 | 318 | if( strstr(webdata, "Light5:ON") != NULL ) {p5=1;} |
poomyuttt | 2:dad081eaee81 | 319 | if( strstr(webdata, "Light6:OFF") != NULL ) {p6=0;} |
poomyuttt | 2:dad081eaee81 | 320 | if( strstr(webdata, "Light6:ON") != NULL ) {p6=1;} |
poomyuttt | 2:dad081eaee81 | 321 | if( strstr(webdata, "Light7:OFF") != NULL ) {p7=0;} |
poomyuttt | 2:dad081eaee81 | 322 | if( strstr(webdata, "Light7:ON") != NULL ) {p7=1;} |
poomyuttt | 2:dad081eaee81 | 323 | if( strstr(webdata, "Light8:OFF") != NULL ) {p8=0;} |
poomyuttt | 2:dad081eaee81 | 324 | if( strstr(webdata, "Light8:ON") != NULL ) {p8=1;} |
poomyuttt | 2:dad081eaee81 | 325 | |
poomyuttt | 2:dad081eaee81 | 326 | sprintf(channel, "%d",linkID); |
poomyuttt | 2:dad081eaee81 | 327 | if (strstr(webdata, "GET") != NULL) {servreq=1;} |
poomyuttt | 2:dad081eaee81 | 328 | if (strstr(webdata, "POST") != NULL) {servreq=1;} |
poomyuttt | 2:dad081eaee81 | 329 | webcounter++; |
poomyuttt | 2:dad081eaee81 | 330 | sprintf(webcount, "%d",webcounter); |
poomyuttt | 2:dad081eaee81 | 331 | } |
poomyuttt | 2:dad081eaee81 | 332 | else { |
poomyuttt | 2:dad081eaee81 | 333 | memset(webbuff, '\0', sizeof(webbuff)); |
poomyuttt | 2:dad081eaee81 | 334 | esp.attach(&callback);weberror=1; |
poomyuttt | 2:dad081eaee81 | 335 | } |
poomyuttt | 2:dad081eaee81 | 336 | } |
poomyuttt | 2:dad081eaee81 | 337 | // ESP Command data send |
poomyuttt | 2:dad081eaee81 | 338 | void SendCMD() |
poomyuttt | 2:dad081eaee81 | 339 | { |
poomyuttt | 2:dad081eaee81 | 340 | esp.printf("%s", cmdbuff); |
poomyuttt | 2:dad081eaee81 | 341 | } |
poomyuttt | 2:dad081eaee81 | 342 | // Get Cammand and ESP status replies |
poomyuttt | 2:dad081eaee81 | 343 | void getreply() |
poomyuttt | 2:dad081eaee81 | 344 | { |
poomyuttt | 2:dad081eaee81 | 345 | memset(replybuff, '\0', sizeof(replybuff)); |
poomyuttt | 2:dad081eaee81 | 346 | t1.reset(); t1.start();replycount=0; |
poomyuttt | 2:dad081eaee81 | 347 | while(t1.read_ms()< timeout && replycount < getcount) { |
poomyuttt | 2:dad081eaee81 | 348 | if(esp.readable()) { |
poomyuttt | 2:dad081eaee81 | 349 | replybuff[replycount] = esp.getc();replycount++; |
poomyuttt | 2:dad081eaee81 | 350 | } |
poomyuttt | 2:dad081eaee81 | 351 | } |
poomyuttt | 2:dad081eaee81 | 352 | t1.stop(); |
poomyuttt | 2:dad081eaee81 | 353 | } |
poomyuttt | 2:dad081eaee81 | 354 | // Large WEB buffer data send |
poomyuttt | 2:dad081eaee81 | 355 | void SendWEB() |
poomyuttt | 2:dad081eaee81 | 356 | { |
poomyuttt | 2:dad081eaee81 | 357 | int i=0; |
poomyuttt | 2:dad081eaee81 | 358 | if(esp.writeable()) { |
poomyuttt | 2:dad081eaee81 | 359 | while(webbuff[i]!='\0') {esp.putc(webbuff[i]);i++;} |
poomyuttt | 2:dad081eaee81 | 360 | } |
poomyuttt | 2:dad081eaee81 | 361 | } |
poomyuttt | 2:dad081eaee81 | 362 | // wait for ESP "SEND OK" reply, then close IP to load web page |
poomyuttt | 2:dad081eaee81 | 363 | void sendcheck() |
poomyuttt | 2:dad081eaee81 | 364 | { |
poomyuttt | 2:dad081eaee81 | 365 | weberror=1;timeout=500;getcount=24; |
poomyuttt | 2:dad081eaee81 | 366 | t2.reset();t2.start(); |
poomyuttt | 2:dad081eaee81 | 367 | while(weberror==1 && t2.read() <5){ |
poomyuttt | 2:dad081eaee81 | 368 | getreply(); |
poomyuttt | 2:dad081eaee81 | 369 | if (strstr(replybuff, "SEND OK") != NULL) {weberror=0;} // wait for valid SEND OK |
poomyuttt | 2:dad081eaee81 | 370 | } |
poomyuttt | 2:dad081eaee81 | 371 | if(weberror==1){ // restart connection |
poomyuttt | 2:dad081eaee81 | 372 | strcpy(cmdbuff, "AT+CIPMUX=1\r\n"); |
poomyuttt | 2:dad081eaee81 | 373 | timeout=500;getcount=10; |
poomyuttt | 2:dad081eaee81 | 374 | SendCMD();getreply(); |
poomyuttt | 2:dad081eaee81 | 375 | sprintf(cmdbuff,"AT+CIPSERVER=1,%d\r\n", 80); |
poomyuttt | 2:dad081eaee81 | 376 | timeout=500;getcount=10; |
poomyuttt | 2:dad081eaee81 | 377 | SendCMD();getreply(); |
poomyuttt | 2:dad081eaee81 | 378 | } |
poomyuttt | 2:dad081eaee81 | 379 | else{ |
poomyuttt | 2:dad081eaee81 | 380 | sprintf(cmdbuff, "AT+CIPCLOSE=%s\r\n",channel); // close current connection |
poomyuttt | 2:dad081eaee81 | 381 | SendCMD();} |
poomyuttt | 2:dad081eaee81 | 382 | t2.reset(); |
poomyuttt | 2:dad081eaee81 | 383 | } |