ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Wemos D1 WIFI配网

2021-08-14 12:34:53  阅读:277  来源: 互联网

标签:WIFI String WiFi Wemos server HTML 配网 println Serial


实现步骤:1 开机创建AP_clock 192.168.1.5

     2 手机打开网页输入网络与密码

     3 联接成功,关闭AP模式

  1 /*
  2  *  This sketch demonstrates how to scan WiFi networks. 
  3  *  The API is almost the same as with the WiFi Shield library, 
  4  *  the most obvious difference being the different file you need to include:
  5  */
  6 #include "ESP8266WiFi.h"
  7 #include <ESP8266WebServer.h>
  8 #include <ESP8266mDNS.h>
  9 ESP8266WebServer server(80);
 10 const char* Mssid="AP_clock";
 11 String HTML_TITLE = "<!DOCTYPE html><html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\"><title>ESP8266网页配网</title>";
 12 String HTML_SCRIPT_ONE = "<script type=\"text/javascript\">function wifi(){var ssid = s.value;var password = p.value;var xmlhttp=new XMLHttpRequest();xmlhttp.open(\"GET\",\"/HandleWifi?ssid=\"+ssid+\"&password=\"+password,true);xmlhttp.send();xmlhttp.onload = function(e){alert(this.responseText);}}</script>";
 13 String HTML_SCRIPT_TWO = "<script>function c(l){document.getElementById('s').value=l.innerText||l.textContent;document.getElementById('p').focus();}</script>";
 14 String HTML_HEAD_BODY_BEGIN = "</head><body>请输入wifi信息进行配网:";
 15 String HTML_FORM_ONE = "<form>WiFi名称:<input id='s' name='s' type=\"text\" placeholder=\"请输入您WiFi的名称\"><br>WiFi密码:<input id='p' name='p' type=\"text\" placeholder=\"请输入您WiFi的密码\"><br><input type=\"button\" value=\"扫描\" onclick=\"window.location.href = '/HandleScanWifi'\"><input type=\"button\" value=\"连接\" onclick=\"wifi()\"></form>";
 16 String HTML_BODY_HTML_END = "</body></html>";
 17 
 18 void HandleScanWifi() {
 19    Serial.println("scan start");
 20   String HTML_FORM_TABLE_BEGIN = "<table><head><tr><th>序号</th><th>名称</th><th>强度</th></tr></head><body>";
 21     String HTML_FORM_TABLE_END = "</body></table>";
 22     String HTML_FORM_TABLE_CON = "";
 23     String HTML_TABLE;
 24   // WiFi.scanNetworks will return the number of networks found
 25   int n = WiFi.scanNetworks();
 26   Serial.println("scan done");
 27   if (n == 0)
 28     Serial.println("no networks found");
 29   else
 30   {
 31     Serial.print(n);
 32     Serial.println(" networks found");
 33     for (int i = 0; i < n; ++i)
 34     {
 35       // Print SSID and RSSI for each network found
 36       Serial.print(i + 1);
 37       Serial.print(": ");
 38       Serial.print(WiFi.SSID(i));
 39       Serial.print(" (");
 40       Serial.print(WiFi.RSSI(i));
 41       Serial.print(")");
 42       Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE)?" ":"*");
 43       delay(10);
 44        HTML_FORM_TABLE_CON = HTML_FORM_TABLE_CON + "<tr><td align=\"center\">" + String(i+1) + "</td><td align=\"center\">" + "<a href='#p' onclick='c(this)'>" + WiFi.SSID(i) + "</a>" + "</td><td align=\"center\">" + WiFi.RSSI(i) + "</td></tr>";
 45     }
 46       HTML_TABLE = HTML_FORM_TABLE_BEGIN + HTML_FORM_TABLE_CON + HTML_FORM_TABLE_END;
 47   }
 48     String scanstr = HTML_TITLE + HTML_SCRIPT_ONE + HTML_SCRIPT_TWO + HTML_HEAD_BODY_BEGIN + HTML_FORM_ONE + HTML_TABLE + HTML_BODY_HTML_END;
 49  server.send(200, "text/html", scanstr);
 50  //Serial.println(scanstr);
 51 }
 52 void handleRoot() {
 53     Serial.println("Client is  Connected!");
 54     String str = HTML_TITLE + HTML_SCRIPT_ONE + HTML_SCRIPT_TWO + HTML_HEAD_BODY_BEGIN + HTML_FORM_ONE + HTML_BODY_HTML_END;
 55     server.send(200, "text/html", str);
 56 }
 57 void handleNotFound() { 
 58   String message = "File Not Found\n\n";
 59   message += "URI: ";
 60   message += server.uri();
 61   message += "\nMethod: ";
 62   message += (server.method() == HTTP_GET) ? "GET" : "POST";
 63   message += "\nArguments: ";
 64   message += server.args();
 65   message += "\n";
 66   for (uint8_t i = 0; i < server.args(); i++) {
 67     message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
 68   }
 69   server.send(404, "text/plain", message);
 70 }
 71 void HandleWifi()
 72 {
 73     String wifis = server.arg("ssid"); //从JavaScript发送的数据中找ssid的值
 74     String wifip = server.arg("password"); //从JavaScript发送的数据中找password的值
 75     Serial.println("received:"+wifis);
 76     server.send(200, "text/html", "连接中..");
 77     const char* ssid = wifis.c_str();//String转char
 78     const char* password = wifip.c_str();
 79     WiFi.begin(ssid,password);
 80 }
 81 
 82 void htmlConfig()
 83 {
 84     WiFi.mode(WIFI_AP_STA);//设置模式为AP+STA
 85      WiFi.softAP(Mssid);
 86     IPAddress softLocal(192,168,5,1);           //IP地址,用以设置IP第4字段
 87     IPAddress softGateway(192,168,5,1);         //IP网关,用以设置IP第3字段
 88     IPAddress softSubnet(255,255,255,0);
 89     //配置自定义的IP信息
 90     WiFi.softAPConfig(softLocal,softGateway, softSubnet);  
 91     WiFi.disconnect();
 92     IPAddress myIP = WiFi.softAPIP();
 93     if (MDNS.begin("clock")) {
 94       Serial.println("MDNS responder started");
 95     }
 96     
 97     server.on("/", handleRoot);
 98     server.on("/HandleWifi", HTTP_GET, HandleWifi);
 99     server.on("/HandleScanWifi", HandleScanWifi);
100     server.onNotFound(handleNotFound);//请求失败回调函数
101     MDNS.addService("http", "tcp", 80);
102     server.begin();//开启服务器
103     Serial.print("HTTP server started IP:");
104      Serial.println(myIP);
105     int counter = 0;
106     while(1)
107     {
108         server.handleClient();
109         MDNS.update();  
110          delay(500);
111          counter++;
112         if (WiFi.status() == WL_CONNECTED)
113         {
114             Serial.println("HtmlConfig Success");
115             Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
116             //Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
117             Serial.println("HTML已经连接");
118             break;
119         }
120     }
121        WiFi.mode(WIFI_STA);//关闭AP模式
122     
123 }
124 void setup() {
125   Serial.begin(115200);
126   // Set WiFi to station mode and disconnect from an AP if it was previously connected
127   delay(100);
128   htmlConfig();
129   
130   Serial.println("Setup done");
131 }
132 void loop() {
133   delay(5000);
134 }

 参考:https://github.com/yuan910715/Esp8266_NTP_Clock_Weather

标签:WIFI,String,WiFi,Wemos,server,HTML,配网,println,Serial
来源: https://www.cnblogs.com/bymeet/p/15140563.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有