ESP8266開發之旅 網絡篇④ Station——ESP8266WiFiSTA庫的使用

1. 前言

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

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

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

2. 回顧Station模式 —— 我想連上誰

    Station模式又叫作站點工做模式,相似於無線終端,有圖有真相:
Station模式又叫作站點工做模式,相似於無線終端,有圖有真相:
image
    處於Station模式下的ESP8266,能夠鏈接到AP。經過Station(簡稱爲「STA」)模式,ESP8266做爲客戶端鏈接到路由的wifi信號。 如下黑色字體內容摘錄於博主自建qq羣裏面在arduino 聯網.pdf文件,博主以爲講得挺生動,故分享給你們:服務器

  1. 首先AP發出信標幀(beacon),意思就是我在這裏,誰來泡我啊,移動工做站也會發出探(probe)幀,意思是有誰我能夠泡啊,每隔必定時間發出一次。(後面會講到Scan功能)
  2. 因此,根據這一點,能夠產生不少有價值的應用。好比你的帶WiFi功能的手機,即便在不鏈接wifi的狀況下,只要打開WiFi功能,就能夠被路由器截獲這幀信息,路由器收集以後,你的信息就會被一個審計的東西發到服務器上,你手機號xxx上線時間xxx下線時間xxx都瀏覽了哪些網頁,WiFi創建鏈接過程都一目瞭然,你的位置也全都暴露了,這就叫WiFi探針。具體流程以下所示
  • STA --------> Probe Request ----------> AP
  • STA <-------- Probe Response <---------- AP,這個是由wifi返回的應答幀;
    接下來是身份驗證過程,可使用諸如WEP、WEP二、WPA等加密方式應用到認證請求上:
  • STA --------> Authentication Request ----------> AP
    認證請求中包含認證Auth類型,OpenSystem,sharedKey等信息,路由器返回認證結果:
  • STA <-------- Authentication Response <---------- AP
    鏈接請求:
  • STA --------> Association Request ----------> AP
    請求與AP創建關聯,從而能夠進行數據交互;
    認證經過鏈接請求OK返回。
  • STA <-------- Association Response <---------- AP

    經過這個鏈接過程分析,也證實了咱們常常聽到的一句話,不要輕易鏈接不明WiFi熱點,各類盜取信息層出不窮。
    同時,學過網絡的同窗都知道,每臺設備都會有個一個IP地址,用來在整個網絡環境下的惟一標識。
    而處於Station模式下的ESP8266,可使用DHCP Client的方式,由上級路由分配的ip,或者設置成靜態ip。
    若是是採用DHCP分配的方式,獲取的ip是動態的,在一些須要知道設備ip才能通訊的場合下,就須要經過其餘手段來獲取ip(一種思路是經過訪問webserver去獲取模塊信息);
    若是是採用設置靜態ip的方式,那麼就有一個要求前提,要求鏈接AP設置的網段和靜態的要一致,在不能固定AP網段的狀況下,這種方式不可取。
    Station模式下的WiFi模塊,有幾個特色,以便用來管理WiFi鏈接:網絡

  1. 當最近使用的可接入點鏈接斷開,但後面從新可用,那麼ESP8266會自動去從新鏈接它(名詞解析,最近使用的可接入點,就是ESP8266 最後鏈接的WiFi熱點);
  2. 第一點說到的狀況,對於ESP8266模塊從新啓動也同樣適用;
  3. 這兩點實現的原理就是:ESP8266會把最近使用的可接入點的校驗信息(ssid帳號和psw密碼)會存到flash 存儲中。使用保存在flash中的校驗信息,ESP8266就能夠從新鏈接到最近使用的可接入點,儘管你再次改變代碼燒寫進去,只要你不改變WiFi原來的工做模式和校驗信息(說簡單點就是,若是你燒寫代碼不擦除全部flash空間而且設置了自動鏈接,那麼在仍然是station模式下就會自動鏈接wifi熱點,不過在這裏,博主建議你們在begin以前先調用 WiFi.disconnect(),能夠避免一些奇怪的鏈接問題)。

3. ESP8266WiFiSTA庫

    有了前面的理論基礎,那麼咱們開始詳解一下ESP8266 station模式的專用庫——ESP8266WiFiSTA庫,你們使用的時候不須要函數

#include <ESP8266WiFiSTA.h>

    只須要引入oop

