• WiFi-ESP8266入门http(1)-建立服务器,直接发送网


    #include <ESP8266WiFi.h>
    
    /*** 该工程可以在2.4.0版本esp8266库中运行,没在更高版本库中进行测试 ***/
    
    const char *ssid = "HUAWEI-H3VBKZ";
    const char *password = "13991320168";
    
    WiFiServer server(80);
    
    String readString = ""; //建立一个字符串对象用来接收存放来自客户的数据
    
    //响应头
    String responseHeaders =
        String("") +
        "HTTP/1.1 200 OK
    " +
        "Content-Type: text/html
    " +
        "Connection: close
    " +
        "
    ";
    
    //网页
    String myhtmlPage=
        String("") +
        "<html>" +
        "<head>" +
        "<meta charset="utf-8">"+
        "    <title>ESP8266 配置信息</title>" +    
        "    <script defer="defer">" +
        "        function ledSwitch() {" +
        "            var name = document.getElementById("wifiname").value;"+
        "            var psw = document.getElementById("wifipwd").value;"+       
        "            var xmlhttp;" +
        "            if (window.XMLHttpRequest) {" +
        "                xmlhttp = new XMLHttpRequest();" +
        "            } else {" +
        "                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");" +
        "            }" +
        "            xmlhttp.onreadystatechange = function () {" +
        "                if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {" +
        "                    document.getElementById("txtState").innerHTML = xmlhttp.responseText;" +
        "                }" +
        "            }," +
        "            xmlhttp.open("GET", "Switch"+name+psw, true);" +
        "            xmlhttp.send(); " +
        "        }" +
        "    </script>" +
        "</head>" +  
         "<body>" 
         
        "<h3>连接WIFI:</h3>"+
        
        "<form action=""> "+
        "WIFI账号: <input type="text" id="wifiname"  />"+
        "</form>"+
        
        "<form action=""> "+
        "WIFI密码: <input type="text" id="wifipwd"   />"+
        "</form>"+
        
        "<button type="button" onclick="ledSwitch()"> 连接 </button>"+
        
        "<p>状态消息: <span id="txtState"></span></p> "+
    
        "</body>" +
        "</html>";
    
    
    
    bool isLedTurnOpen = false; // 记录LED状态
    
    void setup()
    {
        pinMode(D4, OUTPUT);
        digitalWrite(D4, HIGH); // 熄灭LED
    
        Serial.begin(115200);
        Serial.println();
    
        Serial.printf("Connecting to %s ", ssid);
        WiFi.begin(ssid, password);
        while (WiFi.status() != WL_CONNECTED)
        {
            delay(500);
            Serial.print(".");
        }
        Serial.println(" connected");
    
        server.begin();
        Serial.printf("Web server started, open %s in a web browser
    ", WiFi.localIP().toString().c_str());
    }
    
    void loop()
    {
        WiFiClient client = server.available(); //尝试建立客户对象
        if (client)                             //如果当前有客户可用
        {
            boolean currentLineIsBlank = true;
            Serial.println("[Client connected]");
    
            while (client.connected()) //如果客户端建立连接
            {
                if (client.available()) //等待有可读数据
                {
                    char c = client.read(); //读取一字节数据
                    readString += c;        //拼接数据
                    /************************************************/
                    if (c == '
    ' && currentLineIsBlank) //等待请求头接收完成(接收到空行)
                    {
                        //比较接收到的请求数据
                        if (readString.startsWith("GET / HTTP/1.1")) //如果是网页请求
                        {
                            client.print(responseHeaders); //向客户端输出网页响应
                            client.print(myhtmlPage);      //向客户端输出网页内容
                            client.print("
    ");
                        }
                        else if (readString.startsWith("GET /Switch")) //如果是改变LED状态请求
                        {
                            if (isLedTurnOpen == false)
                            {
                                digitalWrite(D4, LOW); // 点亮LED
                                client.print("LED has been turn on");
                                isLedTurnOpen = true;
                            }
                            else
                            {
                                digitalWrite(D4, HIGH); // 熄灭LED
                                client.print("LED has been turn off");
                                isLedTurnOpen = false;
                            }
                        }
                        else
                        {
                            client.print("
    ");
                        }
                        break;
                    }
    
                    if (c == '
    ')
                    {
                        currentLineIsBlank = true; //开始新行
                    }
                    else if (c != '
    ')
                    {
                        currentLineIsBlank = false; //正在接收某行中
                    }
                    /************************************************/
                }
            }
            delay(1);      //等待客户完成接收
            client.stop(); //结束当前连接:
            Serial.println("[Client disconnected]");
    
            Serial.println(readString); //打印输出来自客户的数据
            readString = "";
        }
    }
    

      

  • 相关阅读:
    gflag使用
    INTERVIEW #2
    Decision Tree
    Java FAQ
    K-Nearest Neighbors
    INTERVIEW #1
    C++ FAQ
    INTERVIEW #0
    Selection Sort
    TCP 3-Way Handshake
  • 原文地址:https://www.cnblogs.com/kekeoutlook/p/9595893.html
Copyright © 2020-2023  润新知