ESP8266開發之旅 網絡篇③ Soft-AP——ESP8266WiFiAP庫的使用

1. 前言

    在前面的篇章中,博主給你們講解了ESP8266的軟硬件配置以及基本功能使用,目的就是想讓你們有個初步認識。而且,博主一直重點強調 ESP8266 WiFi模塊有三種工做模式:api

  1. Station模式,也叫站點模式;
  2. Soft-Access Point模式,也叫Soft-AP模式,能夠理解爲WiFi熱點模式;
  3. 以上兩種的集合模式,Station 兼Soft-Access Point,也是Mesh NetWork的實現基礎;

    任何基於ESP8266的WiFi功能開發,都是基於上面其中一種工做模式來進行開發。因此,它們是咱們WiFi基礎學習的重點。
    本篇章將講解Soft-Ap模式。網絡

2. 回顧Soft-AP模式 —— 誰想連上我

    AP是Access Point簡稱,也就是訪問接入點,是網絡的中心節點。通常家庭的無線路由器就是一個AP,衆多站點(STA)加入到它所組成的無線網絡,網絡中的全部的通訊都經過AP來轉發完成。
    其實生活中,類Soft-Access Point模式仍是應用很是普遍的。
    好比你去網購,你和商家就是STA,快遞公司就是AP,負責把你下單的東西從商家傳送到你手上。
    好比你在口碑買一個奶茶,你和奶茶店就是STA,跑腿平臺就是AP,負責把你的奶茶從奶茶店送到你手上。
    老規矩,看看圖結構:
image
    軟AP也叫作Soft-AP,硬件部分是一塊標準的無線網卡好比ESP8266,但其經過驅動程序使其提供與AP同樣的信號轉換、路由等功能。
    與傳統AP相比,它的成本很低,功能上也能湊合。在基本功能上,Soft AP與AP並無太大的差異,不過由於用軟件來實現AP功能,SoftAP的接入能力和覆蓋範圍遠不如AP。
    注意點:通常能同時鏈接到Soft-AP 的station的個數上線到8個,可是通常默認是4個。(至於爲何是4個,待會博主告訴你)app

3. ESP8266WiFiAP庫

    有了前面的理論基礎,那麼咱們開始詳解一下ESP8266 soft-AP模式的專用庫——ESP8266WiFiAP庫,你們使用的時候不須要ide

#include <ESP8266WiFiAP.h>

    只須要引入函數

#include<ESP8266WiFi.h>

    至於緣由,敬請回顧 ESP8266開發之旅 網絡篇② ESP8266 工做模式與ESP8266WiFi庫
    首先,對於AP類庫的描述,能夠拆分爲三個部分:oop

  1. 第一部分方法,創建AP網絡(Access Point,wifi熱點);
  2. 第二部分方法,管理第一部分方法創建的鏈接;
  3. 第三部分方法,獲取AP的信息,包括MAC地址、IP地址等;

    講解以前,先瀏覽一下博主整理的百度腦圖,以便有個總體認識:
image學習

3.1 第一部分方法——創建AP網絡

3.1.1 softAP —— 啓動免密碼wifi網絡

函數講解:ui

/**
 * 創建一個AP熱點
 * @param ssid              SSID帳號 (max 63 char,最大63個字符).
 * @param passphrase        密碼(對於WPA2加密類型最少8個字符,對於開放網絡設置爲NULL)
 * @param channel           WiFi 通道數字, 1 - 13.默認是1
 * @param ssid_hidden       WiFI是否須要隱藏 (0 = broadcast SSID, 1 = hide SSID),經過它設置別人是否能看到你的WiFi網絡
 * @param max_connection    最大的同時鏈接數  1 - 4.當超過這個數,再多的station想鏈接也只能等待
 * @param bool 返回設置soft-AP的結果
 */
bool softAP(const char* ssid, const char* passphrase = NULL, int channel = 1, int ssid_hidden = 0, int max_connection = 4);

應用實例:加密

//實例代碼 這只是部分代碼 不能直接使用
//開放網絡(所謂開放網絡也就是,不須要密碼,只須要知道AP名字就能夠了)
WiFi.softAP(ssid);

