http://www.javashuo.com/article/p-oozllcrf-hp.htmlhtml
文件系统git
https://blog.csdn.net/solar_Lan/article/details/74231360web
学习的网络知识ajax
http://www.runoob.com/ajax/ajax-examples.html网络
#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\r\n" + "Content-Type: text/html\r\n" + "Connection: close\r\n" + "\r\n"; //网页 String myhtmlPage = String("") + "<html>" + "<head>" + " <title>ESP8266 Web Server Test</title>" + " <script defer=\"defer\">" + " function ledSwitch() {" + " 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\", true);" + " xmlhttp.send(); " + " }" + " </script>" + "</head>" + "<body>" + " <div id=\"txtState\">Unkwon</div>" + " <input type=\"button\" value=\"Switch\" onclick=\"ledSwitch()\">" + "</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\n", 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 == '\n' && currentLineIsBlank) //等待请求头接收完成(接收到空行) { //比较接收到的请求数据 if (readString.startsWith("GET / HTTP/1.1")) //若是是网页请求 { client.print(responseHeaders); //向客户端输出网页响应 client.print(myhtmlPage); //向客户端输出网页内容 client.print("\r\n"); } 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("\r\n"); } break; } if (c == '\n') { currentLineIsBlank = true; //开始新行 } else if (c != '\r') { currentLineIsBlank = false; //正在接收某行中 } /************************************************/ } } delay(1); //等待客户完成接收 client.stop(); //结束当前链接: Serial.println("[Client disconnected]"); Serial.println(readString); //打印输出来自客户的数据 readString = ""; } }
改进密码登陆模式oop
#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\r\n" + "Content-Type: text/html\r\n" + "Connection: close\r\n" + "\r\n"; //网页 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\n", 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 == '\n' && currentLineIsBlank) //等待请求头接收完成(接收到空行) { //比较接收到的请求数据 if (readString.startsWith("GET / HTTP/1.1")) //若是是网页请求 { client.print(responseHeaders); //向客户端输出网页响应 client.print(myhtmlPage); //向客户端输出网页内容 client.print("\r\n"); } 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("\r\n"); } break; } if (c == '\n') { currentLineIsBlank = true; //开始新行 } else if (c != '\r') { currentLineIsBlank = false; //正在接收某行中 } /************************************************/ } } delay(1); //等待客户完成接收 client.stop(); //结束当前链接: Serial.println("[Client disconnected]"); Serial.println(readString); //打印输出来自客户的数据 readString = ""; } }