web iot espressif

Dependencies:   WIZWebtInterface mbed

Revision:
0:25d52c6a3448
Child:
1:900e3ba27ddb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Nov 04 01:02:50 2016 +0000
@@ -0,0 +1,367 @@
+#include "mbed.h"
+#include "EthernetInterface.h"
+//#include "SDFileSystem.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;
+        }    
+    }
+    //status_led = myOutD12.read();    
+    /*if(!status_led)
+    {
+        sprintf(httpHeader,"<H1>Led state:OPEN  </H1>");
+        client.send(httpHeader,strlen(httpHeader));
+        myOutD12.write(1);
+    }else
+    {
+        sprintf(httpHeader,"<H1>Led state:CLOCE </H1>");
+        client.send(httpHeader,strlen(httpHeader));
+        myOutD12.write(0);
+    }     
+    
+    
+    sprintf(httpHeader,"<form action=\"http://%s/%s\"><input type=\"submit\" value=\"ON/OFF\"></form>", seaver_ip, led_control);
+    client.send(httpHeader,strlen(httpHeader));*/
+    
+    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++)//接收8bit的数据
+    {
+        U8FLAG = 2;
+        while(!myIOD10.read() && U8FLAG++);//等待50us的低电平开始信号结束
+        Delay_us(30);
+        temp=0;//时间为 26us-28us数据'0'
+        if(myIOD10.read()==1)
+        temp=1;//如果 26us-28us'1'
+        U8FLAG = 2;
+        while(myIOD10.read() && U8FLAG++);//'0'为 26us-28us'1'为 70us
+        //超时则跳出for循环
+        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;
+    
+    // REQUEST SAMPLE
+    myIOD10.output();
+    myIOD10.write(0);
+    delay(20);//wait(0.020f);
+    
+    myIOD10.write(1);
+    Delay_us(25);//wait(26/1000*0.001f);
+    myIOD10.write(1);
+    
+    myIOD10.input();
+    if(!myIOD10.read())//判断从机是否有低电平响应信号//
+    {
+        while(!myIOD10.read());//判断从机发出 80us 的低电平响应信号是否结束//
+        while(myIOD10.read());//判断从机发出  80us
+        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);
+}
\ No newline at end of file