Esp32 и запуск WiFi со второго раза

Здравствуйте уважаемые коллеги
такая вот хрень непонятная. какое то время назад на еспэшке вайфай стал странно себя вести. посте прошивки или холодного старта не подключается (в примере бегут точки). после программного или кнопочного ресета взлетает соколом. некоторое время терпел , теперь кручу и так и эдак всё едино…

вставил некоторые свои заморочки в код из примера для иллюстрации

ПРИМЕР
#include <WiFi.h>

const char* ssid1 = "SSID_name";
const char* password1 = "MY_COOL_PWD";
IPAddress ip1(192, 168, 8, 200);
IPAddress gateway1(192, 168, 8, 1);
IPAddress subnet1(255, 255, 0, 0);
IPAddress ip(192, 168, 8, 100);
const int  GMT_offset = +2;
const char* host     = "example.com";
const char* url      = "/index.html";
IPAddress dns(1, 1, 1, 1);

void setup()
{
  Serial.begin(115200);

  if (!WiFi.config(ip1, gateway1, subnet1, dns)) {
    Serial.println("STA Failed to configure");
  }

  Serial.print("Connecting to ");
  Serial.println(ssid1);

  WiFi.begin(ssid1, password1);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected!");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  Serial.print("ESP Mac Address: ");
  Serial.println(WiFi.macAddress());
  Serial.print("Subnet Mask: ");
  Serial.println(WiFi.subnetMask());
  Serial.print("Gateway IP: ");
  Serial.println(WiFi.gatewayIP());
  Serial.print("DNS: ");
  Serial.println(WiFi.dnsIP());
}

void loop()
{
  delay(5000);

  Serial.print("connecting to ");
  Serial.println(host);

  // Use WiFiClient class to create TCP connections
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
    return;
  }

  Serial.print("Requesting URL: ");
  Serial.println(url);

  // This will send the request to the server
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" +
               "Connection: close\r\n\r\n");
  unsigned long timeout = millis();
  while (client.available() == 0) {
    if (millis() - timeout > 5000) {
      Serial.println(">>> Client Timeout !");
      client.stop();
      return;
    }
  }

  // Read all the lines of the reply from server and print them to Serial
  while (client.available()) {
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }

  Serial.println();
  Serial.println("closing connection");
}

если это не поможет, то на этом наши полномочия как бы все…

void setup() {
  Serial.begin(115200);
  WiFi.disconnect(true);  // Сброс Wi-Fi
  delay(1000);
  WiFi.mode(WIFI_STA);

  if (!WiFi.config(ip1, gateway1, subnet1, dns)) {
    Serial.println("STA Failed to configure");
  }

  Serial.print("Connecting to ");
  Serial.println(ssid1);
  WiFi.begin(ssid1, password1);

  unsigned long startTime = millis();
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    if (millis() - startTime > 20000) {  // Таймаут 20 сек
      Serial.println("Timeout! Resetting...");
      ESP.restart();  // Перезагрузка
    }
  }
  // Остальное как в оригинале
}
// версию ядра поставить на которой работало как вариант

Непомогло
Я обычно делал
WiFi.mode(WIFI_OFF);
delay(1000);
WiFi.mode(WIFI_STA);
И дальше бегин и все остальное, но оно перестало помогать
Что с этим, что без этого, все равно со второго запуска

Явно беда с аппаратным резетом. Добавьте на EN цепь сброса(10кОм к +3.3в , 0.1-1мФ к земле)

Вот и я думаю а чем ESP.restart отличается от рестарта после перепрошивки, или холодный пуск от нажимания кнопки ресет. И почему проц запускается, не работает нормально только коннект к вайфай.
Нет у меня сейчас ни деталей, ни паяльника нормального.
Учитывая, что если за два периода ожидания не приконнектилось, то уже и не взлетит, то на третьем я делаю программный рестарт и все цепляется после него. Но это костыль :frowning:

