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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 13666|回復(fù): 4
收起左側(cè)

ESP32通過WEB頁面連接WIFI

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

首次上電會(huì)有一個(gè)ESP32發(fā)出的WIFI,手機(jī)連接這個(gè)WIFI,然后訪問esp32的IP地址就會(huì)出現(xiàn)WIFI配置的網(wǎng)頁:



直接貼上代碼:

        #include <WiFi.h>

        #include <ESPmDNS.h>

        #include <WebServer.h>

        #include <WiFiMulti.h>


        const char* AP_SSID  = "ESP32_Config"; //熱點(diǎn)名稱

        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;//重啟倒計(jì)時(shí)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熱點(diǎn)

          if (result)

          {

            IPAddress myIP = WiFi.softAPIP();


            //打印相關(guān)信息

            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 );  //開啟定時(shí)器


          } else {  //開啟熱點(diǎn)失敗

            Serial.println("WiFiAP Failed");

            delay(3000);

            ESP.restart();  //復(fù)位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);

            //設(shè)置為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; //用于連接計(jì)時(shí),如果長時(shí)間連接不成功,復(fù)位設(shè)備


            while (WiFi.status() != WL_CONNECTED) {  //等待WIFI連接成功

              delay(500);

              Serial.print(".");

              Connect_time ++;

              if (Connect_time > 80) {  //長時(shí)間連接不上,復(fù)位設(shè)備

                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 ) {  //長時(shí)間不訪問WIFI Config 將復(fù)位設(shè)備

          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

在測試時(shí)發(fā)現(xiàn)有時(shí)候訪問不了,所以加了定時(shí),如果沒有連接WiFi,兩分鐘重啟一次,避免一直訪問不了。程序?qū)懙牟皇呛芎茫悄軐?shí)現(xiàn)我想要的功能。


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

ID:86300 發(fā)表于 2019-10-26 20:45 | 顯示全部樓層
好東西實(shí)用
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 99热这里只有精品8 激情毛片 | 亚洲一区二区三区高清 | 中文字幕在线免费观看 | 亚洲一区二区三区四区视频 | 亚洲 自拍 另类 欧美 丝袜 | 成人综合视频在线 | av网址在线 | 黄色大片观看 | 爱综合| 中文精品视频 | 亚洲成人av一区二区 | 日韩高清国产一区在线 | 中文字幕亚洲精品在线观看 | 久久躁日日躁aaaaxxxx | 成人福利在线 | 欧美大片久久久 | 亚洲久草 | 日韩成人av在线 | 国产精品美女 | 国产乱码精品1区2区3区 | 久久久久久久久久久蜜桃 | 国产电影精品久久 | 黄a在线观看 | 夜夜草视频 | 国产精品久久久乱弄 | 东京久久 | 九九久久久 | 欧美一区视频 | 欧美精品一区二区三区在线播放 | 人人看人人射 | 日日欧美 | 粉嫩一区二区三区性色av | 黄色国产 | 成人久久久 | 中文字幕一区二区三区日韩精品 | 爱高潮www亚洲精品 中文字幕免费视频 | 亚洲欧美日韩一区 | 成人二区 | 羞羞色影院 | a级免费观看视频 | 日韩一级 |