• Wemos D1 WIFI配网


    实现步骤: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
    
    ";
     59   message += "URI: ";
     60   message += server.uri();
     61   message += "
    Method: ";
     62   message += (server.method() == HTTP_GET) ? "GET" : "POST";
     63   message += "
    Arguments: ";
     64   message += server.args();
     65   message += "
    ";
     66   for (uint8_t i = 0; i < server.args(); i++) {
     67     message += " " + server.argName(i) + ": " + server.arg(i) + "
    ";
     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
    ", WiFi.SSID().c_str());
    116             //Serial.printf("PSW:%s
    ", 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

    作者:儒良设计

    -------------------------------------------

    个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!

    万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!

  • 相关阅读:
    省级联动(使用ajax实现)
    java学习之 反射
    自己写的代码生成器
    java中关于StackTraceElement的使用
    在Java中判断数组中包含某个元素的几种方式的比较
    android PopupWindow 点击外面消失
    android获取textview的行数
    多线程关于腾讯笔试题
    FrameLayout的点击问题
    自定义SnackBar
  • 原文地址:https://www.cnblogs.com/bymeet/p/15140563.html
Copyright © 2020-2023  润新知