3.1.2 softAP —— 啓動校驗式wifi網絡

函數說明:調試

/**
 * 創建一個AP熱點
 * @param ssid              SSID帳號 (max 63 char,最大63個字符).
 * @param passphrase        密碼(對於WPA2加密類型最少8個字符,對於開放網絡設置爲NULL)
 * @param channel           WiFi 通道數字, 1 - 13.默認是1
 * @param ssid_hidden       WiFI是否須要隱藏 (0 = broadcast SSID, 1 = hide SSID),經過它設置別人是否能看到你的WiFi網絡
 * @param max_connection    最大的同時鏈接數  1 - 4.當超過這個數,再多的station想鏈接也只能等待
 * @param bool 返回設置soft-AP的結果
 */
bool softAP(const char* ssid, const char* passphrase = NULL, int channel = 1, int ssid_hidden = 0, int max_connection = 4);

應用實例:

//開放網絡(所謂開放網絡也就是,不須要密碼,只須要知道AP名字就能夠了)
WiFi.softAP(ssid);
//校驗式網絡(須要輸入帳號密碼),通道爲1,wifi不隱藏,最大鏈接數=4
WiFi.softAP(ssid, password);
//校驗式網絡(須要輸入帳號密碼),通道爲2,wifi隱藏,最大鏈接數=4
WiFi.softAP(ssid, password,2,1);

注意點:

  • SSID帳號 最大63個字符;
  • 密碼,對於WPA2加密類型最少8個字符,對於開放網絡設置爲NULL
  • 帳號密碼儘可能都是英文字符;

3.1.3 softAPConfig —— 配置AP網絡信息

函數說明:

/**
 * 配置AP信息
 * @param local_ip      AP ip地址
 * @param gateway       網關IP地址
 * @param subnet        子網掩碼
 * @note soft-AP 創建的網絡,默認的IP地址是192.168.4.1.
 */
bool softAPConfig(IPAddress local_ip, IPAddress gateway, IPAddress subnet);

3.2 第二部分方法——管理網絡

3.2.1 softAPgetStationNum —— 獲取鏈接到AP上的station數目

函數說明:

/**
 * 獲取鏈接到當前softAP的station或者client的數目
 * @return Stations 數目
 */
uint8_t softAPgetStationNum();

應用實例:

//實例代碼 這只是部分代碼 不能直接使用
Serial.printf("Stations connected to soft-AP = %d\n", WiFi.softAPgetStationNum());

3.2.2 softAPdisconnect —— 關閉AP模式

函數說明:

/**
 * 關閉AP
 * @param wifioff disable mode? true會調用 WiFi.enableAP(false);
 * @return one value of wl_status_t enum
 */
bool softAPdisconnect(bool wifioff = false);

函數源碼:

/**
 * Disconnect from the network (close AP)
 * @param wifioff disable mode?
 * @return one value of wl_status_t enum
 */
bool ESP8266WiFiAPClass::softAPdisconnect(bool wifioff) {
    bool ret;
    struct softap_config conf;
    /**清除最近配置的帳號密碼*/
    *conf.ssid = 0;
    *conf.password = 0;
    conf.authmode = AUTH_OPEN;
    ETS_UART_INTR_DISABLE();
    if(WiFi._persistent) {
        ret = wifi_softap_set_config(&conf);
    } else {
        ret = wifi_softap_set_config_current(&conf);
    }
    ETS_UART_INTR_ENABLE();

    if(!ret) {
        DEBUG_WIFI("[APdisconnect] set_config failed!\n");
    }

    if(ret && wifioff) {
        //禁止AP
        ret = WiFi.enableAP(false);
    }

    return ret;
}

3.3 第三部分方法——獲取信息

3.3.1 softAPIP —— 獲取AP的ip地址

函數說明:

/**
 * 獲取softAP的ip地址
 * @return IPAddress softAP IP
 */
IPAddress softAPIP();

應用實例:

