【问题标题】:I'm not able to reconnect to WiFi automatically after interruption in the router when using ESP8266使用ESP8266时路由器中断后无法自动重新连接WiFi
【发布时间】:2018-07-11 06:20:58
【问题描述】:

这是我使用 EPS8266 连接到 WiFi 网络的代码。我将 DHT 传感器连接到 ESP。如果路由器发生中断,我可以在没有中断的情况下获取数据我没有获取传感器数据,也无法重新连接到 WiFi 网络

static void wifi_task(void * pvParameters) {
    uint8_t status = 0;
    uint8_t retries = 30;
    struct sdk_station_config config = {
        .ssid = "CloveIOT",
        .password = "CloveIOT",
    };
    printf("WiFi: connecting to WiFi\n\r");
    sdk_wifi_set_opmode(STATION_MODE);
    sdk_wifi_station_set_config( & config);
    while (1) {
        while ((status != STATION_GOT_IP) && (retries)) {
            status = sdk_wifi_station_get_connect_status();
            printf("%s: status = %d\n\r", __func__, status);
            if (status == STATION_WRONG_PASSWORD) {
                printf("WiFi: wrong password\n\r");
                break;
            } else if (status == STATION_NO_AP_FOUND) {
                printf("WiFi: AP not found\n\r");
                break;
            } else if (status == STATION_CONNECT_FAIL) {
                printf("WiFi: connection failed\r\n");
                break;
            }
            vTaskDelay(1000 / portTICK_PERIOD_MS);
            --retries;
        }
        if (status == STATION_GOT_IP) {
            printf("WiFi: Connected\n\r");
            xSemaphoreGive(wifi_alive);
            taskYIELD();
        }

        while ((status = sdk_wifi_station_get_connect_status()) == STATION_GOT_IP) {
            xSemaphoreGive(wifi_alive);
            taskYIELD();
        }
        printf("WiFi: disconnected\n\r");
        sdk_wifi_station_disconnect();
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
}

【问题讨论】:

    标签: esp8266 freertos


    【解决方案1】:

    我遇到了同样的问题,现在我正在使用这种运行良好的 WiFi 连接方法。 在使用delay(1200); 之前,它不起作用并在WiFi.status() != WL_CONNECTED 上停滞不前。

    void connectWiFi() {
      WiFi.disconnect();
      delay(1200);
      WiFi.mode(WIFI_STA);
      Serial.println(F("connectWiFi"));
      WiFi.begin(ssid, password);
    
      // wait for connection
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(F("."));
      }
    
      Serial.println(F(""));
      Serial.print(F("Connected to "));
      Serial.println(ssid);
      Serial.print(F("IP address: "));
      Serial.println(WiFi.localIP());
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-16
      • 2010-11-08
      • 2016-04-03
      • 2017-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多