日本a√视频在线,久久青青亚洲国产,亚洲一区欧美二区,免费g片在线观看网站

        <style id="k3y6c"><u id="k3y6c"></u></style>
        <s id="k3y6c"></s>
        <mark id="k3y6c"></mark>
          
          

          <mark id="k3y6c"></mark>

          "); //-->

          博客專欄

          EEPW首頁 > 博客 > 老宇哥帶你玩轉(zhuǎn) ESP32:13 終于到WiFi功能的使用了

          老宇哥帶你玩轉(zhuǎn) ESP32:13 終于到WiFi功能的使用了

          發(fā)布人:芯片之大家 時間:2023-07-02 來源:工程師 發(fā)布文章
          image.png


          今天我們來說說ESP32 的WiFi。

          ESP32的WiFi

          我們之所以使用ESP32做一些小項目,最重要的就是看中了ESP32的WiFi功能,ESP32相當(dāng)于一個強(qiáng)大的單片機(jī)+無線WiFi+藍(lán)牙多合一的一個芯片,芯片有了WiFi,它就不再孤獨寂寞,就可以與外界通信,這就是它區(qū)別于常規(guī)MCU最大的特點,就像2G手機(jī)跟4G手機(jī)的區(qū)別,4G手機(jī)能實現(xiàn)很多2G手機(jī)時代渴望的功能。

          WiFi就是一種無線通訊技術(shù),生活中接觸最多的就是電腦跟手機(jī)通過路由器的WiFi信號上網(wǎng),說白了其實就是一種射頻信號,跟我們早期接觸的315MHz、433MHz射頻通信,藍(lán)牙,Zigbee等一樣,WiFi工作于2.4GHz或者5Ghz的頻率,今天我們先學(xué)習(xí)一下WiFi的基本功能。

          AP模式

          AP模式就是讓ESP32建立一個網(wǎng)絡(luò),可以發(fā)出WiFi信號來讓其他設(shè)備搜索到,就跟路由器發(fā)出信號來類似,只需要一行代碼,我們就可以建立一個我們自己命名的無線網(wǎng)絡(luò)了,期待一下。

          image.png


          #include <WiFi.h>void setup(){
            WiFi.softAP("ESP32_WiFi");
          }void loop(){
          }

          上面這一行代碼,我們就建立了一個名為ESP32_WiFi的,不加密的無線網(wǎng)絡(luò)了,我們將代碼燒錄進(jìn)去,然后打開手機(jī)WiFi連接界面,就可以看到這個網(wǎng)絡(luò)并進(jìn)行連接了。

          image.png


          常用函數(shù)

          我們打開WiFiAP.h這個頭文件就可以看到AP模式的相關(guān)函數(shù)了,這里分享一些常用的,有一些概念比如子網(wǎng)掩碼,網(wǎng)關(guān)地址等不清楚的,大家可以自行上網(wǎng)查看。

          該函數(shù)建立并啟動AP網(wǎng)絡(luò)

          bool softAP(const char* ssid, const char* passphrase = NULL, int channel = 1, int ssid_hidden = 0, int max_connection = 4);
          • ssid,AP網(wǎng)絡(luò)的名字,最大不超過32字節(jié);

          • passphrase,密碼,8-63字節(jié),不設(shè)置就是不加密;

          • channel,WiFi網(wǎng)絡(luò)信道,1-13可選;

          • ssid_hidden,網(wǎng)絡(luò)名字是否隱藏;

          • ssid_hidden,最大接入數(shù),1-4可選。

          本地地址等設(shè)置

          bool softAPConfig(IPAddress local_ip, IPAddress gateway, IPAddress subnet);
          • local_ip,本地網(wǎng)絡(luò)地址,比如默認(rèn)為192.168.4.1;

          • gateway,網(wǎng)關(guān)地址, 192.168.4.1;

          • subnet,子網(wǎng)掩碼,255.255.255.0。

          連接數(shù)量,返回連接到本AP的客戶端的數(shù)量

          uint8_t softAPgetStationNum();

          設(shè)置主機(jī)名字,比如設(shè)置為"CHIPHOME"

          bool softAPsetHostname(const char * hostname);

          查詢主機(jī)的MAC地址,函數(shù)返回主機(jī)的MAC地址

          String softAPmacAddress(void);

          代碼測試

          下面我們寫一個小程序,測試下上面幾個函數(shù)的功能:

          #include <WiFi.h>const char *ssid = "ESP32_WiFi";const char *password = "12345678";IPAddress local_IP(192,168,4,1);IPAddress gateway(192,168,4,1);IPAddress subnet(255,255,255,0);void setup(){
            Serial.begin(115200);
            Serial.println();
          
            WiFi.mode(WIFI_AP); // AP模式
          
            WiFi.softAPConfig(local_IP, gateway, subnet); // 設(shè)置AP地址
            WiFi.softAP(ssid, password);                  // 啟動AP成功返回1
          
            Serial.print("IP address: ");
            Serial.println(WiFi.softAPIP()); // 打印IP地址
          
            WiFi.softAPsetHostname("CHIPHOME"); // 設(shè)置主機(jī)名
            Serial.print("Hostname: ");
            Serial.println(WiFi.softAPgetHostname()); // 打印主機(jī)名
          
            Serial.print("MAC Address: ");
            Serial.println(WiFi.softAPmacAddress()); // 打印MAC地址  }void loop(){ 
            Serial.print("當(dāng)前連接客戶端數(shù): ");
            Serial.println(WiFi.softAPgetStationNum()); // 打印客戶端連接數(shù)量
            delay(5000);
          }

          將上面代碼編譯燒錄之后,我們可以在串口監(jiān)視器中看到如下打印:

          image.png


          代碼中如預(yù)期的打印了了IP地址,主機(jī)名,MAC地址,連接數(shù)量,OK,AP模式相關(guān)我們就介紹到這里。

          STA模式

          STA模式就是讓ESP32當(dāng)做客戶端,去連接AP主機(jī),就好比手機(jī)去連接路由器一樣。

          image.png


          #include <WiFi.h>const char *ssid = "********"; // 網(wǎng)絡(luò)名稱const char *password = "********"; // 網(wǎng)絡(luò)密碼void setup(){
           WiFi.begin(ssid, password);
          }void loop(){
          }

          上面這一行代碼,我們就將ESP32設(shè)置為STA模式,ssid跟password填寫我們要連接的WiFi的賬號密碼,就可以連接上了。

          常用函數(shù)

          我們打開WiFiSTA.h這個頭文件就可以看到STA模式的相關(guān)函數(shù)了,全部的請查閱SDK,下面是一些常用的一些:

          該函數(shù)用于接入WiFi網(wǎng)絡(luò),參數(shù)同上面的AP模式基本一樣,一般就設(shè)置第一個跟第二個參數(shù),其他選擇默認(rèn)

          wl_status_t begin(const char* ssid, const char *passphrase = NULL, int32_t channel = 0, const uint8_t* bssid = NULL, bool connect = true);wl_status_t begin(char* ssid, char *passphrase = NULL, int32_t channel = 0, const uint8_t* bssid = NULL, bool connect = true);

          設(shè)置網(wǎng)絡(luò)地址,包括本機(jī)IP,網(wǎng)關(guān)地址,子網(wǎng)掩碼,DNS

          bool config(IPAddress local_ip, IPAddress gateway, IPAddress subnet, IPAddress dns1 = (uint32_t)0x00000000, IPAddress dns2 = (uint32_t)0x00000000);

          聯(lián)網(wǎng)狀態(tài)

          static wl_status_t status();

          返回不同的枚舉值代表不同的狀態(tài):

          • 0:WL_IDLE_STATUS正在WiFi工作模式間切換;

          • 1:WL_NO_SSID_AVAIL無法訪問設(shè)置的SSID網(wǎng)絡(luò);

          • 2:WL_SCAN_COMPLETED掃描完成;

          • 3:WL_CONNECTED連接成功;

          • 4:WL_CONNECT_FAILED連接失敗;

          • 5:WL_CONNECTION_LOST丟失連接;

          • 6:WL_DISCONNECTED斷開連接;

          模塊IP地址

          IPAddress localIP()

          模塊子網(wǎng)掩碼

          IPAddress subnetMask()

          模塊網(wǎng)關(guān)地址

          IPAddress gatewayIP()

          模塊MAC地址

          const char * getHostname()

          代碼測試

          下面我們寫一個小程序,測試下上面幾個函數(shù)的功能:

          #include <WiFi.h>const char *ssid = "*********";  //改為你自己的WIFI賬號const char *password = "********"; //改為你自己的WIFI密碼void setup(){
            Serial.begin(115200);
            Serial.println();
          
            WiFi.mode(WIFI_STA); //設(shè)置工作在STA模式
          
            WiFi.begin(ssid, password); //連接WiFi
          
            while (WiFi.status() != WL_CONNECTED ){  //等待網(wǎng)絡(luò)連接成功
              delay(1000);
              Serial.print(".");
            }
            Serial.println("WiFi Connected!");
          
            Serial.print("IP address: ");
            Serial.println(WiFi.localIP()); //IP地址
          
            Serial.print("subnetMask: ");
            Serial.println(WiFi.subnetMask()); //子網(wǎng)掩碼地址
          
            Serial.print("gateway: ");
            Serial.println(WiFi.gatewayIP()); //網(wǎng)關(guān)地址
          
            Serial.print("MAC Address: ");
            Serial.println(WiFi.macAddress()); //MAC地址}
          
          void loop(){
          }

          將上面代碼編譯燒錄之后,我們可以在串口監(jiān)視器中看到如下打?。?/span>

          image.png


          代碼中如預(yù)期的打印了了IP地址,子網(wǎng)掩碼,網(wǎng)關(guān)地址,MAC地址,既然ESP32連接上路由器了,那么我們在路由器的設(shè)備列表頁面是不是也能看到ESP32:

          image.png


          異步搜索

          有一些情況,我們需要知道當(dāng)前空間中存在哪些WiFi信號,比如在WiFi配網(wǎng)的時候,下面我們搜索一下當(dāng)前空間中的WiFi信息,然后打印出來。

          image.png


          常用函數(shù)

          我們打開WiFiScan.h這個頭文件就可以看到Scan的相關(guān)函數(shù)了,全部的請查閱SDK,下面是一些常用的一些:

          該函數(shù)用于掃描啟動

          int16_t scanNetworks(bool async = false, bool show_hidden = false, bool passive = false, uint32_t max_ms_per_chan = 300, uint8_t channel = 0);
          • async,異步掃描,設(shè)置為true則不阻塞;

          • show_hidden,是否掃描不廣播的網(wǎng)絡(luò);

          • passive,掃描速度;

          • max_ms_per_chan,每個通道的掃描時間;

          • channel,通道選擇。

          該函數(shù)用于判斷掃描是否完成

          int16_t scanComplete();
          • -1,掃描還沒結(jié)束;

          • -2,掃描還沒觸發(fā);

          • n,掃描到的WiFi信號個數(shù);

          刪除內(nèi)存中的掃描數(shù)據(jù)

          void scanDelete();

          掃描到的網(wǎng)絡(luò)名稱

          String SSID(uint8_t networkItem);

          掃描到的網(wǎng)絡(luò)加密類型

          wifi_auth_mode_t encryptionType(uint8_t networkItem)

          掃描到的網(wǎng)絡(luò)信號強(qiáng)度

          int32_t RSSI(uint8_t networkItem)

          掃描到的網(wǎng)絡(luò)信道號

          int32_t channel(uint8_t networkItem)

          代碼測試

          下面我們寫一個小程序,異步掃描我們空間中當(dāng)前存在的WiFi信號并打印出來:

          #include <WiFi.h>
          
          void setup(){
            Serial.begin(115200);
            Serial.println();
          
            WiFi.mode(WIFI_STA);  // 設(shè)置為STA模式
          
            Serial.println("開始掃描");
            WiFi.scanNetworks(true); //啟動異步掃描}
          
          void loop(){  
            int n = WiFi.scanComplete(); //獲取掃描狀態(tài),信號個數(shù)
            if (n >= 0){
              Serial.println("掃描完成");    for (int i = 0; i < n; ++i){
                Serial.println();
                Serial.print(i + 1);
                Serial.print(":       ");
                Serial.print(WiFi.SSID(i)); //網(wǎng)絡(luò)名稱
                Serial.print("        ");
                Serial.print(WiFi.RSSI(i)); //信號強(qiáng)度
                Serial.print("        ");
                Serial.print((WiFi.encryptionType(i) == WIFI_AUTH_OPEN) ? "未加密" : "加密"); //是否加密
                delay(10);
              }
              WiFi.scanDelete(); //清除內(nèi)存中的掃描結(jié)果
            }  else if (n == -1){
              Serial.println("正在掃描");
            }  else if (n == -2) {
              Serial.println("未觸發(fā)掃描");
            }
          
            delay(1000);
          }

          我們看下打印的結(jié)果,周圍的WiFi信號的數(shù)據(jù)都被打印了出來

          image.png


          到這里,WiFi的基本使用我們算是入門了,聯(lián)網(wǎng)之后,外面的世界非常美妙,我們可以做很多有意思的項目,做一些漂亮的網(wǎng)絡(luò)時鐘,做一些智能家居的小產(chǎn)品,做一個網(wǎng)絡(luò)收音機(jī),做一個游戲模擬器,很多很多......

          關(guān)于WiFi的一些其它功能,比如TCP協(xié)議,UDP協(xié)議,Web服務(wù)器等,我們用到的時候再細(xì)說。

          感謝大家,關(guān)于ESP32的學(xué)習(xí),希望大家Enjoy!


          *博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。



          關(guān)鍵詞: WiFi

          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