zoukankan      html  css  js  c++  java
  • ESP8266学习笔记6:ESP8266规范wifi连接操作

    一、前言

    我整理了从2015年至今关于ESP8266的学习笔记,梳理出来了开发环境、基础功能、进阶学习三大部分。方便自己和他人。可点此查看,欢迎交流。

    之前在笔记4《ESP8266的SmartConfig》http://blog.csdn.net/iotisan/article/details/54849410中,做了smartconfig例程的測试。

    这个例程是因为DEMO演示的,离商用还有段距离。

    几周前,有网友就问我esp8266又一次上电无法自己主动连接之前配置的路由器。这确实是眼下DEMO最缺的一个功能。当首次将设备接入wifi之后,设备应该保存住SSID和PWD,在兴许上电时能自己去连接wifi,而不是例程中每次上电都来一次。

    当时忙别的事情没做。今天抽时间做了下处理。

    事实上处理还挺简单,写篇笔记总结下,规范wifi连接操作。

    本文作者twowinter,转载请注明作者:http://blog.csdn.net/iotisan/

    二、编程思路

    1. 路由器參数的保存和查询

    在DEMO中,设置完STATION模式后,就直接smartconfig。我们应当在smartconfig之前做一个參数推断,推断是否有保存的路由器信息。有保存,就连接路由器。没保存,才smartconfig。

    void user_init(void)
    {
        os_printf("SDK version:%s
    ", system_get_sdk_version());
    
        wifi_set_opmode(STATION_MODE);
        smartconfig_start(smartconfig_done);
    }
    

    关于这个路由器參数存储,查了下官方手冊。发现SDK还是非常贴心的。已经有API能够直接保存和查询了。而不须要我们再去做flash參数存储。

    两个关键API摆出来。

    保存

    wifi_station_set_config
    功能:设置 WiFi station 接口的配置參数。并保存到 flash
    

    查询

    wifi_station_get_config_default
    功能:查询 WiFi station 接口保存在 flash 中的配置參数。
    

    2. 已有路由器參数时的处理

    没有路由器參数时的处理非常easy,直接smartconfig。

    而当有路由器參数时,还须要做些处理。
    我的思路是。以当前的參数去搜索下环境中是否存在这个AP。没有的话再启动smartconfig。有的话就直接connect。

    wifi_station_scan
    功能:获取AP的信息
    

    三、代码操作

    1.初始化时推断FLASH中是否存有有效的路由器參数。

    void user_init(void)
    {
        wifi_set_opmode(STATION_MODE);
    
        wifi_station_get_config_default(&s_staconf);
        if (os_strlen(s_staconf.ssid) != 0) {
          os_printf("user_scan
    ");
          system_init_done_cb(user_scan);
        } else {
          os_printf("smartcfg
    ");
          smartconfig_start(smartconfig_done);
        }
    }
    

    2.已存有路由器參数,去搜索看看AP当前是否存在。

    void ICACHE_FLASH_ATTR
    user_scan(void)
    {
       struct scan_config config;
    
       os_memset(&config, 0, sizeof(config));
    
       config.ssid = s_staconf.ssid;
    
       wifi_station_scan(&config, user_scan_done);
    
    }
    

    3.之后的操作就看个人处理了。

    规范的处理是要开启一个线程,周期性检測AP的连接状态,处理不同的错误状态。

    我就不展开了。

    四、測试效果

    首次启动时,进行SmartCfg。

    <Time:2015-08-21 10:52:37:703 Len:0001>:<Time:2015-08-21 10:52:52:687 Len:0315>:rl<Time:2015-08-21 10:52:52:906 Len:0078>:dsdSSDK version:1.2.0
    smartcfg
    mode : sta(18:fe:34:f8:8f:cf)
    add if0
    f 0, 
    <Time:2015-08-21 10:52:55:000 Len:0015>:scandone
    f 0, 
    <Time:2015-08-21 10:52:57:187 Len:0034>:scandone
    SC_STATUS_FIND_CHANNEL
    
    <Time:2015-08-21 10:53:08:296 Len:0106>:
    TYPE: ESPTOUCH V2.4
    T|PHONE MAC:
    T|AP MAC   :
    SC_STATUS_GETTING_SSID_PSWD
    SC_TYPE:SC_TYPE_ESPTOUCH
    
    <Time:2015-08-21 10:53:11:250 Len:0026>:T|SCAN SSID: Xiaomi_5BAB
    
    <Time:2015-08-21 10:53:11:578 Len:0086>:T|pswd: 1234567890
    T|ssid: Xiaomi_5BAB
    T|bssid: 8c be be 28 5b ac 
    SC_STATUS_LINK
    
    <Time:2015-08-21 10:53:11:656 Len:0008>:f -240, 
    <Time:2015-08-21 10:53:13:906 Len:0068>:scandone
    no Xiaomi_5BAB found, reconnect after 1s
    reconnect
    f 0, 
    <Time:2015-08-21 10:53:16:031 Len:0010>:scandone
    
    <Time:2015-08-21 10:53:17:031 Len:0109>:add 0
    aid 4
    pm open phy_2,type:2 0 0
    cnt 
    
    connected with Xiaomi_5BAB, channel 3
    dhcp client start...
    
    <Time:2015-08-21 10:53:19:562 Len:0054>:ip:192.168.31.232,mask:255.255.255.0,gw:192.168.31.1
    
    <Time:2015-08-21 10:53:22:515 Len:0047>:SC_STATUS_LINK_OVER
    Phone ip: 192.168.31.199
    

    第二次上电。自己主动获取AP进行连接。

    <Time:2015-08-21 10:53:52:078 Len:0001>:<Time:2015-08-21 10:53:58:171 Len:0315>:l<Time:2015-08-21 10:53:58:390 Len:0094>:d;lSSDK version:1.2.0
    user_scan
    mode : sta(18:fe:34:f8:8f:cf)
    add if0
    f 0, scandone
    f 0, 
    <Time:2015-08-21 10:54:00:531 Len:0063>:scandone
    (4,"Xiaomi_5BAB",-45,"8c:be:be:28:5b:ac",3)
    f -240, 
    <Time:2015-08-21 10:54:00:578 Len:0026>:reconnect
    scandone
    f 0, 
    <Time:2015-08-21 10:54:02:703 Len:0010>:scandone
    
    <Time:2015-08-21 10:54:03:656 Len:0109>:add 0
    aid 4
    pm open phy_2,type:2 0 0
    cnt 
    
    connected with Xiaomi_5BAB, channel 3
    dhcp client start...
    
    <Time:2015-08-21 10:54:06:421 Len:0054>:ip:192.168.31.232,mask:255.255.255.0,gw:192.168.31.1
    

    五、总结

    that’s all.


  • 相关阅读:
    C++ CheckListBox
    TreeView查获节点并选中节点
    创建文件自动重命名
    bat
    Edit显示行号
    FindStringExact
    Extended ComboBox添加图标
    C++ Combobox输入时自动完成
    C++ ComboBox基础
    C++ Code_combobox
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/7289198.html
Copyright © 2011-2022 走看看