乐鑫技术交流
直播中

wufan931111

10年用户 1206经验值
擅长:370217
私信 关注
[问答]

在使用智能配网时如果输入WiFi的密码是错的,为什么会反复尝试连接WiFi?

我是根据espesp-idfexampleswifismart_config例程来编写的智能配网,如果输入密码是错的,程序也不会返回信息给手机APP,要怎么做才能判断智能配网连接是否失败?这是我的一部分代码

static void event_handler(void* arg, esp_event_base_t event_base,

                                int32_t event_id, void* event_data)

{

    static int retry_num = 0;           /* 记录wifi重连次数 */

    esp_err_t err;  

    /* 系统事件为WiFi事件 */

    if (event_base == WIFI_EVENT)

    {

        if(event_id == WIFI_EVENT_STA_START)    /* 事件id为STA开始 */

        {

            err= esp_wifi_connect();

            printf("err = %drn",err);

        }

        else if (event_id == WIFI_EVENT_STA_DISCONNECTED) /* 事件id为失去STA连接 */

        {

            gpio_set_level(led, 1);

            err=esp_wifi_connect();

            printf("err111111 = %drn",err);

            retry_num++;

            printf("retry to connect to the AP %d times. n",retry_num);

            if (retry_num > 5)  /* WiFi重连次数大于10 */

            {

                /* 将WiFi连接事件标志组的WiFi连接失败事件位置1 */

                xEventGroupSetBits(s_wifi_event_group, WIFI_FAIL_BIT);

            }

            /* 清除WiFi连接成功标志位 */

            xEventGroupClearBits(s_wifi_event_group, CONNECTED_BIT);

        }

    }

    /* 系统事件为ip地址事件,且事件id为成功获取ip地址 */

    else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP)

    {

        ip_event_got_ip_t* event = (ip_event_got_ip_t*) event_data; /* 获取IP地址信息*/

        printf("got ip:%d.%d.%d.%d n" , IP2STR(&event->ip_info.ip));  /* 打印ip地址*/

        retry_num = 0;                                              /* WiFi重连次数清零 */

        /* 将WiFi连接事件标志组的WiFi连接成功事件位置1 */

        xEventGroupSetBits(s_wifi_event_group, CONNECTED_BIT);

    }

    /* 系统事件为智能配网事件 */

    else if (event_base == SC_EVENT)

    {

        led_mode = Connect_led;

        if(event_id == SC_EVENT_SCAN_DONE )             /* 开始扫描智能配网设备端 */

            printf("Scan donen");

        else if(event_id == SC_EVENT_FOUND_CHANNEL)     /* 得到了智能配网通道 */

            printf("Found channel n");

        else if(event_id == SC_EVENT_GOT_SSID_PSWD)     /* 得到了智能配网设备提供的ssid和password */

        {

            printf("smartconfig got SSID and passwordn");

            /* 获取智能配网设备端提供的数据信息 */

            smartconfig_event_got_ssid_pswd_t *evt = (smartconfig_event_got_ssid_pswd_t *)event_data;

            /* 定义WiFi配置结构体和用了结收ssid和password的数组 */

            wifi_config_t wifi_config;

            char ssid[32] = { 0 };

            char password[64] = { 0 };



            bzero(&wifi_config, sizeof(wifi_config_t)); /* 将结构体数据清零 */

             /* 将智能配网设备发送来的WiFi的ssid、password及MAC地址复制到wifi_config */

            memcpy(wifi_config.sta.ssid, evt->ssid, sizeof(wifi_config.sta.ssid));

            memcpy(wifi_config.sta.password, evt->password, sizeof(wifi_config.sta.password));

            wifi_config.sta.bssid_set = evt->bssid_set;

            if (wifi_config.sta.bssid_set == true) {

                memcpy(wifi_config.sta.bssid, evt->bssid, sizeof(wifi_config.sta.bssid));

            }

            /* 打印WiFi名称和密码 */

            memcpy(ssid, evt->ssid, sizeof(evt->ssid));

            memcpy(password, evt->password, sizeof(evt->password));

            printf("SSID:%s n", ssid);

            printf("PASSWORD:%s n", password);



            /* 将得到的WiFi名称和密码存入NVS*/

            nvs_handle wificfg_nvs_handler;

            ESP_ERROR_CHECK( nvs_open("WiFi_cfg", NVS_READWRITE, &wificfg_nvs_handler) );

            ESP_ERROR_CHECK( nvs_set_str(wificfg_nvs_handler,"wifi_ssid",ssid) );

            ESP_ERROR_CHECK( nvs_set_str(wificfg_nvs_handler,"wifi_passwd",password) );

            ESP_ERROR_CHECK( nvs_commit(wificfg_nvs_handler) ); /* 提交 */

            nvs_close(wificfg_nvs_handler);                     /* 关闭 */

            printf("smartconfig save wifi_cfg to NVS .n");

             /* 根据得到的WiFi名称和密码连接WiFi*/

            ESP_ERROR_CHECK( esp_wifi_disconnect() );

            ESP_ERROR_CHECK( esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config) );

            ESP_ERROR_CHECK( esp_wifi_connect() );

        }

        else if (event_id == SC_EVENT_SEND_ACK_DONE)    /* 智能配网成功,已经给智能配网设备发送应答*/

        {

            xEventGroupSetBits(s_wifi_event_group, SMART_CONFIG_BIT);

        }

    }

}
0.png

更多回帖

发帖
×
20
完善资料,
赚取积分