https://blog.csdn.net/Naisu_kun/article/details/86079455

目的
WiFi在使用过程中并非会一直如希望般稳定运行的,为了应对这些情况就需要能够了解WiFi状态,并对WiFi突发事件作出响应。

WiFi其他方法
WiFi.status()
返回STA模式下WiFi状态,返回值如下:
0 : WL_IDLE_STATUS 正在WiFi工作模式间切换;
1 : WL_NO_SSID_AVAILin 无法访问设置的SSID网络;
3 : WL_CONNECTED 连接成功;
4 : WL_CONNECT_FAILED 密码不正确;
6 : WL_DISCONNECTED if module is not configured in station mode(实际测试下来有点看不懂);
WiFi.persistent(bool persistent)
该方法设置是否将WiFi参数保存于Flash中,默认为true,即在每次调用WiFi.begin()、WiFi.softAP()、WiFi.disconnect、WiFi.softAPdisconnect方法时都会将相关数据写入到Flash中;
如果使用该方法设置为false时,以上动作将不会把数据写入Flash中,仅仅改变内存中的WiFi设置;
WiFi.mode(m)
设置WiFi工作模式,参数可填写WIFI_AP、WIFI_STA、WIFI_AP_STA、WIFI_OFF;
WiFi.getMode()
返回当前WiFi工作模式;
bool setSleepMode (WiFiSleepType_t type, int listenInterval=0)
设置WiFi节电模式,该方法在esp8266-arduino core v2.5.0中有改动,详细可以参考下文链接;
WiFi事件响应
如目的所述WiFi在使用过程中并不是一直稳定的,在出现变化时会触发WiFi事件,我们就可以针对不同情况作出处理。不同的WiFi变化有不同的事件(WiFiEventHandler),所有事件都需要在注册后使用。

事件列表

onStationModeConnected (std::function< void(const WiFiEventStationModeConnected &)>)
onStationModeDisconnected (std::function< void(const WiFiEventStationModeDisconnected &)>)
onStationModeAuthModeChanged (std::function< void(const WiFiEventStationModeAuthModeChanged &)>)
onStationModeGotIP (std::function< void(const WiFiEventStationModeGotIP &)>)
onStationModeDHCPTimeout (std::function< void(void)>)
onSoftAPModeStationConnected (std::function< void(const WiFiEventSoftAPModeStationConnected &)>)
onSoftAPModeStationDisconnected (std::function< void(const WiFiEventSoftAPModeStationDisconnected &)>)

  

注册事件

使用WiFiEventHandler需要先声明,然后注册对应事件并加入事件触发时执行的操作:

//声明事件
WiFiEventHandler myEvent; //事件触发时执行的操作
void myHandler(const WiFiEventStationModeConnected& event)
{
//TODO
} //注册事件
myEvent = WiFi.onStationModeConnected(myHandler);

  

使用示例

使用下面代码上传至模块中:

#include <ESP8266WiFi.h>

const char *ssid = "********";
const char *password = "********"; WiFiEventHandler STAConnected;
WiFiEventHandler STADisconnected;
WiFiEventHandler STAGotIP; void ConnectedHandler(const WiFiEventStationModeConnected &event)
{
Serial.println(WiFi.status());
Serial.println("模块连接到网络");
} void DisconnectedHandler(const WiFiEventStationModeDisconnected &event)
{
Serial.println(WiFi.status());
Serial.println("模块从网络断开");
} void setup()
{
Serial.begin(115200);
Serial.println(); STAConnected = WiFi.onStationModeConnected(ConnectedHandler);
STADisconnected = WiFi.onStationModeDisconnected(DisconnectedHandler);
STAGotIP = WiFi.onStationModeGotIP([](const WiFiEventStationModeGotIP &event) {
Serial.println(WiFi.status());
Serial.println("模块获得IP");
}); WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.println(WiFi.status());
} void loop()
{
delay(5000); //等待5秒
WiFi.disconnect(); //断开当前网络连接
}

  

