present

Dependencies:   DS3231 RHT03 TextLCD mbed

Fork of HomeStatus by Jennares Yutthaseree

Committer:
poomyuttt
Date:
Tue Jun 02 09:47:12 2015 +0000
Revision:
4:33cfa6f20f2f
Parent:
3:19accdf325fe
project

Who changed what in which revision?

UserRevisionLine numberNew 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 4:33cfa6f20f2f 155 //lcd.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=50;
poomyuttt 3:19accdf325fe 160 SendCMD();
poomyuttt 3:19accdf325fe 161 getreply();
poomyuttt 4:33cfa6f20f2f 162 //lcd.printf(replybuff);
poomyuttt 4:33cfa6f20f2f 163 strcpy(cmdbuff, "AT+CWJAP=""Fookies-One(m8)"",""12312344""\r\n"); // set wifi to station
poomyuttt 4:33cfa6f20f2f 164 timeout=500;getcount=50;
poomyuttt 4:33cfa6f20f2f 165 SendCMD();
poomyuttt 4:33cfa6f20f2f 166 getreply();
poomyuttt 4:33cfa6f20f2f 167 //lcd.printf(replybuff);
poomyuttt 4:33cfa6f20f2f 168 //lcd.printf("\n++++++++++ Starting Server ++++++++++\r\n");
poomyuttt 3:19accdf325fe 169 strcpy(cmdbuff, "AT+CIPMUX=1\r\n"); // set multiple connections.
poomyuttt 3:19accdf325fe 170 timeout=500;getcount=10;
poomyuttt 3:19accdf325fe 171 SendCMD();
poomyuttt 3:19accdf325fe 172 getreply();
poomyuttt 3:19accdf325fe 173 sprintf(cmdbuff,"AT+CIPSERVER=1,%d\r\n", 80);
poomyuttt 3:19accdf325fe 174 timeout=500;getcount=10;
poomyuttt 3:19accdf325fe 175 SendCMD();
poomyuttt 3:19accdf325fe 176 getreply();
poomyuttt 3:19accdf325fe 177 //sprintf(cmdbuff,"AT+CIPSTO=%d\r\n",SERVtimeout);
poomyuttt 3:19accdf325fe 178 //timeout=500;getcount=50;
poomyuttt 3:19accdf325fe 179 //SendCMD();
poomyuttt 3:19accdf325fe 180 //getreply();
poomyuttt 4:33cfa6f20f2f 181 lcd.printf("Getting IP");
poomyuttt 3:19accdf325fe 182 strcpy(cmdbuff, "AT+CIFSR\r\n");
poomyuttt 3:19accdf325fe 183 timeout=1000;getcount=50;
poomyuttt 3:19accdf325fe 184 while(weberror==0){
poomyuttt 3:19accdf325fe 185 SendCMD();getreply();
poomyuttt 4:33cfa6f20f2f 186 lcd.printf(replybuff);
poomyuttt 3:19accdf325fe 187 if (strstr(replybuff, "0.0.0.0") == NULL) {weberror=1;} // wait for valid IP
poomyuttt 3:19accdf325fe 188 }
poomyuttt 3:19accdf325fe 189 lcd.printf("\n Enter WEB address in your browser \r\n\n");
poomyuttt 3:19accdf325fe 190 replybuff[strlen(replybuff) - 8] = '\0';
poomyuttt 3:19accdf325fe 191 strcpy(IP, replybuff + 5);
poomyuttt 3:19accdf325fe 192 sprintf(webdata," http://%s:%d", IP, 80);
poomyuttt 3:19accdf325fe 193 lcd.printf(webdata);
poomyuttt 3:19accdf325fe 194 wait(2);
poomyuttt 3:19accdf325fe 195 bufflen=200;count=0;
poomyuttt 3:19accdf325fe 196 lcd.printf("\n\n++++++++++ Ready ++++++++++\r\n\n");
poomyuttt 3:19accdf325fe 197 esp.attach(&callback);
poomyuttt 3:19accdf325fe 198 }
poomyuttt 3:19accdf325fe 199 else{
poomyuttt 3:19accdf325fe 200 lcd.printf("\n++++++++++ ESP8266 error, check power/connections ++++++++++\r\n");
poomyuttt 3:19accdf325fe 201 while(1){}
poomyuttt 3:19accdf325fe 202 }
poomyuttt 3:19accdf325fe 203 t2.reset();t2.start();
poomyuttt 3:19accdf325fe 204 }
poomyuttt 2:dad081eaee81 205
poomyuttt 2:dad081eaee81 206 void sendpage()
poomyuttt 2:dad081eaee81 207 {
poomyuttt 2:dad081eaee81 208 char t1[1000];
poomyuttt 2:dad081eaee81 209
poomyuttt 2:dad081eaee81 210 // WEB page data
poomyuttt 2:dad081eaee81 211 strcpy(webbuff, "<!DOCTYPE html>");
poomyuttt 2:dad081eaee81 212 strcat(webbuff, "<html><head><title>Home Status</title></head>");
poomyuttt 2:dad081eaee81 213 strcat(webbuff, "<body>");
poomyuttt 2:dad081eaee81 214 strcat(webbuff, "<p>");
poomyuttt 2:dad081eaee81 215 sprintf(t1,"%02d/%02d/%4d %02d:%02d:%02d",d,M,y,h,m,s);
poomyuttt 2:dad081eaee81 216 strcat(webbuff,t1);
poomyuttt 2:dad081eaee81 217 strcat(webbuff, "<p>");
poomyuttt 2:dad081eaee81 218 strcat(webbuff,"<p>Temperature : ");
poomyuttt 2:dad081eaee81 219 sprintf(t1,"%.1f",Temp);
poomyuttt 2:dad081eaee81 220 strcat(webbuff,t1);
poomyuttt 2:dad081eaee81 221 strcat(webbuff, " C<p>");
poomyuttt 2:dad081eaee81 222 strcat(webbuff,"<p>Humidity : ");
poomyuttt 2:dad081eaee81 223 sprintf(t1,"%.1f",Hum);
poomyuttt 2:dad081eaee81 224 strcat(webbuff,t1);
poomyuttt 2:dad081eaee81 225 strcat(webbuff, " %<p>");
poomyuttt 2:dad081eaee81 226 strcat(webbuff, "<table>");
poomyuttt 2:dad081eaee81 227 strcat(webbuff, "<tr>");
poomyuttt 2:dad081eaee81 228 strcat(webbuff, "<td>Light 1 :</td><td>");
poomyuttt 2:dad081eaee81 229 if(p1==1)
poomyuttt 2:dad081eaee81 230 {
poomyuttt 2:dad081eaee81 231 strcat(webbuff, "<form action=\"Light1:OFF\"><input type=\"submit\" value=\"ON\" /></form></td></tr>");
poomyuttt 2:dad081eaee81 232 }else{
poomyuttt 2:dad081eaee81 233 strcat(webbuff, "<form action=\"Light1:ON\"><input type=\"submit\" value=\"OFF\" /></form></td></tr>");
poomyuttt 2:dad081eaee81 234 }
poomyuttt 2:dad081eaee81 235 strcat(webbuff, "<tr>");
poomyuttt 2:dad081eaee81 236 strcat(webbuff, "<td>Light 2 :</td><td>");
poomyuttt 2:dad081eaee81 237 if(p2==1)
poomyuttt 2:dad081eaee81 238 {
poomyuttt 2:dad081eaee81 239 strcat(webbuff, "<form action=\"Light2:OFF\"><input type=\"submit\" value=\"ON\" /></form></td></tr>");
poomyuttt 2:dad081eaee81 240 }else{
poomyuttt 2:dad081eaee81 241 strcat(webbuff, "<form action=\"Light2:ON\"><input type=\"submit\" value=\"OFF\" /></form></td></tr>");
poomyuttt 2:dad081eaee81 242 }
poomyuttt 2:dad081eaee81 243 strcat(webbuff, "<tr>");
poomyuttt 2:dad081eaee81 244 strcat(webbuff, "<td>Light 2 :</td><td>");
poomyuttt 2:dad081eaee81 245 if(p3==1)
poomyuttt 2:dad081eaee81 246 {
poomyuttt 2:dad081eaee81 247 strcat(webbuff, "<form action=\"Light3:OFF\"><input type=\"submit\" value=\"ON\" /></form></td></tr>");
poomyuttt 2:dad081eaee81 248 }else{
poomyuttt 2:dad081eaee81 249 strcat(webbuff, "<form action=\"Light3:ON\"><input type=\"submit\" value=\"OFF\" /></form></td></tr>");
poomyuttt 2:dad081eaee81 250 }strcat(webbuff, "<tr>");
poomyuttt 2:dad081eaee81 251 strcat(webbuff, "<td>Light 2 :</td><td>");
poomyuttt 2:dad081eaee81 252 if(p4==1)
poomyuttt 2:dad081eaee81 253 {
poomyuttt 2:dad081eaee81 254 strcat(webbuff, "<form action=\"Light4:OFF\"><input type=\"submit\" value=\"ON\" /></form></td></tr>");
poomyuttt 2:dad081eaee81 255 }else{
poomyuttt 2:dad081eaee81 256 strcat(webbuff, "<form action=\"Light4:ON\"><input type=\"submit\" value=\"OFF\" /></form></td></tr>");
poomyuttt 2:dad081eaee81 257 }strcat(webbuff, "<tr>");
poomyuttt 2:dad081eaee81 258 strcat(webbuff, "<td>Light 2 :</td><td>");
poomyuttt 2:dad081eaee81 259 if(p5==1)
poomyuttt 2:dad081eaee81 260 {
poomyuttt 2:dad081eaee81 261 strcat(webbuff, "<form action=\"Light5:OFF\"><input type=\"submit\" value=\"ON\" /></form></td></tr>");
poomyuttt 2:dad081eaee81 262 }else{
poomyuttt 2:dad081eaee81 263 strcat(webbuff, "<form action=\"Light5:ON\"><input type=\"submit\" value=\"OFF\" /></form></td></tr>");
poomyuttt 2:dad081eaee81 264 }strcat(webbuff, "<tr>");
poomyuttt 2:dad081eaee81 265 strcat(webbuff, "<td>Light 2 :</td><td>");
poomyuttt 2:dad081eaee81 266 if(p6==1)
poomyuttt 2:dad081eaee81 267 {
poomyuttt 2:dad081eaee81 268 strcat(webbuff, "<form action=\"Light6:OFF\"><input type=\"submit\" value=\"ON\" /></form></td></tr>");
poomyuttt 2:dad081eaee81 269 }else{
poomyuttt 2:dad081eaee81 270 strcat(webbuff, "<form action=\"Light6:ON\"><input type=\"submit\" value=\"OFF\" /></form></td></tr>");
poomyuttt 2:dad081eaee81 271 }strcat(webbuff, "<tr>");
poomyuttt 2:dad081eaee81 272 strcat(webbuff, "<td>Light 2 :</td><td>");
poomyuttt 2:dad081eaee81 273 if(p7==1)
poomyuttt 2:dad081eaee81 274 {
poomyuttt 2:dad081eaee81 275 strcat(webbuff, "<form action=\"Light7:OFF\"><input type=\"submit\" value=\"ON\" /></form></td></tr>");
poomyuttt 2:dad081eaee81 276 }else{
poomyuttt 2:dad081eaee81 277 strcat(webbuff, "<form action=\"Light7:ON\"><input type=\"submit\" value=\"OFF\" /></form></td></tr>");
poomyuttt 2:dad081eaee81 278 }strcat(webbuff, "<tr>");
poomyuttt 2:dad081eaee81 279 strcat(webbuff, "<td>Light 2 :</td><td>");
poomyuttt 2:dad081eaee81 280 if(p8==1)
poomyuttt 2:dad081eaee81 281 {
poomyuttt 2:dad081eaee81 282 strcat(webbuff, "<form action=\"Light8:OFF\"><input type=\"submit\" value=\"ON\" /></form></td></tr>");
poomyuttt 2:dad081eaee81 283 }else{
poomyuttt 2:dad081eaee81 284 strcat(webbuff, "<form action=\"Light8:ON\"><input type=\"submit\" value=\"OFF\" /></form></td></tr>");
poomyuttt 2:dad081eaee81 285 }
poomyuttt 2:dad081eaee81 286
poomyuttt 2:dad081eaee81 287
poomyuttt 2:dad081eaee81 288
poomyuttt 2:dad081eaee81 289
poomyuttt 2:dad081eaee81 290 strcat(webbuff, "</table></p></body></html>");
poomyuttt 2:dad081eaee81 291 // end of WEB page data
poomyuttt 2:dad081eaee81 292 bufl = strlen(webbuff); // get total page buffer length
poomyuttt 2:dad081eaee81 293 sprintf(cmdbuff,"AT+CIPSEND=%d,%d\r\n", linkID, bufl); // send IPD link channel and buffer character length.
poomyuttt 2:dad081eaee81 294 timeout=200;getcount=7;
poomyuttt 2:dad081eaee81 295 SendCMD();
poomyuttt 2:dad081eaee81 296 getreply();
poomyuttt 2:dad081eaee81 297 SendWEB(); // send web page
poomyuttt 2:dad081eaee81 298 memset(webbuff, '\0', sizeof(webbuff));
poomyuttt 2:dad081eaee81 299 sendcheck();
poomyuttt 2:dad081eaee81 300 }
poomyuttt 2:dad081eaee81 301 void ReadWebData()
poomyuttt 2:dad081eaee81 302 {
poomyuttt 2:dad081eaee81 303 wait_ms(200);
poomyuttt 2:dad081eaee81 304 esp.attach(NULL);
poomyuttt 2:dad081eaee81 305 count=0;DataRX=0;weberror=0;
poomyuttt 2:dad081eaee81 306 memset(webdata, '\0', sizeof(webdata));
poomyuttt 2:dad081eaee81 307 int x = strcspn (webbuff,"+");
poomyuttt 2:dad081eaee81 308 if(x){
poomyuttt 2:dad081eaee81 309 strcpy(webdata, webbuff + x);weberror=0;
poomyuttt 2:dad081eaee81 310 int numMatched = sscanf(webdata,"+IPD,%d,%d:%s", &linkID, &ipdLen, type);
poomyuttt 2:dad081eaee81 311
poomyuttt 2:dad081eaee81 312 if( strstr(webdata, "Light1:OFF") != NULL ) {p1=0;}
poomyuttt 2:dad081eaee81 313 if( strstr(webdata, "Light1:ON") != NULL ) {p1=1;}
poomyuttt 2:dad081eaee81 314 if( strstr(webdata, "Light2:OFF") != NULL ) {p2=0;}
poomyuttt 2:dad081eaee81 315 if( strstr(webdata, "Light2:ON") != NULL ) {p2=1;}
poomyuttt 2:dad081eaee81 316 if( strstr(webdata, "Light3:OFF") != NULL ) {p3=0;}
poomyuttt 2:dad081eaee81 317 if( strstr(webdata, "Light3:ON") != NULL ) {p3=1;}
poomyuttt 2:dad081eaee81 318 if( strstr(webdata, "Light4:OFF") != NULL ) {p4=0;}
poomyuttt 2:dad081eaee81 319 if( strstr(webdata, "Light4:ON") != NULL ) {p4=1;}
poomyuttt 2:dad081eaee81 320 if( strstr(webdata, "Light5:OFF") != NULL ) {p5=0;}
poomyuttt 2:dad081eaee81 321 if( strstr(webdata, "Light5:ON") != NULL ) {p5=1;}
poomyuttt 2:dad081eaee81 322 if( strstr(webdata, "Light6:OFF") != NULL ) {p6=0;}
poomyuttt 2:dad081eaee81 323 if( strstr(webdata, "Light6:ON") != NULL ) {p6=1;}
poomyuttt 2:dad081eaee81 324 if( strstr(webdata, "Light7:OFF") != NULL ) {p7=0;}
poomyuttt 2:dad081eaee81 325 if( strstr(webdata, "Light7:ON") != NULL ) {p7=1;}
poomyuttt 2:dad081eaee81 326 if( strstr(webdata, "Light8:OFF") != NULL ) {p8=0;}
poomyuttt 2:dad081eaee81 327 if( strstr(webdata, "Light8:ON") != NULL ) {p8=1;}
poomyuttt 2:dad081eaee81 328
poomyuttt 2:dad081eaee81 329 sprintf(channel, "%d",linkID);
poomyuttt 2:dad081eaee81 330 if (strstr(webdata, "GET") != NULL) {servreq=1;}
poomyuttt 2:dad081eaee81 331 if (strstr(webdata, "POST") != NULL) {servreq=1;}
poomyuttt 2:dad081eaee81 332 webcounter++;
poomyuttt 2:dad081eaee81 333 sprintf(webcount, "%d",webcounter);
poomyuttt 2:dad081eaee81 334 }
poomyuttt 2:dad081eaee81 335 else {
poomyuttt 2:dad081eaee81 336 memset(webbuff, '\0', sizeof(webbuff));
poomyuttt 2:dad081eaee81 337 esp.attach(&callback);weberror=1;
poomyuttt 2:dad081eaee81 338 }
poomyuttt 2:dad081eaee81 339 }
poomyuttt 2:dad081eaee81 340 // ESP Command data send
poomyuttt 2:dad081eaee81 341 void SendCMD()
poomyuttt 2:dad081eaee81 342 {
poomyuttt 2:dad081eaee81 343 esp.printf("%s", cmdbuff);
poomyuttt 2:dad081eaee81 344 }
poomyuttt 2:dad081eaee81 345 // Get Cammand and ESP status replies
poomyuttt 2:dad081eaee81 346 void getreply()
poomyuttt 2:dad081eaee81 347 {
poomyuttt 2:dad081eaee81 348 memset(replybuff, '\0', sizeof(replybuff));
poomyuttt 2:dad081eaee81 349 t1.reset(); t1.start();replycount=0;
poomyuttt 2:dad081eaee81 350 while(t1.read_ms()< timeout && replycount < getcount) {
poomyuttt 2:dad081eaee81 351 if(esp.readable()) {
poomyuttt 2:dad081eaee81 352 replybuff[replycount] = esp.getc();replycount++;
poomyuttt 2:dad081eaee81 353 }
poomyuttt 2:dad081eaee81 354 }
poomyuttt 2:dad081eaee81 355 t1.stop();
poomyuttt 2:dad081eaee81 356 }
poomyuttt 2:dad081eaee81 357 // Large WEB buffer data send
poomyuttt 2:dad081eaee81 358 void SendWEB()
poomyuttt 2:dad081eaee81 359 {
poomyuttt 2:dad081eaee81 360 int i=0;
poomyuttt 2:dad081eaee81 361 if(esp.writeable()) {
poomyuttt 2:dad081eaee81 362 while(webbuff[i]!='\0') {esp.putc(webbuff[i]);i++;}
poomyuttt 2:dad081eaee81 363 }
poomyuttt 2:dad081eaee81 364 }
poomyuttt 2:dad081eaee81 365 // wait for ESP "SEND OK" reply, then close IP to load web page
poomyuttt 2:dad081eaee81 366 void sendcheck()
poomyuttt 2:dad081eaee81 367 {
poomyuttt 2:dad081eaee81 368 weberror=1;timeout=500;getcount=24;
poomyuttt 2:dad081eaee81 369 t2.reset();t2.start();
poomyuttt 2:dad081eaee81 370 while(weberror==1 && t2.read() <5){
poomyuttt 2:dad081eaee81 371 getreply();
poomyuttt 2:dad081eaee81 372 if (strstr(replybuff, "SEND OK") != NULL) {weberror=0;} // wait for valid SEND OK
poomyuttt 2:dad081eaee81 373 }
poomyuttt 2:dad081eaee81 374 if(weberror==1){ // restart connection
poomyuttt 2:dad081eaee81 375 strcpy(cmdbuff, "AT+CIPMUX=1\r\n");
poomyuttt 2:dad081eaee81 376 timeout=500;getcount=10;
poomyuttt 2:dad081eaee81 377 SendCMD();getreply();
poomyuttt 2:dad081eaee81 378 sprintf(cmdbuff,"AT+CIPSERVER=1,%d\r\n", 80);
poomyuttt 2:dad081eaee81 379 timeout=500;getcount=10;
poomyuttt 2:dad081eaee81 380 SendCMD();getreply();
poomyuttt 2:dad081eaee81 381 }
poomyuttt 2:dad081eaee81 382 else{
poomyuttt 2:dad081eaee81 383 sprintf(cmdbuff, "AT+CIPCLOSE=%s\r\n",channel); // close current connection
poomyuttt 2:dad081eaee81 384 SendCMD();}
poomyuttt 2:dad081eaee81 385 t2.reset();
poomyuttt 2:dad081eaee81 386 }