#include<ESP8266WiFi.h>

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

  1. 第一部分方法,和一個接入點(Access Point,wifi熱點)創建鏈接;
  2. 第二部分方法,管理第一部分方法創建的鏈接;
  3. 第三部分方法,提供一些關於這個鏈接的信息,包括MAC地址、IP地址等;
  4. 第四部分方法,提供一些備用方法去鏈接WiFi-Protected Setup(WPS)以及智能配置方法(SmartConfig);

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

3.1 第一部分方法——創建鏈接

3.1.1 begin —— 創建鏈接

    創建鏈接,ESP8266模塊切換工做模式爲Station模式。
    會用到如下方法:ui

class ESP8266WiFiSTAClass {
        // ----------------------------------------------------------------------------------------------
        // ---------------------------------------- STA function ----------------------------------------
        // ----------------------------------------------------------------------------------------------
    .......
    public:

        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);
        wl_status_t begin();
    .......
};

下面是函數詳解:google

/**
* 切換工做模式到STA模式,並自動鏈接到最近接入的wifi熱點
* @param void
* @return void
* @note 調用這個方法就會切換到STA模式,而且鏈接到最近使用的接入點(會從flash中讀取以前存儲的配置信息)
*       若是沒有配置信息,那麼這個方法基本上沒有什麼用。
*/
wl_status_t begin()
 
