本站改版新增arduino频道
arduino 网页Web自动配网
#include "Arduino.h" #include <WiFi.h> #include <WebServer.h> #include <ESPmDNS.h> #include <esp_wifi.h> const char* AP_SSID = "ESP32_Config"; //热点名称 String wifi_ssid = ""; String wifi_pass = ""; String scanNetworksID = "";//用于储存扫描到的WiFi #define ROOT_HTML "<!DOCTYPE html><html><head><title>WIFI Config by lwang</title><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"></head><style type=\"text/css\">.input{display: block; margin-top: 10px;}.input span{width: 100px; float: left; float: left; height: 36px; line-height: 36px;}.input input{height: 30px;width: 200px;}.btn{width: 120px; height: 35px; background-color: #000000; border:0px; color:#ffffff; margin-top:15px; margin-left:100px;}</style><body><form method=\"GET\" action=\"connect\"><label class=\"input\"><span>WiFi SSID</span><input type=\"text\" name=\"ssid\"></label><label class=\"input\"><span>WiFi PASS</span><input type=\"text\" name=\"pass\"></label><input class=\"btn\" type=\"submit\" name=\"submit\" value=\"Submie\"> <p><span> Nearby wifi:</P></form>" WebServer server(80); #define RESET_PIN 13 //用于删除WiFi信息 bool AutoConfig(); void wifi_Config(); void setup() { Serial.begin(115200); pinMode(RESET_PIN, INPUT_PULLUP); // 连接WiFi if (!AutoConfig()) { wifi_Config(); } //用于删除已存WiFi if (digitalRead(RESET_PIN) == LOW) { delay(1000); esp_wifi_restore(); delay(10); ESP.restart(); //复位esp32 } } void loop() { server.handleClient(); while (WiFi.status() == WL_CONNECTED) { //WIFI已连接 } } //用于配置WiFi void wifi_Config() { Serial.println("scan start"); // 扫描附近WiFi int n = WiFi.scanNetworks(); Serial.println("scan done"); if (n == 0) { Serial.println("no networks found"); scanNetworksID = "no networks found"; } else { Serial.print(n); Serial.println(" networks found"); for (int i = 0; i < n; ++i) { // Print SSID and RSSI for each network found Serial.print(i + 1); Serial.print(": "); Serial.print(WiFi.SSID(i)); Serial.print(" ("); Serial.print(WiFi.RSSI(i)); Serial.print(")"); Serial.println((WiFi.encryptionType(i) == WIFI_AUTH_OPEN) ? " " : "*"); scanNetworksID += "<P>" + WiFi.SSID(i) + "</P>"; delay(10); } } Serial.println(""); WiFi.mode(WIFI_AP);//配置为AP模式 boolean result = WiFi.softAP(AP_SSID, ""); //开启WIFI热点 if (result) { IPAddress myIP = WiFi.softAPIP(); //打印相关信息 Serial.println(""); Serial.print("Soft-AP IP address = "); Serial.println(myIP); Serial.println(String("MAC address = ") + WiFi.softAPmacAddress().c_str()); Serial.println("waiting ..."); } else { //开启热点失败 Serial.println("WiFiAP Failed"); delay(3000); ESP.restart(); //复位esp32 } if (MDNS.begin("esp32")) { Serial.println("MDNS responder started"); } //首页 server.on("/", []() { server.send(200, "text/html", ROOT_HTML + scanNetworksID + "</body></html>"); }); //连接 server.on("/connect", []() { server.send(200, "text/html", "<html><body><font size=\"10\">successd,wifi connecting...<br />Please close this page manually.</font></body></html>"); WiFi.softAPdisconnect(true); //获取输入的WIFI账户和密码 wifi_ssid = server.arg("ssid"); wifi_pass = server.arg("pass"); server.close(); WiFi.softAPdisconnect(); Serial.println("WiFi Connect SSID:" + wifi_ssid + " PASS:" + wifi_pass); //设置为STA模式并连接WIFI WiFi.mode(WIFI_STA); WiFi.begin(wifi_ssid.c_str(), wifi_pass.c_str()); uint8_t Connect_time = 0; //用于连接计时,如果长时间连接不成功,复位设备 while (WiFi.status() != WL_CONNECTED) { //等待WIFI连接成功 delay(500); Serial.print("."); Connect_time ++; if (Connect_time > 80) { //长时间连接不上,复位设备 Serial.println("Connection timeout, check input is correct or try again later!"); delay(3000); ESP.restart(); } } Serial.println(""); Serial.println("WIFI Config Success"); Serial.printf("SSID:%s", WiFi.SSID().c_str()); Serial.print(" LocalIP:"); Serial.print(WiFi.localIP()); Serial.println(""); }); server.begin(); } //用于上电自动连接WiFi bool AutoConfig() { WiFi.begin(); for (int i = 0; i < 20; i++) { int wstatus = WiFi.status(); if (wstatus == WL_CONNECTED) { Serial.println("WIFI SmartConfig Success"); Serial.printf("SSID:%s", WiFi.SSID().c_str()); Serial.printf(", PSW:%s\r\n", WiFi.psk().c_str()); Serial.print("LocalIP:"); Serial.print(WiFi.localIP()); Serial.print(" ,GateIP:"); Serial.println(WiFi.gatewayIP()); return true; } else { Serial.print("WIFI AutoConfig Waiting......"); Serial.println(wstatus); delay(1000); } } Serial.println("WIFI AutoConfig Faild!" ); return false; }
Copyright © 2014 ESP56.com All Rights Reserved
晋ICP备14006235号-22 晋公网安备14108102001165号
执行时间: 0.0097510814666748 seconds