热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

从零开始的ESP8266探索(15)WiFi其他方法和WiFi事件响应

文章目录目的WiFi其他方法WiFi事件响应事件列表注册事件使用示例总结目的WiFi在使用过程中并非会一直如希望般稳定运行的,为了应对这些情况就需要能够了解WiFi


文章目录

  • 目的
  • WiFi其他方法
  • WiFi事件响应
    • 事件列表
    • 注册事件
    • 使用示例
  • 总结


目的

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.disconnectWiFi.softAPdisconnect方法时都会将相关数据写入到Flash中;
    如果使用该方法设置为false时,以上动作将不会把数据写入Flash中,仅仅改变内存中的WiFi设置;
  • WiFi.mode(m)
    设置WiFi工作模式,参数可填写WIFI_APWIFI_STAWIFI_AP_STAWIFI_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需要先声明&#xff0c;然后注册对应事件并加入事件触发时执行的操作&#xff1a;

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

使用示例

使用下面代码上传至模块中&#xff1a;

#include const char *ssid &#61; "********";
const char *password &#61; "********";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 &#61; WiFi.onStationModeConnected(ConnectedHandler);STADisconnected &#61; WiFi.onStationModeDisconnected(DisconnectedHandler);STAGotIP &#61; 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(); //断开当前网络连接
}

代码运行后可以看到下面效果&#xff1a;
在这里插入图片描述


总结

上面介绍的内容可以用来增加开发者对于设备的掌控&#xff0c;这对于开发稳定的产品是比较有帮助的。
参考链接&#xff1a;
https://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/readme.html#diagnostics
https://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/generic-examples.html
https://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/generic-class.html
https://github.com/esp8266/Arduino/blob/master/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.h
https://github.com/esp8266/Arduino/blob/master/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.cpp


推荐阅读
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 本文基于刘洪波老师的《英文词根词缀精讲》,深入探讨了多个重要词根词缀的起源及其相关词汇,帮助读者更好地理解和记忆英语单词。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 本文详细介绍了如何构建一个高效的UI管理系统,集中处理UI页面的打开、关闭、层级管理和页面跳转等问题。通过UIManager统一管理外部切换逻辑,实现功能逻辑分散化和代码复用,支持多人协作开发。 ... [详细]
  • 本文探讨了如何在模运算下高效计算组合数C(n, m),并详细介绍了乘法逆元的应用。通过扩展欧几里得算法求解乘法逆元,从而实现除法取余的计算。 ... [详细]
  • 题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!-----&# ... [详细]
  • 本文详细探讨了VxWorks操作系统中双向链表和环形缓冲区的实现原理及使用方法,通过具体示例代码加深理解。 ... [详细]
  • Linux设备驱动程序:异步时间操作与调度机制
    本文介绍了Linux内核中的几种异步延迟操作方法,包括内核定时器、tasklet机制和工作队列。这些机制允许在未来的某个时间点执行任务,而无需阻塞当前线程,从而提高系统的响应性和效率。 ... [详细]
  • 本文探讨了《魔兽世界》中红蓝两方阵营在备战阶段的策略与实现方法,通过代码展示了双方如何根据资源和兵种特性进行战士生产。 ... [详细]
  • 本文探讨了在通过 API 端点调用时,使用猫鼬(Mongoose)的 findOne 方法总是返回 null 的问题,并提供了详细的解决方案和建议。 ... [详细]
author-avatar
得不到的最美丽
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有