乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      使用Arduino開發(fā)ESP32(03):WiFi基本功能使用

       Allen 圖書館 2020-04-28

      文章目錄

      • 目的
      • 建立網(wǎng)絡(luò)(AP)
        • 基礎(chǔ)使用
        • 常用方法說明
        • 使用示例
      • 連接網(wǎng)絡(luò)(STA)
        • 基礎(chǔ)使用
        • 常用方法說明
        • 使用示例
      • 掃描網(wǎng)絡(luò)
        • 同步搜索
        • 異步搜索
        • 常用方法說明
      • 通用WiFi方法
      • WiFi事件
        • 事件列表
        • 注冊及刪除
        • 使用示例
      • 總結(jié)

      目的

      使用ESP32一般是為了它的WiFi功能,使用這塊功能最基本的就是建立/連接網(wǎng)絡(luò)這些基本操作,其它面向用戶的網(wǎng)絡(luò)應(yīng)用都是建立在這基礎(chǔ)上的。

      建立網(wǎng)絡(luò)(AP)

      基礎(chǔ)使用

      建立網(wǎng)絡(luò)只需兩步:

      1. 引用WiFi庫#include <WiFi.h>;
      2. 啟動(dòng)AP網(wǎng)絡(luò)WiFi.softAP(ssid)

      將下面代碼上傳到模塊中:

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

      代碼運(yùn)行后可以搜索到一個(gè)名稱為ESP32_AP_TEST的無密碼的網(wǎng)絡(luò);
      默認(rèn)情況下ESP32建立AP時(shí),模塊自身地址為192.168.4.1,可以連接到該網(wǎng)絡(luò)后進(jìn)行測試;
      在這里插入圖片描述

      常用方法說明

      • bool softAP(const char* ssid, const char* passphrase = NULL, int channel = 1, int ssid_hidden = 0, int max_connection = 4)
        該方法用來啟動(dòng)AP,在成功啟動(dòng)后返回true,各項(xiàng)參數(shù)如下:
        ssid所建立AP網(wǎng)絡(luò)的名稱,至少需一個(gè)字節(jié),最大一般不超過32字節(jié);
        passphrase所建立AP網(wǎng)絡(luò)的密碼,可以為NULL(無密碼)或不小于8字節(jié)且不大于63字節(jié)的密碼;
        channelWiFi網(wǎng)絡(luò)信道,可選值1~13;
        ssid_hidden是否對外隱藏SSID,0-不隱藏,1-隱藏;
        max_connection最大可接入數(shù),可選值1~4;
      • bool softAPConfig(IPAddress local_ip, IPAddress gateway, IPAddress subnet)
        設(shè)置本地地址、網(wǎng)關(guān)地址和子網(wǎng)掩碼,默認(rèn)分別為192.168.4.1 192.168.4.1 255.255.255.0;
      • bool softAPdisconnect(bool wifioff = false)
        關(guān)閉當(dāng)前AP,若wifioff為true則還將關(guān)閉網(wǎng)絡(luò)功能;
      • uint8_t softAPgetStationNum()
        返回連接到AP的客戶端數(shù)量;
      • IPAddress softAPIP()
        返回當(dāng)前模塊IP
      • const char * softAPgetHostname()
        返回主機(jī)名字
      • bool softAPsetHostname(const char * hostname)
        設(shè)置主機(jī)名字
      • uint8_t* softAPmacAddress(uint8_t* mac)
        String softAPmacAddress(void)
        返回mac地址

      使用示例

      使用下面代碼進(jìn)行測試:

      #include <WiFi.h>
      
      IPAddress local_IP(192,168,4,22);
      IPAddress gateway(192,168,4,22);
      IPAddress subnet(255,255,255,0);
      
      const char *ssid = "ESP32_AP_TEST";
      const char *password = "12345678";
      
      void setup()
      {
        Serial.begin(115200);
        Serial.println();
        
        WiFi.mode(WIFI_AP); //設(shè)置工作在AP模式
      
        WiFi.softAPConfig(local_IP, gateway, subnet); //設(shè)置AP地址
        while(!WiFi.softAP(ssid, password)){}; //啟動(dòng)AP
        Serial.println("AP啟動(dòng)成功");
      
        Serial.print("IP address: ");
        Serial.println(WiFi.softAPIP()); // 打印IP地址
      
        WiFi.softAPsetHostname("myHostName"); //設(shè)置主機(jī)名
        Serial.print("HostName: ");
        Serial.println(WiFi.softAPgetHostname()); //打印主機(jī)名
      
        Serial.print("mac Address: ");
        Serial.println(WiFi.softAPmacAddress()); //打印mac地址
      }
      
      void loop()
      {
        delay(1000);
        Serial.println(WiFi.softAPgetStationNum()); //打印客戶端連接數(shù)
      }
      

      在這里插入圖片描述
      上面測試時(shí)用電腦連接了一次該AP網(wǎng)絡(luò),然后斷開,圖中能看得到接入客戶端數(shù)量的變化;

      連接網(wǎng)絡(luò)(STA)

      基礎(chǔ)使用

      連接到網(wǎng)絡(luò)也只需要兩步:

      1. 引用WiFi庫#include <WiFi.h>;
      2. 連接到網(wǎng)絡(luò)WiFi.begin(ssid, password);;

      將下面代碼上傳到模塊中:

      #include <WiFi.h>
      
      const char *ssid = "********"; //你的網(wǎng)絡(luò)名稱
      const char *password = "********"; //你的網(wǎng)絡(luò)密碼
      
      void setup()
      {
        Serial.begin(115200);
        Serial.println();
      
        WiFi.begin(ssid, password); //連接網(wǎng)絡(luò)
      
        while (WiFi.status() != WL_CONNECTED) //等待網(wǎng)絡(luò)連接成功
        {
          delay(500);
          Serial.print(".");
        }
        Serial.println("WiFi connected!");
      
        Serial.println("IP address: ");
        Serial.println(WiFi.localIP()); //打印模塊IP
      }
      
      void loop()
      {
      }
      

      在這里插入圖片描述

      常用方法說明

      • 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)
        該方法用來接入網(wǎng)絡(luò);
      • bool config(IPAddress local_ip, IPAddress gateway, IPAddress subnet, IPAddress dns1 = (uint32_t)0x00000000, IPAddress dns2 = (uint32_t)0x00000000)
        設(shè)置網(wǎng)絡(luò)地址;
      • bool disconnect(bool wifioff = false, bool eraseap = false)
        斷開網(wǎng)絡(luò)連接,若wifioff為true則還將關(guān)閉網(wǎng)絡(luò)功能,若eraseap為true則將清除保存于flash中的網(wǎng)絡(luò)參數(shù);
      • bool isConnected()
        返回是否已接入網(wǎng)絡(luò);
      • bool setAutoReconnect(bool autoReconnect)
        設(shè)置斷網(wǎng)自動(dòng)重連接;
      • bool getAutoReconnect()
        返回是否自動(dòng)重連接;
      • IPAddress localIP()
        返回模塊地址;
      • IPAddress subnetMask()
        返回子網(wǎng)掩碼;
      • IPAddress gatewayIP()
        返回網(wǎng)關(guān)地址;
      • IPAddress dnsIP(uint8_t dns_no = 0)
        返回DNS地址;
      • uint8_t * macAddress(uint8_t* mac)
        String macAddress()
        返回MAC地址;
      • const char * getHostname()
        返回主機(jī)名字;
      • bool setHostname(const char * hostname)
        設(shè)置主機(jī)名字;
      • wl_status_t status()
        返回聯(lián)網(wǎng)狀態(tài),狀態(tài)如下:
        255:WL_NO_SHIELD不用在意(兼容WiFi Shield而設(shè)計(jì))
        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斷開連接;

      使用示例

      使用下面代碼進(jìn)行測試:

      #include <WiFi.h>
      
      const char *ssid = "********";
      const char *password = "********";
      
      void setup()
      {
        Serial.begin(115200);
        Serial.println();
      
        WiFi.mode(WIFI_STA); //設(shè)置工作在STA模式
      
        WiFi.begin(ssid, password); //連接網(wǎng)絡(luò)
      
        while (!WiFi.isConnected()) //等待網(wǎng)絡(luò)連接成功
        {
          delay(500);
          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("dns: ");
        Serial.println(WiFi.dnsIP()); //打印DNS地址
      
        Serial.print("mac Address: ");
        Serial.println(WiFi.macAddress()); //打印mac地址
      
        WiFi.setHostname("myHostName"); //設(shè)置主機(jī)名
        Serial.print("HostName: ");
        Serial.println(WiFi.getHostname()); //打印主機(jī)名
      
        Serial.println(WiFi.status());
        WiFi.disconnect(); //斷開當(dāng)前網(wǎng)絡(luò)
        delay(1000);
        Serial.println(WiFi.status());
      }
      
      void loop()
      {
      }
      

      在這里插入圖片描述

      掃描網(wǎng)絡(luò)

      有時(shí)候我們需要先搜索環(huán)境中有哪些網(wǎng)絡(luò),然后再進(jìn)行下一步動(dòng)作。

      同步搜索

      使用下面代碼搜索并打印搜索到的網(wǎng)絡(luò)信息:

      #include <WiFi.h>
      
      void setup()
      {
        Serial.begin(115200);
        Serial.println();
      
        WiFi.mode(WIFI_STA); //設(shè)置為STA模式
        WiFi.disconnect();   //斷開當(dāng)前可能的連接
        delay(100);
      
        Serial.println("scan start");
        int n = WiFi.scanNetworks(); //掃描并返回搜索到的網(wǎng)絡(luò)數(shù)量,該方法默認(rèn)會(huì)阻塞
        Serial.println("scan done");
        if (n != 0)
        {
          Serial.print(n);
          Serial.println(" networks found");
          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);
          }
        }
      }
      
      void loop()
      {
      }
      

      在這里插入圖片描述
      上面示例為同步搜索,同步搜索在執(zhí)行WiFi.scanNetworks()語句時(shí)會(huì)阻塞程序(默認(rèn)情況下會(huì)阻塞約4秒,秒,理論值)。

      異步搜索

      使用下面代碼進(jìn)行異步搜索,異步搜索不會(huì)阻塞程序運(yùn)行:

      #include <WiFi.h>
      
      void setup()
      {
        Serial.begin(115200);
        Serial.println();
      
        WiFi.mode(WIFI_STA); //設(shè)置為STA模式
        WiFi.disconnect();   //斷開當(dāng)前可能的連接
        delay(100);
      
        Serial.println("開始掃描");
        WiFi.scanNetworks(true); //啟動(dòng)異步掃描
      }
      
      void loop()
      {
        delay(1000);
        int n = WiFi.scanComplete(); //獲取掃描狀態(tài)
        if (n >= 0)
        {
          Serial.println("掃描完成");
          for (int i = 0; i < 3; ++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("未進(jìn)行掃描");
        }
      }
      
      

      在這里插入圖片描述

      常用方法說明

      • int16_t scanNetworks(bool async = false, bool show_hidden = false, bool passive = false, uint32_t max_ms_per_chan = 300)
        啟動(dòng)搜索,各項(xiàng)參數(shù)如下:
        async:異步掃描,該值為true時(shí)將啟動(dòng)異步掃描,該方法將不阻塞;
        show_hidden:是否掃描不廣播的網(wǎng)絡(luò);
        passive:影響掃描速度,該值為true時(shí)掃描速度較快(不確定);
        max_ms_per_chan:每通道掃描時(shí)間;
      • int16_t scanComplete()
        異步模式下用于獲取掃描到的網(wǎng)絡(luò)數(shù)量,如果返回值為-1,表示還在進(jìn)行掃描,如果返回值為-1,表示未進(jìn)行掃描或掃描失??;
      • void scanDelete()
        刪除內(nèi)存中的掃描結(jié)果;
      • String SSID(uint8_t networkItem)
        返回掃描到的網(wǎng)絡(luò)名稱;
      • wifi_auth_mode_t encryptionType(uint8_t networkItem)
        返回掃描到的網(wǎng)絡(luò)加密類型;
      • int32_t RSSI(uint8_t networkItem)
        返回掃描到的網(wǎng)絡(luò)信號強(qiáng)度;
      • int32_t channel(uint8_t networkItem)
        返回掃描到的網(wǎng)絡(luò)信道號;

      通用WiFi方法

      • int32_t channel()
        返回當(dāng)前信道;
      • void persistent(bool persistent)
        設(shè)置是否將WiFi模式、SSID、密碼、自動(dòng)重連等信息存儲于flash中,默認(rèn)為true;
      • bool mode(wifi_mode_t)
        設(shè)置WiFi工作模式,參數(shù)可選WIFI_OFF WIFI_STA WIFI_AP WIFI_AP_STA;
      • wifi_mode_t getMode()
        返回WiFi工作模式;
      • bool enableSTA(bool enable)
        使能/失能STA模式;
      • bool enableAP(bool enable)
        使能/失能AP模式;
      • bool setSleep(bool enable)
        使能/失能休眠(僅STA模式);
      • bool getSleep()
        返回時(shí)候開啟休眠;
      • bool setTxPower(wifi_power_t power)
        設(shè)置WiFi發(fā)射功率,默認(rèn)為WIFI_POWER_19_5dBm(最大值);
      • wifi_power_t getTxPower()
        返回WiFi發(fā)射功率;

      WiFi事件

      在網(wǎng)絡(luò)出現(xiàn)變化時(shí)會(huì)觸發(fā)事件,用戶可以在事件發(fā)生時(shí)對不同的情況進(jìn)行處理。

      事件列表

      • SYSTEM_EVENT_WIFI_READY < ESP32 WiFi ready
      • SYSTEM_EVENT_SCAN_DONE < ESP32 finish scanning AP
      • SYSTEM_EVENT_STA_START < ESP32 station start
      • SYSTEM_EVENT_STA_STOP < ESP32 station stop
      • SYSTEM_EVENT_STA_CONNECTED < ESP32 station connected to AP
      • SYSTEM_EVENT_STA_DISCONNECTED < ESP32 station disconnected from AP
      • SYSTEM_EVENT_STA_AUTHMODE_CHANGE < the auth mode of AP connected by ESP32 station changed
      • SYSTEM_EVENT_STA_GOT_IP < ESP32 station got IP from connected AP
      • SYSTEM_EVENT_STA_LOST_IP < ESP32 station lost IP and the IP is reset to 0
      • SYSTEM_EVENT_STA_WPS_ER_SUCCESS < ESP32 station wps succeeds in enrollee mode
      • SYSTEM_EVENT_STA_WPS_ER_FAILED < ESP32 station wps fails in enrollee mode
      • SYSTEM_EVENT_STA_WPS_ER_TIMEOUT < ESP32 station wps timeout in enrollee mode
      • SYSTEM_EVENT_STA_WPS_ER_PIN < ESP32 station wps pin code in enrollee mode
      • SYSTEM_EVENT_AP_START < ESP32 soft-AP start
      • SYSTEM_EVENT_AP_STOP < ESP32 soft-AP stop
      • SYSTEM_EVENT_AP_STACONNECTED < a station connected to ESP32 soft-AP
      • SYSTEM_EVENT_AP_STADISCONNECTED < a station disconnected from ESP32 soft-AP
      • SYSTEM_EVENT_AP_PROBEREQRECVED < Receive probe request packet in soft-AP interface
      • SYSTEM_EVENT_GOT_IP6 < ESP32 station or ap or ethernet interface v6IP addr is preferred
      • SYSTEM_EVENT_ETH_START < ESP32 ethernet start
      • SYSTEM_EVENT_ETH_STOP < ESP32 ethernet stop
      • SYSTEM_EVENT_ETH_CONNECTED < ESP32 ethernet phy link up
      • SYSTEM_EVENT_ETH_DISCONNECTED < ESP32 ethernet phy link down
      • SYSTEM_EVENT_ETH_GOT_IP < ESP32 ethernet got IP from connected AP
      • SYSTEM_EVENT_MAX

      注冊及刪除

      • wifi_event_id_t onEvent(WiFiEventCb cbEvent, system_event_id_t event = SYSTEM_EVENT_MAX)
        wifi_event_id_t onEvent(WiFiEventFuncCb cbEvent, system_event_id_t event = SYSTEM_EVENT_MAX)
        wifi_event_id_t onEvent(WiFiEventSysCb cbEvent, system_event_id_t event = SYSTEM_EVENT_MAX)
        使用上面方法用來注冊事件;
      • void removeEvent(WiFiEventCb cbEvent, system_event_id_t event = SYSTEM_EVENT_MAX)
        void removeEvent(WiFiEventSysCb cbEvent, system_event_id_t event = SYSTEM_EVENT_MAX)
        void removeEvent(wifi_event_id_t id)
        使用上面方法用來刪除已注冊的事件;

      使用示例

      使用下面代碼上傳至模塊中:

      #include <WiFi.h>
      
      const char *ssid = "********";
      const char *password = "********";
      
      void myEvent1(WiFiEvent_t event) //事件回調(diào)函數(shù)
      {
        switch (event)
        {
        case SYSTEM_EVENT_STA_CONNECTED:
          Serial.println("已連接到網(wǎng)絡(luò)");
          break;
        default:
          break;
        }
      }
      
      void myEvent2(WiFiEvent_t event, WiFiEventInfo_t info) //事件回調(diào)函數(shù)
      {
        Serial.println("獲取到IP");
      }
      
      void setup()
      {
        Serial.begin(115200);
        Serial.println();
      
        WiFi.disconnect(true); //關(guān)閉網(wǎng)絡(luò)
      
        WiFi.onEvent(myEvent1); //注冊事件方法一
      
        WiFi.onEvent(myEvent2, WiFiEvent_t::SYSTEM_EVENT_STA_GOT_IP); //注冊事件方法二
      
        WiFiEventId_t myEvent3ID = WiFi.onEvent( //注冊事件方法三
            [](WiFiEvent_t event, WiFiEventInfo_t info) {
              Serial.print("網(wǎng)絡(luò)連接已斷開");
            },
            WiFiEvent_t::SYSTEM_EVENT_STA_DISCONNECTED);
      
        WiFi.mode(WIFI_STA);        //設(shè)置工作在STA模式
        WiFi.begin(ssid, password); //連接網(wǎng)絡(luò)
      
        while (!WiFi.isConnected()) //等待網(wǎng)絡(luò)連接成功
        {
          delay(500);
        }
      
        delay(1000);
        WiFi.disconnect(); //斷開當(dāng)前網(wǎng)絡(luò)
      
        //WiFi.removeEvent(myEvent3ID); //刪除事件
      }
      
      void loop()
      {
      }
      

      在這里插入圖片描述

      總結(jié)

      WiFi功能是其它面向用戶的網(wǎng)絡(luò)應(yīng)用的基礎(chǔ),在學(xué)會(huì)使用這部分功能后就能夠真正開始開發(fā)網(wǎng)絡(luò)應(yīng)用了。

      更多內(nèi)容參考如下:
      https://github.com/espressif/arduino-esp32/tree/master/libraries/WiFi

        本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多