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模式下的函数使用,而且给你们提供了三个实例,至于更多例子我就不继续举例,只能说引导你们入门使用。

相关文章
相关标签/搜索