web iot espressif
Dependencies: WIZWebtInterface mbed
main.cpp
- Committer:
- 846354866
- Date:
- 2016-11-04
- Revision:
- 2:0523b50f44fd
- Parent:
- 1:900e3ba27ddb
- Child:
- 3:dc786e394e82
File content as of revision 2:0523b50f44fd:
#include "mbed.h" #include "EthernetInterface.h" #include <stdio.h> #include <string.h> #define MAC "\x00\x08\xDC\x11\x34\x78" #define IP "192.168.1.123" #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_FNAME_LENGTH 127 #define HTTPD_MAX_DNAME_LENGTH 127 Serial uart(PA_13,PA_14); DigitalInOut myIOD10(D10); DigitalIn myInD11(D11); DigitalOut myOutD12(D12); AnalogIn myInA1(A1); Timeout button_ledTimeout; Timeout receive_dht11Timeout; 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 EthernetInterface eth; TCPSocketServer server; TCPSocketConnection client; char buffer[HTTPD_MAX_REQ_LENGTH+1]; char httpHeader[HTTPD_MAX_HDR_LENGTH+1]; char fileName[HTTPD_MAX_FNAME_LENGTH+1]; char dirName[HTTPD_MAX_DNAME_LENGTH+1]; char *uristr; char *eou; char *qrystr; Ticker ledTick; void receive_dht11(); unsigned char receive_byte(); 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() { while(myInD11.read()) { wait(0.01f); if(!myInD11.read()) { myOutD12.write(!myOutD12.read()); status_led = myOutD12.read(); break; } } button_ledTimeout.attach(&button_led,0.1f); } void getFile(char* uri) { uart.printf("getFile %s\n", uri); strcpy(led_control, &uri[1]); //receive_dht11(); 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)); 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)); 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)); } cloce_1 = 1; } 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; } } sprintf(httpHeader,"<meta http-equiv=\"refresh\" content=\"1\">"); client.send(httpHeader,strlen(httpHeader)); sprintf(httpHeader,"</ul></body></html>"); client.send(httpHeader,strlen(httpHeader)); } 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()); // 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 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"); client.send(httpHeader,strlen(httpHeader)); client.send(buffer,n); } else { uart.printf("%s():%d\n",__FUNCTION__, __LINE__); *eou = 0; getFile(uristr); } } } //led2 = false; client.close(); } } unsigned char receive_byte() { unsigned char i,temp; for(i=0;i<8;i++) { U8FLAG = 2; while(!myIOD10.read() && U8FLAG++); Delay_us(30); temp=0; if(myIOD10.read()==1) temp=1; U8FLAG = 2; while(myIOD10.read() && U8FLAG++); if(U8FLAG==1)break; data_byte<<=1;// data_byte|=temp; } return data_byte; } void receive_dht11() { unsigned char T_H,T_L,R_H,R_L,check,num_check; myIOD10.output(); myIOD10.write(0); delay(20); myIOD10.write(1); Delay_us(25); myIOD10.write(1); myIOD10.input(); if(!myIOD10.read()) { 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); if(num_check==check) { RH=R_H; RL=R_L; TH=T_H; TL=T_L; check=num_check; } } 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); }