//實例代碼 這只是部分代碼 不能直接使用
Serial.print("Soft-AP IP address = ");
Serial.println(WiFi.softAPIP());
//Soft-AP IP address = 192.168.4.1

3.3.2 softAPmacAddress —— 獲取AP的mac地址

函數說明:

/**
 * 獲取softAP MAC 地址.
 * @param mac   pointer to uint8_t array with length WL_MAC_ADDR_LENGTH
 * @return      pointer to uint8_t*
 */
uint8_t* softAPmacAddress(uint8_t* mac);

/**
 * 獲取softAP MAC 地址.
 * @return String mac
 */
String softAPmacAddress(void);

應用實例:

//實例代碼1 這只是部分代碼 不能直接使用
uint8_t macAddr[6];
WiFi.softAPmacAddress(macAddr);
Serial.printf("MAC address = %02x:%02x:%02x:%02x:%02x:%02x\n", macAddr[0], macAddr[1], macAddr[2], macAddr[3], macAddr[4], macAddr[5]);
//MAC address = 5e:cf:7f:8b:10:13

//實例代碼2 這只是部分代碼 不能直接使用
Serial.printf("MAC address = %s\n", WiFi.softAPmacAddress().c_str());

3.3.3 softAPSSID —— 獲取AP的SSID

函數說明:

/**
 * Get the configured(Not-In-Flash) softAP SSID name.
 * @return String SSID.
 */
String softAPSSID() const;

3.3.4 softAPPSK —— 獲取AP的PSK

函數說明:

/**
 * Get the configured(Not-In-Flash) softAP PSK or PASSWORD.
 * @return String psk.
 */
String softAPPSK() const;

4. 實例操做

    上面講了一堆方法理論的東西,下面咱們開始講解操做實例,博主儘可能都在代碼中註釋,直接看代碼就好。

4.1 實例源碼

/**
 * Demo:
 *    AP模式下,演示AP 函數方法的使用
 * @author 單片機菜鳥
 * @date 2019/09/02
 */
#include <ESP8266WiFi.h>
 
#define AP_SSID "AP_Test_博哥" //這裏改爲你的AP名字
#define AP_PSW  "12345678" //這裏改爲你的AP密碼 8位以上
//如下三個定義爲調試定義
#define DebugBegin(baud_rate)    Serial.begin(baud_rate)
#define DebugPrintln(message)    Serial.println(message)
#define DebugPrint(message)    Serial.print(message)
 
IPAddress local_IP(192,168,4,22);
IPAddress gateway(192,168,4,9);
IPAddress subnet(255,255,255,0);
 
void setup(){
  //設置串口波特率,以便打印信息
  DebugBegin(115200);
  //延時2s 爲了演示效果
  delay(2000);
  DebugPrint("Setting soft-AP configuration ... ");
  //配置AP信息
  WiFi.mode(WIFI_AP);
  DebugPrintln(WiFi.softAPConfig(local_IP, gateway, subnet) ? "Ready" : "Failed!");
  //啓動AP模式,並設置帳號和密碼
  DebugPrint("Setting soft-AP ... ");
  boolean result = WiFi.softAP(AP_SSID, AP_PSW);
  if(result){
    DebugPrintln("Ready");
    //輸出 soft-ap ip地址
    DebugPrintln(String("Soft-AP IP address = ") + WiFi.softAPIP());
    //輸出 soft-ap mac地址
    DebugPrintln(String("MAC address = ") + WiFi.softAPmacAddress().c_str());
  }else{
    DebugPrintln("Failed!");
  }
  DebugPrintln("Setup End");
}
 
void loop() {
  //不斷打印當前的station個數
  DebugPrintln(String("Stations connected =") + WiFi.softAPgetStationNum());
  delay(3000);
}

4.2 實例結果

image

5. 總結

    本節主要是基於ESP8266WiFiAP庫來說解AP模式下的函數使用,而且給你們提供了一個實例,至於更多例子我就不繼續舉例,只能說引導你們入門使用。 STA篇和AP篇是基礎,重中之重,因此請認真翻閱。

相關文章
相關標籤/搜索