在前面的篇章中,博主給你們講解了ESP8266的軟硬件配置以及基本功能使用,目的就是想讓你們有個初步認識。而且,博主一直重點強調 ESP8266 WiFi模塊有三種工做模式:api
任何基於ESP8266的WiFi功能開發,都是基於上面其中一種工做模式來進行開發。因此,它們是咱們WiFi基礎學習的重點。
本篇章將講解Soft-Ap模式。網絡
AP是Access Point簡稱,也就是訪問接入點,是網絡的中心節點。通常家庭的無線路由器就是一個AP,衆多站點(STA)加入到它所組成的無線網絡,網絡中的全部的通訊都經過AP來轉發完成。
其實生活中,類Soft-Access Point模式仍是應用很是普遍的。
好比你去網購,你和商家就是STA,快遞公司就是AP,負責把你下單的東西從商家傳送到你手上。
好比你在口碑買一個奶茶,你和奶茶店就是STA,跑腿平臺就是AP,負責把你的奶茶從奶茶店送到你手上。
老規矩,看看圖結構:
軟AP也叫作Soft-AP,硬件部分是一塊標準的無線網卡好比ESP8266,但其經過驅動程序使其提供與AP同樣的信號轉換、路由等功能。
與傳統AP相比,它的成本很低,功能上也能湊合。在基本功能上,Soft AP與AP並無太大的差異,不過由於用軟件來實現AP功能,SoftAP的接入能力和覆蓋範圍遠不如AP。
注意點:通常能同時鏈接到Soft-AP 的station的個數上線到8個,可是通常默認是4個。(至於爲何是4個,待會博主告訴你)app
有了前面的理論基礎,那麼咱們開始詳解一下ESP8266 soft-AP模式的專用庫——ESP8266WiFiAP庫,你們使用的時候不須要ide
#include <ESP8266WiFiAP.h>
只須要引入函數
#include<ESP8266WiFi.h>
至於緣由,敬請回顧 ESP8266開發之旅 網絡篇② ESP8266 工做模式與ESP8266WiFi庫。
首先,對於AP類庫的描述,能夠拆分爲三個部分:oop
講解以前,先瀏覽一下博主整理的百度腦圖,以便有個總體認識:
學習
函數講解: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);
函數說明:調試
/** * 創建一個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);
注意點:
函數說明:
/** * 配置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);
函數說明:
/** * 獲取鏈接到當前softAP的station或者client的數目 * @return Stations 數目 */ uint8_t softAPgetStationNum();
應用實例:
//實例代碼 這只是部分代碼 不能直接使用 Serial.printf("Stations connected to soft-AP = %d\n", WiFi.softAPgetStationNum());
函數說明:
/** * 關閉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; }
函數說明:
/** * 獲取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
函數說明:
/** * 獲取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());
函數說明:
/** * Get the configured(Not-In-Flash) softAP SSID name. * @return String SSID. */ String softAPSSID() const;
函數說明:
/** * Get the configured(Not-In-Flash) softAP PSK or PASSWORD. * @return String psk. */ String softAPPSK() const;
上面講了一堆方法理論的東西,下面咱們開始講解操做實例,博主儘可能都在代碼中註釋,直接看代碼就好。
/** * 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); }
本節主要是基於ESP8266WiFiAP庫來說解AP模式下的函數使用,而且給你們提供了一個實例,至於更多例子我就不繼續舉例,只能說引導你們入門使用。 STA篇和AP篇是基礎,重中之重,因此請認真翻閱。