web iot espressif
Dependencies: WIZWebtInterface mbed
Diff: main.cpp
- Revision:
- 3:dc786e394e82
- Parent:
- 2:0523b50f44fd
--- a/main.cpp Fri Nov 04 08:11:34 2016 +0000 +++ b/main.cpp Wed Nov 16 05:25:55 2016 +0000 @@ -1,17 +1,18 @@ #include "mbed.h" #include "EthernetInterface.h" +#include "wizHTML.h" #include <stdio.h> #include <string.h> #define MAC "\x00\x08\xDC\x11\x34\x78" -#define IP "192.168.1.123" +#define IP "192.168.1.12" #define MASK "255.255.255.0" #define GATEWAY "192.168.1.1" #define HTTPD_SERVER_PORT 80 -#define HTTPD_MAX_REQ_LENGTH 1023 -#define HTTPD_MAX_HDR_LENGTH 255 +#define HTTPD_MAX_REQ_LENGTH 102 +#define HTTPD_MAX_HDR_LENGTH 96 #define HTTPD_MAX_FNAME_LENGTH 127 #define HTTPD_MAX_DNAME_LENGTH 127 @@ -21,21 +22,15 @@ DigitalIn myInD11(D11); DigitalOut myOutD12(D12); AnalogIn myInA1(A1); -Timeout button_ledTimeout; -Timeout receive_dht11Timeout; +Timeout buttonLedTimeout; +Timeout receiveDht11Timeout; unsigned char RH,RL,TH,TL; unsigned char data_byte; unsigned int U8FLAG; -unsigned char status_led; -unsigned char seaver_ip[] = IP; -char led_control[6] = "cloce"; - - -//SDFileSystem sd(p5, p6, p7, p8, "sd"); // LPC1768 MBD2PMD -//SDFileSystem sd(P0_18, P0_17, P0_15, P0_16, "sd"); // Seeeduino Arch Pro SPI2SD -//SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); // K64F -//SDFileSystem sd(PB_3, PB_2, PB_1, PB_0, "sd"); // WIZwiki-W7500 +char seaver_ip[] = IP; +char led_control[6]; +unsigned int loopCnt = 10000; EthernetInterface eth; TCPSocketServer server; @@ -49,28 +44,10 @@ char *eou; char *qrystr; - -Ticker ledTick; - -void receive_dht11(); -unsigned char receive_byte(); +void receiveDht11(); +unsigned char receiveByte(); -void delay(unsigned char ms) -{ - unsigned int y; - while(ms--) - for(y=1920; y>0; y--); -} - -void Delay_us(unsigned char us) -{ - unsigned char y; - while(us--) - for(y=2; y>0; y--); -} - - -void button_led() +void buttonLed() { while(myInD11.read()) { @@ -78,244 +55,162 @@ if(!myInD11.read()) { myOutD12.write(!myOutD12.read()); - status_led = myOutD12.read(); break; } } - button_ledTimeout.attach(&button_led,0.1f); + buttonLedTimeout.attach(&buttonLed,0.1f); } void getFile(char* uri) { + static char string_c[24] = {0}; + char* Led; + char* ledS; + int gas = myInA1.read_u16(); uart.printf("getFile %s\n", uri); - strcpy(led_control, &uri[1]); - //receive_dht11(); + if(memcmp(&uri[1], "favicon.ico", 11)==0){ + return; + } + strncpy(led_control, &uri[1], 5); char *lstchr = strrchr(uri, NULL) -1; - sprintf(httpHeader,"HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nConnection: Close\r\n\r\n"); - client.send(httpHeader,strlen(httpHeader)); - sprintf(httpHeader,"<html><head><title>hello dfrobot</title></head><body><h1> Information State</h1><ul>"); - client.send(httpHeader,strlen(httpHeader)); - - sprintf(httpHeader,"<H1>Temperature:%d Celsius</H1>", TH); - client.send(httpHeader,strlen(httpHeader)); - sprintf(httpHeader,"<H1>Humidity:%d %%</H1>", RH); - client.send(httpHeader,strlen(httpHeader)); - sprintf(httpHeader,"<H1>Gas Value:%d</H1>", myInA1.read_u16()); - client.send(httpHeader,strlen(httpHeader)); - static char i = 0, j = 0, open_1 = 1, cloce_1 = 1, k; - if (strncmp(led_control, "cloce", 5)==0) - {uart.printf("status_led--cloce--- %d\n", status_led); - if(cloce_1) - { - sprintf(httpHeader,"<H1>Led state:CLOCE</H1>"); - client.send(httpHeader,strlen(httpHeader)); + static char open_1 = 1, cloce_1 = 1; + if (memcmp(led_control, "offon", 5)==0){ + if (cloce_1){ myOutD12.write(0); - sprintf(httpHeader,"<form action=\"http://%s/open\"><input type=\"submit\" value=\"ON/OFF\"></form>", seaver_ip); - client.send(httpHeader,strlen(httpHeader)); - - j = 1; - k = status_led; cloce_1 = 0; } - else if (k == status_led && j) - { - sprintf(httpHeader,"<H1>Led state:CLOCE</H1>"); - client.send(httpHeader,strlen(httpHeader)); - myOutD12.write(0); - sprintf(httpHeader,"<form action=\"http://%s/open\"><input type=\"submit\" value=\"ON/OFF\"></form>", seaver_ip); - client.send(httpHeader,strlen(httpHeader)); - j = 0; - } - else if(status_led && !j) - { - sprintf(httpHeader,"<H1>Led state:OPEN</H1>"); - client.send(httpHeader,strlen(httpHeader)); - myOutD12.write(1); - sprintf(httpHeader,"<form action=\"http://%s/cloce\"><input type=\"submit\" value=\"ON/OFF\"></form>", seaver_ip); - client.send(httpHeader,strlen(httpHeader)); - } - else if(!status_led && !j) - { - sprintf(httpHeader,"<H1>Led state:CLOCE</H1>"); - client.send(httpHeader,strlen(httpHeader)); - myOutD12.write(0); - sprintf(httpHeader,"<form action=\"http://%s/open\"><input type=\"submit\" value=\"ON/OFF\"></form>", seaver_ip); - client.send(httpHeader,strlen(httpHeader)); - } open_1 = 1; } - else if (strncmp(led_control, "open", 4)==0) - {uart.printf("status_led--open--- %d\n", status_led); - if(open_1) - { - sprintf(httpHeader,"<H1>Led state:OPEN</H1>"); - client.send(httpHeader,strlen(httpHeader)); - myOutD12.write(1); - sprintf(httpHeader,"<form action=\"http://%s/cloce\"><input type=\"submit\" value=\"ON/OFF\"></form>", seaver_ip); - client.send(httpHeader,strlen(httpHeader)); - - i = 1; - k = status_led; - open_1 = 0; - } - else if(k == status_led && i) - { - sprintf(httpHeader,"<H1>Led state:OPEN</H1>"); - client.send(httpHeader,strlen(httpHeader)); + else if (memcmp(led_control, "onoff", 5)==0){ + if (open_1){ myOutD12.write(1); - sprintf(httpHeader,"<form action=\"http://%s/cloce\"><input type=\"submit\" value=\"ON/OFF\"></form>", seaver_ip); - client.send(httpHeader,strlen(httpHeader)); - i = 0; - } - else if (status_led && !i)// 0 - { - sprintf(httpHeader,"<H1>Led state:OPEN</H1>"); - client.send(httpHeader,strlen(httpHeader)); - myOutD12.write(1); - sprintf(httpHeader,"<form action=\"http://%s/cloce\"><input type=\"submit\" value=\"ON/OFF\"></form>", seaver_ip); - client.send(httpHeader,strlen(httpHeader)); - } - else if (!status_led && !i) - { - sprintf(httpHeader,"<H1>Led state:CLOCE</H1>"); - client.send(httpHeader,strlen(httpHeader)); - myOutD12.write(0); - sprintf(httpHeader,"<form action=\"http://%s/open\"><input type=\"submit\" value=\"ON/OFF\"></form>", seaver_ip); - client.send(httpHeader,strlen(httpHeader)); + open_1 = 0; } cloce_1 = 1; - } + } + if(myOutD12.read()){ + Led = ledSc[0]; + ledS = ledSc[1]; + sprintf(string_c,"%s/offon", seaver_ip); + }else{ + Led = ledSc[2]; + ledS = ledSc[3]; + sprintf(string_c,"%s/onoff", seaver_ip); + } + htmlWeb(TH, TH*5, RH, RH*5, gas, gas*0.05f, Led, ledS, string_c); + sprintf(httpHeader,"HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nConnection: Close\r\n\r\n"); + client.send(httpHeader,strlen(httpHeader)); - if (strncmp(led_control, "", 1)==0) - { - if(myOutD12.read()) - { - sprintf(httpHeader,"<H1>Led state:OPEN</H1>"); - client.send(httpHeader,strlen(httpHeader)); - myOutD12.write(1); - - sprintf(httpHeader,"<form action=\"http://%s/cloce\"><input type=\"submit\" value=\"ON/OFF\"></form>", seaver_ip); - client.send(httpHeader,strlen(httpHeader)); - status_led = 1; - } - else - { - sprintf(httpHeader,"<H1>Led state:CLOCE</H1>"); - client.send(httpHeader,strlen(httpHeader)); - myOutD12.write(0); - - sprintf(httpHeader,"<form action=\"http://%s/open\"><input type=\"submit\" value=\"ON/OFF\"></form>", seaver_ip); - client.send(httpHeader,strlen(httpHeader)); - status_led = 0; - } + for (int i=0; i<sizeof(html); i += 96){ + memcpy(httpHeader, &html[i], 96); + client.send(httpHeader,strlen(httpHeader)); + //wait(0.00001); } - sprintf(httpHeader,"<meta http-equiv=\"refresh\" content=\"1\">"); - client.send(httpHeader,strlen(httpHeader)); - - sprintf(httpHeader,"</ul></body></html>"); - client.send(httpHeader,strlen(httpHeader)); + memset(string_c, 0, sizeof(string_c)); + memset(html, 0, sizeof(html)); } int main (void) { uart.baud(115200); uart.printf("Initializing\r\n"); -// EthernetInterface eth; uart.printf("Initializing Ethernet\r\n"); - //eth.init(); //Use DHCP - //eth.init((uint8_t*)MAC); // Use DHCP for WIZnetInterface - eth.init((uint8_t*)MAC,IP,MASK,GATEWAY); //IP,mask,Gateway - uart.printf("Connecting\r\n"); - eth.connect(); - uart.printf("IP Address is %s\r\n", eth.getIPAddress()); + buttonLedTimeout.attach(&buttonLed,0.1f); + receiveDht11Timeout.attach(&receiveDht11,0.2f); + while (true) { + //eth.init(); //Use DHCP + eth.init((uint8_t*)MAC,IP,MASK,GATEWAY); //IP,mask,Gateway + uart.printf("Connecting\r\n"); + eth.connect(); + uart.printf("IP Address is %s\r\n", eth.getIPAddress()); -// TCPSocketServer server; - server.bind(HTTPD_SERVER_PORT); - server.listen(); - uart.printf("Server Listening\r\n"); - - button_ledTimeout.attach(&button_led,0.1f); - receive_dht11Timeout.attach(&receive_dht11,0.2f); - - while (true) { - uart.printf("\nWait for new connection...\r\n"); - server.accept(client); - client.set_blocking(false, 1500); // Timeout after (1.5)s + server.bind(HTTPD_SERVER_PORT); + server.listen(); + uart.printf("Server Listening\r\n"); - uart.printf("Connection from: %s\r\n", client.get_address()); - uart.printf("%s():%d\n",__FUNCTION__, __LINE__); while (true) { - //led2 = true; - int n = client.receive(buffer, sizeof(buffer)); - if (n <= 0) break; - uart.printf("Recieved Data: %d\r\n\r\n%.*s\r\n",n,n,buffer); - if (n >= 1024) { - sprintf(httpHeader,"HTTP/1.1 413 Request Entity Too Large \r\nContent-Type: text\r\nConnection: Close\r\n\r\n"); - client.send(httpHeader,strlen(httpHeader)); - client.send(buffer,n); - break; - } else { - uart.printf("%s():%d\n",__FUNCTION__, __LINE__); - buffer[n]=0; - } - if (!strncmp(buffer, "GET ", 4)) { - uart.printf("%s():%d\n",__FUNCTION__, __LINE__); - uristr = buffer + 4; - eou = strstr(uristr, " "); - if (eou == NULL) { - uart.printf("%s():%d\n",__FUNCTION__, __LINE__); - sprintf(httpHeader,"HTTP/1.1 400 Bad Request \r\nContent-Type: text\r\nConnection: Close\r\n\r\n"); + uart.printf("\nWait for new connection...\r\n"); + + client.set_blocking(false, 500); // Timeout after (0.5)s + server.accept(client); + + uart.printf("Connection from: %s\r\n", client.get_address()); + while (true) { + int n = client.receive(buffer, sizeof(buffer)); + if (n <= 0) { + uart.printf("return value n<=0\n"); + break; + } + uart.printf("Recieved Data: %d\r\n\r\n%.*s\r\n",n,buffer); + if (n >= 1024) { + sprintf(httpHeader,"HTTP/1.1 413 Request Entity Too Large \r\nContent-Type: text\r\nConnection: Close\r\n\r\n"); client.send(httpHeader,strlen(httpHeader)); client.send(buffer,n); + break; } else { - uart.printf("%s():%d\n",__FUNCTION__, __LINE__); - *eou = 0; - getFile(uristr); + buffer[n]=0; + } + if (!memcmp(buffer, "GET ", 4)) { + uristr = buffer + 4; + eou = strstr(uristr, " "); + if (eou == NULL) { + sprintf(httpHeader,"HTTP/1.1 400 Bad Request \r\nContent-Type: text\r\nConnection: Close\r\n\r\n"); + client.send(httpHeader,strlen(httpHeader)); + client.send(buffer,n); + } else { + *eou = 0; + getFile(uristr); + } } } + client.close(); + break; } - //led2 = false; - client.close(); } } -unsigned char receive_byte() +unsigned char receiveByte() { unsigned char i,temp; for(i=0;i<8;i++) { U8FLAG = 2; - while(!myIOD10.read() && U8FLAG++); - Delay_us(30); + loopCnt = 10000; + while(!myIOD10.read() && U8FLAG++){ + if (loopCnt-- == 0) return 2; + } + wait(0.00003f); temp=0; if(myIOD10.read()==1) temp=1; U8FLAG = 2; - while(myIOD10.read() && U8FLAG++); + loopCnt = 10000; + while(myIOD10.read() && U8FLAG++){ + if (loopCnt-- == 0) return 2; + } if(U8FLAG==1)break; - data_byte<<=1;// + data_byte<<=1; data_byte|=temp; } return data_byte; } -void receive_dht11() +void receiveDht11() { unsigned char T_H,T_L,R_H,R_L,check,num_check; - myIOD10.output(); myIOD10.write(0); - delay(20); + wait(0.020f); myIOD10.write(1); - Delay_us(25); + wait(0.00002f); myIOD10.write(1); myIOD10.input(); @@ -323,14 +218,13 @@ { while(!myIOD10.read()); while(myIOD10.read()); - R_H=receive_byte(); - R_L=receive_byte(); - T_H=receive_byte(); - T_L=receive_byte(); - check=receive_byte(); - uart.printf("--R_H--%d---R_L---%d--T_H--%d---T_L---%d\r\n", R_H,R_L,T_H,T_L); - Delay_us(20); - num_check=R_H+R_L+T_H+T_L;uart.printf("--num_check--%d---check---%d\r\n", num_check,check); + R_H=receiveByte(); + R_L=receiveByte(); + T_H=receiveByte(); + T_L=receiveByte(); + check=receiveByte(); + wait(0.00004f); + num_check=R_H+R_L+T_H+T_L; if(num_check==check) { RH=R_H; @@ -341,10 +235,5 @@ } } - uart.printf("humidity [H] -out--%d\r\n", RH); - uart.printf("humidity [L] -out--%d\r\n", RL); - uart.printf("temperature [H] -out--%d\r\n", TH); - uart.printf("temperature [L] -out--%d\r\n", TL); - - receive_dht11Timeout.attach(&receive_dht11,0.2f); + receiveDht11Timeout.attach(&receiveDht11,0.2f); } \ No newline at end of file