久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 13666|回復: 4
收起左側

ESP32通過WEB頁面連接WIFI

  [復制鏈接]
ID:171060 發表于 2019-8-19 13:30 | 顯示全部樓層 |閱讀模式
在ESP32官方的例程中,都是直接把WIFI的SSID和Password寫死在程序里,但是在實際使用中網絡環境是不固定的,如果更換了網絡環境,就得重新修改程序,在實際運用中并不合理。我在網上找了很久也沒找到類似的例程,于是便自己試著寫了一個,我的思路如下:

首次上電會有一個ESP32發出的WIFI,手機連接這個WIFI,然后訪問esp32的IP地址就會出現WIFI配置的網頁:



直接貼上代碼:

        #include <WiFi.h>

        #include <ESPmDNS.h>

        #include <WebServer.h>

        #include <WiFiMulti.h>


        const char* AP_SSID  = "ESP32_Config"; //熱點名稱

        const char* AP_PASS  = "12345678";  //密碼

        #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\"></form></body></html>"

        WebServer server(80);

        WiFiMulti wifiMulti;


        uint8_t resr_count_down = 120;//重啟倒計時s

        TimerHandle_t xTimer_rest;

        void restCallback(TimerHandle_t xTimer );


        void setup() {

          Serial.begin(115200);

          WiFi.mode(WIFI_AP);//配置為AP模式

          boolean result = WiFi.softAP(AP_SSID, AP_PASS);//開啟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 ...");


            xTimer_rest = xTimerCreate("xTimer_rest", 1000 / portTICK_PERIOD_MS, pdTRUE, ( void * ) 0, restCallback);

            xTimerStart( xTimer_rest, 0 );  //開啟定時器


          } 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);

          });


          //連接

          server.on("/connect", []() {


            server.send(200, "text/html", "<html><body><h1>successd,conning...</h1></body></html>");


            WiFi.softAPdisconnect(true);

            //獲取輸入的WIFI賬戶和密碼

            String ssid = server.arg("ssid");

            String pass = server.arg("pass");

            Serial.println("WiFi Connect SSID:" + ssid + "  PASS:" + pass);

            //設置為STA模式并連接WIFI

            WiFi.mode(WIFI_STA);

            WiFi.begin(ssid.c_str(), pass.c_str());


            resr_count_down = 120;

            xTimerStop(xTimer_rest, 0);


            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();

              }

            }

          });

          server.begin();

        }


        void loop() {

          server.handleClient();

          while (WiFi.status() == WL_CONNECTED) {

            //WIFI已連接

          }

        }


        void restCallback(TimerHandle_t xTimer ) {  //長時間不訪問WIFI Config 將復位設備

          resr_count_down --;

          Serial.print("resr_count_down: ");

          Serial.println(resr_count_down);

          if (resr_count_down < 1) {

            ESP.restart();

          }

        }


程序下載:https://github.com/lwang1997/ESP32/tree/master/WIFI_Config

在測試時發現有時候訪問不了,所以加了定時,如果沒有連接WiFi,兩分鐘重啟一次,避免一直訪問不了。程序寫的不是很好,但是能實現我想要的功能。


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:585455 發表于 2019-10-18 09:23 | 顯示全部樓層
感謝分享
回復

使用道具 舉報

ID:86300 發表于 2019-10-26 20:45 | 顯示全部樓層
好東西實用
回復

使用道具 舉報

ID:721513 發表于 2020-4-3 11:22 | 顯示全部樓層
求助,我找不到WebServer.h,WiFiMulti.h這兩個庫,求大佬幫忙
回復

使用道具 舉報

ID:264169 發表于 2021-1-22 11:34 | 顯示全部樓層
樓主你這個代碼可以連wifi 但是不能保存 每次得重連呢
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品久久久久久久久久 | 国产1区在线 | 色婷婷av777 av免费网站在线 | 欧美成人一区二区 | 不卡的av电影 | 国产三级网站 | 91亚洲精华国产 | 中文字幕视频一区二区 | 一区日韩| 成人在线欧美 | 欧美一区二区在线播放 | 国产乱码精品一品二品 | 综合五月婷 | www.夜夜骑.com | 亚洲精品一区在线观看 | 国产精品久久久久久久久久久久冷 | 成人性生交大片 | 色综合欧美 | 成人乱人乱一区二区三区软件 | www.yw193.com| 国产一区二区三区久久久久久久久 | 日韩精品成人 | 91国内外精品自在线播放 | 欧美阿v | 午夜爽爽爽男女免费观看影院 | www国产成人 | 91人人爽| 国产一区二区三区四区五区加勒比 | 久草新在线 | 精品国产精品国产偷麻豆 | 亚洲综合日韩精品欧美综合区 | 亚洲 欧美 日韩 在线 | 成人免费视频网站在线看 | 国产一区二区激情视频 | 免费能直接在线观看黄的视频 | av特级毛片 | 日韩一二三 | 久久亚洲综合 | 国产黄色小视频在线观看 | 国产精品国产三级国产aⅴ原创 | 国产精品极品美女在线观看免费 |