/**
* 切換工做模式到STA模式,並根據connect屬性來判斷是否鏈接wifi
* @param ssid       wifi熱點名字
* @param password   wifi熱點密碼
* @param channel    wifi熱點的通道號,用特定通訊通訊,可選參數
* @param bssid      wifi熱點的mac地址,可選參數
* @param connect    boolean參數,默認等於true,當設置爲false,不會去鏈接wifi熱點,會創建module保存上面參數
* @return wl_status_t  wifi狀態
* @note 調用這個方法就會切換到STA模式。
*       若是connect等於true,會鏈接到ssid的wifi熱點。
*       若是connect等於false,不會鏈接到ssid的wifi熱點,會創建module保存上面參數。
*/
wl_status_t begin(char* ssid, char *passphrase = NULL, int32_t channel = 0, const uint8_t* bssid = NULL, bool connect = true

注意點:

  • 若是ESP8266模塊以前處於AP模式,那麼當你調用begin()有可能進入到STA+softAP模式;
  • 當你發現一些操做異常,那麼你就檢測一下當前處於什麼模式(WiFi.mode());

3.1.2 config —— 配置IP地址

/**
* 禁止DHCP client,設置station 模式下的IP配置
* @param  local_ip    station固定的ip地址
* @param  gateway     網關
* @param  subnet      子網掩碼
* @param  dns1,dns2  可選參數定義域名服務器(dns)的ip地址,這些域名服務器
*                     維護一個域名目錄(如www.google.co.uk),並將它們翻譯成ip地址  
* @return boolean值,若是配置成功,返回true;
*         若是配置沒成功(模塊沒處於station或者station+soft AP模式),返回false;
*/
bool config(IPAddress local_ip, IPAddress gateway, IPAddress subnet, IPAddress dns1 = (uint32_t)0x00000000, IPAddress dns2 = (uint32_t)0x00000000)

注意點:

  • 有着固定IP配置地址的station,一般會更快鏈接上網絡,緣由是經過DHCP client得到IP配置這一步被跳過了。若是你把三個參數(local_ip, gateway and subnet)設置爲0.0.0.0,那麼它會從新啓動DHCP,這時你須要從新鏈接wifi以拿到最新的IP。

3.2 第二部分方法——管理鏈接

3.2.1 reconnect —— 從新鏈接網絡

函數講解:

/**
* 斷開鏈接而且從新鏈接station到同一個AP
* @param void
* @return false or true
*         返回false,意味着ESP8266不處於STA模式或者說Station在此以前沒有鏈接到一個可接入點。
*         返回true,意味着已經成功從新啓動鏈接,可是用戶仍應該去檢測網絡鏈接狀態指導WL_CONNECTED。
*/
bool reconnect()

案例使用:

/**
* 使用案例
*/
WiFi.reconnect();
while (WiFi.status() != WL_CONNECTED)
{
  delay(500);
  Serial.print(".");
}

3.2.2 disconnect —— 斷開網絡鏈接

函數講解:

/**
* 斷開wifi鏈接,設置當前配置SSID和pwd爲null
* @param wifioff 可選參數,設置爲true,那麼就會關閉Station模式
* @return false or true 返回wl_status_t狀態
*/
bool disconnect(bool wifioff = false);

注意點:

  • 調用該函數將會清掉以前最近一個鏈接點信息(wifi熱點信息)。查看函數源碼:
/**
 * Disconnect from the network
 * @param wifioff
 * @return  one value of wl_status_t enum
 */
bool ESP8266WiFiSTAClass::disconnect(bool wifioff) {
    bool ret;
    struct station_config conf;
    /**如下兩步爲清除最近鏈接點信息*/
    *conf.ssid = 0;
    *conf.password = 0;

    ETS_UART_INTR_DISABLE();
    if(WiFi._persistent) {
        wifi_station_set_config(&conf);
    } else {
        wifi_station_set_config_current(&conf);
    }
    ret = wifi_station_disconnect();
    ETS_UART_INTR_ENABLE();

    if(wifioff) {
        WiFi.enableSTA(false);
    }

    return ret;
}
  • 對於STA模式下若是出現WiFi帳號密碼正確的前提下仍然鏈接不上WiFi熱點,能夠嘗試在begin方法以前調用該方法。固然,博主建議在begin以前都儘可能調用該方法。

3.2.3 isConnected —— 是否鏈接上網絡

函數講解:

/**
* 判斷STA模式下是否鏈接上AP
* @return 若是STA鏈接上AP,那麼就返回true
*/
bool isConnected();

3.2.4 setAutoConnect —— 設置是否自動鏈接到最近接入點

函數講解:

/**
* 當電源啓動後,設置ESP8266在STA模式下是否自動鏈接flash中存儲的AP
* @param autoConnect bool 默認是自動鏈接
* @return 返回保存狀態 true or false
*/
bool setAutoConnect(bool autoConnect);

3.2.5 getAutoConnect —— 判斷是否設置了自動鏈接

函數講解:

/**
* 檢測ESP8266 station模式下是否啓動自動鏈接
* @return 返回自動鏈接狀態 true or false
*/
bool getAutoConnect();

3.2.6 setAutoReconnect —— 設置是否自動從新鏈接到最近接入點

函數講解:

/**
* 設置當斷開鏈接的時候是否自動重連
* @param autoConnect bool
* @return 返回保存狀態 true or false
*/
bool setAutoReconnect(bool autoReconnect);

注意點:

  • 若是在網絡已經斷開了以後纔去設置setAutoReconnect(true),這是無效的

3.2.7 waitForConnectResult —— 等待網絡鏈接結果

函數講解:

/**
* 等待直到ESP8266鏈接AP返回結果
* @return uint8_t 鏈接結果
*         1.WL_CONNECTED 成功鏈接
*         2.WL_NO_SSID_AVAIL  匹配SSID失敗(帳號錯誤)
*         3.WL_CONNECT_FAILED psw錯誤
*         4.WL_IDLE_STATUS 當wi-fi正在不一樣的狀態中變化
*         5.WL_DISCONNECTED 這個模塊沒有配置STA模式
*/
uint8_t waitForConnectResult();

3.3 第三部分方法——鏈接信息

    提供一些關於這個鏈接的信息,包括MAC地址、IP地址等;

3.3.1 macAddress —— 獲取mac地址

獲取mac地址有2個函數,請看函數講解:

/**
 * 獲取ESP station下的Mac地址
 * @param mac   uint8_t數組的指針,數組長度爲Mac地址的長度,這裏爲6
 * @return      返回uint8_t數組的指針
 */
uint8_t * macAddress(uint8_t* mac);

/**
 * 獲取ESP station下的Mac地址
 * @return  返回String的Mac地址
 */
String macAddress();

應用實例:

//實例代碼1 這只是部分代碼 不能直接使用
if (WiFi.status() == WL_CONNECTED)
{
  uint8_t macAddr[6];
  WiFi.macAddress(macAddr);
  Serial.printf("Connected, mac address: %02x:%02x:%02x:%02x:%02x:%02x\n", macAddr[0], macAddr[1], macAddr[2], macAddr[3], macAddr[4], macAddr[5]);
  //Connected, mac address: 5C:CF:7F:08:11:17
}

//實例代碼2 這只是部分代碼 不能直接使用
if (WiFi.status() == WL_CONNECTED)
{
  Serial.printf("Connected, mac address: %s\n", WiFi.macAddress().c_str());
  ////Connected, mac address: 5C:CF:7F:08:11:17
}

3.3.2 localIP —— 獲取IP地址

函數講解:

/**
 * 返回ESP8266 STA模式下的IP地址
 * @return IP地址
 */
IPAddress localIP();

應用實例:

//實例代碼 這只是部分代碼 不能直接使用
if (WiFi.status() == WL_CONNECTED)
{
  Serial.print("Connected, IP address: ");
  Serial.println(WiFi.localIP());
  //Connected, IP address: 192.168.1.10
}

3.3.3 subnetMask —— 獲取IP地址

函數講解:

/**
 * 獲取子網掩碼的地址
 * @return 返回子網掩碼的IP地址
 */
IPAddress subnetMask();

應用實例:

//實例代碼 這只是部分代碼 不能直接使用
Serial.print("Subnet mask: ");
Serial.println(WiFi.subnetMask());
//Subnet mask: 255.255.255.0

3.3.4 gatewayIP —— 獲取網關地址

函數講解:

/**
 * 獲取網關IP地址
 * @return 返回網關IP地址
 */
IPAddress gatewayIP();

應用實例:

//實例代碼 這只是部分代碼 不能直接使用
Serial.printf("Gataway IP: %s\n", WiFi.gatewayIP().toString().c_str());
//Gataway IP: 192.168.1.9

3.3.5 dnsIP —— 獲取dns地址

函數講解:

/**
 * 獲取DNS ip地址
 * @param dns_no dns序列號
 * @return 返回DNS服務的IP地址
 */
IPAddress dnsIP(uint8_t dns_no = 0);

應用實例:

/實例代碼 這只是部分代碼 不能直接使用
Serial.print("DNS #1, #2 IP: ");
WiFi.dnsIP().printTo(Serial);
Serial.print(", ");
WiFi.dnsIP(1).printTo(Serial);
Serial.println();
//DNS #1, #2 IP: 62.179.1.60, 62.179.1.61

3.3.6 hostname —— 獲取host名字

函數講解:

/**
 * 獲取ESP8266 station DHCP的主機名
 * @return 主機名
 */
String hostname();

3.3.7 hostname(name) —— 設置host名字

設置host名字,有3個可用函數,請看函數講解:

/**
 * 設置ESP8266 station DHCP的主機名
 * @param aHostname 最大長度:32
 * @return ok
 */
bool hostname(char* aHostname);
bool hostname(const char* aHostname);
bool hostname(String aHostname);

應用實例:

//實例代碼 這只是部分代碼 不能直接使用
Serial.printf("Default hostname: %s\n", WiFi.hostname().c_str());
WiFi.hostname("Station_Tester_02");
Serial.printf("New hostname: %s\n", WiFi.hostname().c_str());
//Default hostname: ESP_081117
//New hostname: Station_Tester_02

3.3.8 status —— 獲取當前wifi鏈接狀態

函數講解:

/**
 * 返回wifi的鏈接狀態
 * @return 返回wl_status_t中定義的其中一值,wl_status_t在 wl_definitions.h中定義
 */
wl_status_t status();

3.3.9 SSID —— 獲取wifi網絡的名字

函數講解:

/**
 * 返回當前通訊網絡的SSID
 * @return SSID
 */
String SSID() const;

應用實例:

//實例代碼 這只是部分代碼 不能直接使用
Serial.printf("SSID: %s\n", WiFi.SSID().c_str());
//SSID: sensor-net

3.3.10 psk —— 獲取wifi網絡密碼

函數講解:

/**
 * 返回當前通訊網絡的密碼
 * @return psk
 */
String psk() const;

3.3.11 BSSIDstr —— 獲取wifi網絡macaddress

函數講解:

/**
 * 返回當前通訊網絡的mac地址
 * @return bssid uint8_t *
 */
uint8_t * BSSID();
String BSSIDstr();

應用實例:

//實例代碼 這只是部分代碼 不能直接使用
Serial.printf("BSSID: %s\n", WiFi.BSSIDstr().c_str());
//BSSID: 00:1A:70E:C1:68

3.3.12 RSSI —— 獲取wifi網絡的信號強度

函數講解:

/**
 * Return the current network RSSI.返回當前通訊網絡的信號強度,單位是dBm
 * @return  RSSI value
 */
int32_t RSSI();

應用實例:

//實例代碼 這只是部分代碼 不能直接使用
Serial.printf("RSSI: %d dBm\n", WiFi.RSSI());
//RSSI: -68 dBm

3.4 第四部分方法——智能配置

    第四部分方法,提供一些備用遠程配置方法去鏈接WiFi-Protected Setup(WPS)以及智能配置方法(SmartConfig);

bool beginWPSConfig(void);
/**
 * 啓動 SmartConfig
 */
bool beginSmartConfig();
/**
 * 中止 SmartConfig
 */
bool stopSmartConfig();
/**
 * 查找SmartConfig狀態來決定是否中止配置
 * @return smartConfig Done
 */
bool smartConfigDone();

    這部分不是本篇的重點,暫時忽略,後續章節會詳細講解。

4. 實例操做

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

4.1 應用實例1

    statin模式下,建立一個鏈接到可接入點(wifi熱點),而且打印IP地址。
源碼:

/**
 * Demo1:
 *    statin模式下,建立一個鏈接到可接入點(wifi熱點),而且打印IP地址
 * @author 單片機菜鳥
 * @date 2019/09/02
 */
#include <ESP8266WiFi.h>
 
#define AP_SSID "TP-LINK_5344" //這裏改爲你的wifi名字
#define AP_PSW  "6206908you11011010"//這裏改爲你的wifi密碼
//如下三個定義爲調試定義
#define DebugBegin(baud_rate)    Serial.begin(baud_rate)
#define DebugPrintln(message)    Serial.println(message)
#define DebugPrint(message)    Serial.print(message)
 
void setup(){
  //設置串口波特率,以便打印信息
  DebugBegin(115200);
  //延時2s 爲了演示效果
  delay(2000);
  DebugPrintln("Setup start");
  //啓動STA模式,並鏈接到wifi網絡
  WiFi.begin(AP_SSID, AP_PSW);
 
  DebugPrint(String("Connecting to ")+AP_SSID);
  //判斷網絡狀態是否鏈接上,沒鏈接上就延時500ms,而且打出一個點,模擬鏈接過程
  //筆者擴展:加入網絡一直都連不上 是否能夠作個判斷,由大家本身實現
  while (WiFi.status() != WL_CONNECTED){
    delay(500);
    DebugPrint(".");
  }
  DebugPrintln("");
 
  DebugPrint("Connected, IP address: ");
  //輸出station IP地址,這裏的IP地址由DHCP分配
  DebugPrintln(WiFi.localIP());
  DebugPrintln("Setup End");
}
 
void loop() {
}

操做結果:
image

4.2 應用實例2

    statin模式下,配置IP地址,網關地址,子網掩碼,而且打印IP地址。
源碼:

/**
 * Demo2:
 *    statin模式下,配置IP地址,網關地址,子網掩碼,而且打印IP地址
 * @author 單片機菜鳥
 * @date 2019/09/02
 */
#include <ESP8266WiFi.h>
 
#define AP_SSID "TP-LINK_5344" //這裏改爲你的wifi名字
#define AP_PSW  "6206908you11011010"//這裏改爲你的wifi密碼
//如下三個定義爲調試定義
#define DebugBegin(baud_rate)    Serial.begin(baud_rate)
#define DebugPrintln(message)    Serial.println(message)
#define DebugPrint(message)    Serial.print(message)
 
IPAddress staticIP(192,168,1,22);//固定IP地址
IPAddress gateway(192,168,1,9);//網關地址
IPAddress subnet(255,255,255,0);//子網掩碼地址
 
void setup(){
  //設置串口波特率,以便打印信息
  DebugBegin(115200);
  //延時2s 爲了演示效果
  delay(2000);
  DebugPrintln("Setup start");
  //啓動STA模式,並鏈接到wifi網絡
  WiFi.begin(AP_SSID, AP_PSW);
  DebugPrint(String("Connecting to ")+AP_SSID);
  //配置網絡
  WiFi.config(staticIP,gateway,subnet);
  //判斷網絡狀態是否鏈接上,沒鏈接上就延時500ms,而且打出一個點,模擬鏈接過程
  //筆者擴展:加入網絡一直都連不上 是否能夠作個判斷,由大家本身實現
  while (WiFi.status() != WL_CONNECTED){
    delay(500);
    DebugPrint(".");
  }
  DebugPrintln("");
 
  DebugPrint("Connected, IP address: ");
  //輸出station IP地址,這裏的IP地址理論上就是上面配置的
  DebugPrintln(WiFi.localIP());
  DebugPrintln("Setup End");
}
 
void loop() {
}

操做結果:
image

4.3 應用實例3

    statin模式下,建立一個鏈接到可接入點(wifi熱點),而且打印station信息。
源碼:

/**
 * Demo3:
 *    statin模式下,建立一個鏈接到可接入點(wifi熱點),而且打印station信息
 * @author 單片機菜鳥
 * @date 2019/09/02
 */
#include <ESP8266WiFi.h>
 
#define AP_SSID "TP-LINK_5344" //這裏改爲你的wifi名字
#define AP_PSW  "6206908you11011010" //這裏改爲你的wifi密碼
//如下三個定義爲調試定義
#define DebugBegin(baud_rate)    Serial.begin(baud_rate)
#define DebugPrintln(message)    Serial.println(message)
#define DebugPrint(message)    Serial.print(message)
 
void setup(){
  //設置串口波特率,以便打印信息
  DebugBegin(115200);
  //延時2s 爲了演示效果
  delay(2000);
  DebugPrintln("Setup start");
  //啓動STA模式,並鏈接到wifi網絡
  WiFi.begin(AP_SSID, AP_PSW);
  //設置自動鏈接
  WiFi.setAutoConnect(true);
  //設置自動重連
  WiFi.setAutoReconnect(true);
  DebugPrint(String("Connecting to ")+AP_SSID);
  //判斷網絡狀態是否鏈接上,沒鏈接上就延時500ms,而且打出一個點,模擬鏈接過程
  //筆者擴展:加入網絡一直都連不上 是否能夠作個判斷,由大家本身實現
  while (WiFi.status() != WL_CONNECTED){
    delay(500);
    DebugPrint(".");
  }
  DebugPrintln("");
 
  DebugPrintln("rint Network Info:");
  if (WiFi.status() == WL_CONNECTED){
     //輸出mac地址
     DebugPrintln(String("Connected, mac address: ")+WiFi.macAddress().c_str());
     
     //輸出station IP地址,這裏的IP地址由DHCP分配
     DebugPrintln(String("Connected, IP address: ")+WiFi.localIP().toString());
     
     //輸出子網掩碼地址
     DebugPrintln(String("Subnet mask: ")+WiFi.subnetMask().toString());
     
     //輸出網關 IP地址
     DebugPrintln(String("Gataway IP: ")+WiFi.gatewayIP().toString());
     
     //輸出hostname
     DebugPrintln(String("Default hostname: ")+WiFi.hostname());
     //設置新的hostname
     WiFi.hostname("Station_host_博哥");
     DebugPrintln(String("New hostname: ")+WiFi.hostname());
     
     //輸出SSID
     DebugPrintln(String("SSID: ")+WiFi.SSID());
 
     //輸出psk
     DebugPrintln(String("psk: ")+WiFi.psk());
     
     //輸出BSSID
     DebugPrintln(String("BSSID: ")+WiFi.BSSIDstr());
     
     //輸出RSSI
     DebugPrintln(String("RSSI: ") + WiFi.RSSI() + " dBm");
  }
  
  DebugPrintln("Setup End");
}
 
void loop() {
}

操做結果:
image
注意點:

  • 方法裏面都是使用WiFi.xxxx,那麼這個WiFi是什麼鬼呢?樓主翻閱了源碼,給你們找到了它的定義地方:
    ESP8266WiFi.cpp文件的最後一行。
ESP8266WiFiClass WiFi;
  • 若是發現打印出來的信息不是指望的信息,能夠嘗試在方法後面加上toString,好比:
//舉個例子
WiFi.SSID() 改爲 WiFi.SSID().toString()

5. 總結

    本節主要是基於ESP8266WiFiSTA庫來說解Station模式下的函數使用,而且給你們提供了三個實例,至於更多例子我就不繼續舉例,只能說引導你們入門使用。

相關文章
相關標籤/搜索