zoukankan      html  css  js  c++  java
  • WiFi其他方法和WiFi事件响

    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(); //断开当前网络连接
    }
    
    

      

  • 相关阅读:
    阿里取消周报
    摇滚明星原则
    t
    B树、B+树索引算法原理(下)
    订单业务楼层化 view管理器和model管理器进行了model和view的全面封装处理 三端不得不在每个业务入口上线时约定好降级开关,于是代码中充满了各种各样的降级开关字段
    单元测试
    项目管理图 有任务分解、技术风险 风险预案
    CPU飙高,系统性能问题如何排查?

    如何让淘宝不卡顿? 读写比例 动态扩容 分布式化路线 mysql 优化
  • 原文地址:https://www.cnblogs.com/kekeoutlook/p/10624053.html
Copyright © 2011-2022 走看看