WiFi其他方法和WiFi事件响的更多相关文章

  1. 正则表达式匹配/data/misc/wifi/wpa_supplicant.conf的WiFi名称与密码

    正则表达式匹配/data/misc/wifi/wpa_supplicant.conf的WiFi名称与密码: String regex_name="ssid=\"(.*?)\&quo ...

  2. 笔记本电脑连接wifi,同时提供热点wifi给手机使用

    笔记本电脑连接wifi,同时提供热点wifi给手机使用 用电脑建立WiFi供手机平板设备使用ps:电脑需要有无线网卡,一般笔记本都自带 此教程仅适用Windows 7 & 8,1.打开笔记本的 ...

  3. 调整 WiFi 驱动设置让 WiFi 信号更稳定

    调整 WiFi 驱动设置让 WiFi 信号更稳定 修改 WiFi 驱动中 的设置,将 Power Saving Mode 的值改为 CAM.

  4. 家中WIFI被人用WiFi万能钥匙共享后,我们应该怎么做?

    据之前WiFi万能钥匙官方称,其用户总数已经超过了8亿,且日活用户达到2亿,在海量APP中仅次于微信和QQ.可以想象有着数量如此庞大的用户,家里的WiFi是如何的"不保险". 而据 ...

  5. 电脑变WIFI:建立虚拟共享WIFI热点可查看WIFI密码windows中使用bat批处理命令提示符cmd创建教程含工具

    台式机也可支持移动热点,Win10却提示"我们无法设置移动热点",今天我们就另辟蹊径来调教它. ​​建立和开启虚拟WIFI共享网络 Windows 7操作系统及以后支持承载网络,可 ...

  6. arm-linux移植MT7601Uusb无线网卡(小度wifi,360随身WIFI 2代)

    前段时间移植过RT3070.RT5370 http://blog.csdn.net/ofaith12345/article/details/24138399 发现各种arm移植都大同小异,所以就不要纠 ...

  7. 『邪恶のWIFI』搭建假冒WIFI热点等女神来蹭网啊 - -。

    pic by baidu 0x 00 ╮(╯▽╰)╭ 请喊我万恶的标题党  哈哈哈哈哈 0x 01 这里正题 虚拟机(Kali)不支持内置网卡,还好我有神器,插上我的RT8187L,开始搞起 参考资料 ...

  8. android 中获取网络状态、判断3G、2G、wifi网络、判断wifi是否打开、获取本机地址、获取本机串号IMEI整理

    代码如下:package com.android.xym; import java.io.IOException; import java.net.HttpURLConnection; import ...

  9. wind10系统 Atheros AR9271 Wireless Network Adapter USBwifi无线网卡的驱动安装解决无法搜索wifi信号,连接wifi信号无法上网的问题

    一.解决无法搜索wifi信号的问题 卸载掉之前的驱动,上网下载其他的驱动程序安装. http://drivers.mydrivers.com/drivers/463_185289.htm 二.安装完后 ...

随机推荐

  1. 从零打卡leetcode之day 2---两数相加

    前言 就是要把leetcode刷完,每天一道题,每天进步一点点. 从零打卡leetcode之day 2 题目描述: 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储, 它们的每个节点只存储单个 ...

  2. RabbitMQ消息队列(二)-RabbitMQ消息队列架构与基本概念

    没错我还是没有讲怎么安装和写一个HelloWord,不过快了,这一章我们先了解下RabbitMQ的基本概念. RabbitMQ架构 说是架构其实更像是应用场景下的架构(自己画的有点丑,勿嫌弃) 从图中 ...

  3. php 使用Glob() 查找文件技巧

    定义和用法 glob() 函数返回匹配指定模式的文件名或目录. 该函数返回一个包含有匹配文件 / 目录的数组.如果出错返回 false. 参数 描述 file 必需.规定检索模式. size 可选.规 ...

  4. 学JAVA第十一天,属性与方法

    今天清明节假期结束第二天,昨天请了一天假去考科目二,还好考过了,O(∩_∩)O哈哈~~~~ 今天老师讲了类的属性与方法的使用 就用代码来说明吧: package pkg3;public class T ...

  5. java_泛型2

    一.泛型_泛型概述及好处     1).在定义集合时,我们是希望集合中只存储一种类型的引用,这时可以使用泛型:       ArrayList<String> list = new Arr ...

  6. 四边形不等式优化DP

    记录一下,以免忘了 对于一个形如 \[dp[i][j]=min(dp[i][k]+dp[k][j]+w[i][j])\] 的转移方程(注意取最大值时不一定满足四边形不等式) 定理1 若对于\(a \l ...

  7. Dynamics CRM项目实例之八:CRM 2015的产品系列,克隆,修订

    关注本人微信和易信公众号: 微软动态CRM专家罗勇,回复139或者20150106可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me!       今天的博客主要是关于D ...

  8. asp.net/wingtip/显示数据和详细信息

    前边我们的工作处于wingtip工程基础建设阶段,先是建立了“数据访问层”,然后设计建设了“UI和导航”的框架,接下来要充实工程的内容,显示“数据和详细信息”. 一. 添加数据控件(Data Cont ...

  9. 使用ethtool显示硬件PHY信息

    1.总结: 使用ethtool 可以查看端口的phy配置 2.显示端口配置 [root@localhost zhou]# ethtool ens33Settings for ens33: Suppor ...

  10. 从零学习Fluter(五):Flutter中手势滑动拖动已经网络请求

    从六号开始搞Flutter,到今天写这篇blog已经过了4天时间,文档初步浏览了一遍,写下了这个demo.demo源码分享在github上,现在对flutter有种说不出的喜欢了.大家一起搞吧! 废话 ...