Не думайте - делайте :slightly_smiling_face:

Нет DTR(не может перетянуть) - нет рестарта после прошивки.

Нет конденсатора - имеет право не загрузится.
Проще: для начала любой конденсатор(0.1 -10мкФ) параллельно кнопке ресет.

Выглядит так, как будто отъехал конденсатор, после первого запуска он нагревается и начинает работать(кандëр нагревом можно временно восстановить) или ещë какая-то деталь, которая от нагрева восстанавливается и начинает работать.

1 лайк

а кстати, в чем вопрос то ?)))
и если нравится есп запускаться со второго раза, так перезагружайте ее програмно 2ды!)))

Оно то да, но ведь криво? А должно быть все прекрасно :wink:
Причем два года на этой плате и этом роутере и в этой стране все работало сразу, а теперь и внезапно только после пререзагрузки.

тогда вот 3 варианта которые может помогут, в 1ном коде))) если не поможет придется долго переписывать код и разбираться))))

#include <WiFi.h>

const char* ssid1 = "SSID_name";
const char* password1 = "MY_COOL_PWD";
IPAddress ip1(192, 168, 8, 200);
IPAddress gateway1(192, 168, 8, 1);
IPAddress subnet1(255, 255, 0, 0);
IPAddress dns(1, 1, 1, 1);

const char* host = "example.com";
const char* url = "/index.html";

void setup() {
  Serial.begin(115200);
  delay(1000); // Даём время для инициализации
  
  // Настройка и подключение WiFi - выполняется один раз при старте
  if (!WiFi.config(ip1, gateway1, subnet1, dns)) {
    Serial.println("STA Failed to configure");
  }

  Serial.print("Connecting to ");
  Serial.println(ssid1);

  WiFi.begin(ssid1, password1);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("\nWiFi connected!");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  // HTTP-запросы выполняются циклически
  Serial.print("Connecting to ");
  Serial.println(host);

  WiFiClient client;
  const int httpPort = 80;
  
  if (!client.connect(host, httpPort)) {
    Serial.println("Connection failed");
    delay(5000); // Ждём перед следующей попыткой
    return;
  }

  Serial.print("Requesting URL: ");
  Serial.println(url);

  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" +
               "Connection: close\r\n\r\n");
  
  unsigned long timeout = millis();
  while (client.available() == 0) {
    if (millis() - timeout > 5000) {
      Serial.println(">>> Client Timeout !");
      client.stop();
      return;
    }
  }

  while (client.available()) {
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }

  Serial.println("\nClosing connection");
  delay(5000); // Пауза между запросами
}

Значит пришла пора менять плату ))

на ESP8266 у меня девайс льёт в базу SQL с аптаймом 8 лет, сделал на ESP32C3 Super Mini встряёт раз в неделю, чудеса,
и именно по WIFI проблемы

У них антенки куцые, от них и проблемы

Да, чип греется, когда WIFI начинаешь использовать

Обновил пакет для esp32с 1.0.6 на 3.0.последний. Пришлось поковыряться с разными мелочами, в основном связанными с работой тфт экрана.
Однако! Проблема с коннектом со второго старта осталась.

Так, а программный ресет это ESP.Restart()?
Почему, тогда не помогает решение пост #2?

inspiritus а вот это зря, ставьте 2.0.17 если esp32… иначе запаритесь потом каждый проект править… проблему не решит наверное, но от гемороя в будущем спасет)))

Дык я это и делаю. Только с таймаутом в 3 секунды, исходя из практической статистики. Просто старт удлиняется, хочется от этого избавиться. Причем иногда, по непонятным причинам стартует сразу.
Ужасно интересно, все то, то неизвестно :wink:

отож, я с этими PUYA к примеру аж два программатора заказал )))

Пробовал разные, и 2.0.17 тоже. Вцелом пришлось подправить библиотеку tft_eSPI на предмет добавления инклюда для gpio. А так ничего