Медленное переподключение WiFi после глубокого сна (от 6 до 10 секунд)

С моим ESP8266 мне нужно сделать простой запрос GET на сервер, а затем перейти в режим глубокого сна (цель - 1 год работы от батареи)... пока не появится сигнал RST а потом снова начинается.

Следующий код работает, но на каждый RST требуется от 6 до 10 секунд, чтобы подключиться к моему домашнему Wi-Fi с помощью "WPA2 Personal" (когда он перестанет мигать в моем коде).

Это нормальная задержка от 6 до 10 секунд, у вас такой же порядок величины? Или можно уменьшить до 1 секунды, после пробуждения от глубокого сна?

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266HTTPClient.h>
WiFiClient client;
HTTPClient http;
void setup() {
    pinMode(LED_BUILTIN, OUTPUT);
    if (WiFi.SSID() != WIFI_SSID) {     // не начинайте, если в этом нет необходимости, см. ссылку на учебник после
        WiFi.begin("MySSID", "MyPassword");
        WiFi.persistent(true);
        WiFi.setAutoConnect(true);
        WiFi.setAutoReconnect(true);
    }
    while(WiFi.status() != WL_CONNECTED) {
      digitalWrite(LED_BUILTIN, LOW); delay(10); digitalWrite(LED_BUILTIN, HIGH); delay(200);  // мигает
    }
    http.begin(client, "http://example.com/request.php");
    http.GET();
    http.end();
    digitalWrite(LED_BUILTIN, LOW); delay(500); digitalWrite(LED_BUILTIN, HIGH); delay(500);    
    ESP.deepSleep(0);
}
void loop() {
}

Примечание. Я прочитал и внимательно изучил эту полезную информацию о ESP8266 с низким энергопотреблением и питанием от батареи:
Советы по энергосбережению для ESP8266 (особенно это параграф):

Не вызывайте WiFi.begin() в setup().
Чип ESP8266 сохраняет последние известные настройки Wi-Fi. Вызов WiFi.begin() стирает их. Вызывая WiFi.begin() только тогда, когда это было необходимо, я сократил более чем на 2 секунды среднее время, необходимое для подключения к точке доступа. WiFi.begin() следует вызывать только в том случае, если сохраненный SSID не соответствует настроенному SSID. Вы можете проверить настроенный SSID с помощью вызова WiFi.SSID(). Кроме того, рекомендуется очищать сохраненные настройки Wi-Fi, если таймер истекает. (См. следующий раздел «Использование сторожевых таймеров»).

, 👍1

Обсуждение

и использует ли он сейчас автоматическое подключение и быстрее ли оно?, @Juraj

Обычно ESP сканирует все каналы Wi-Fi 2,4 ГГц, чтобы найти SSID и связанный с ним BSSID (т. е. Mac-адрес), за 6 с. Вы можете сократить время сканирования, подключившись с использованием BSSID. См. один из моих [проектов] (https://www.e-tinkers.com/2022/04/esp8266-ntp-clock-with-ntp-update-and-charlieplexing/) (в разделе «ESP8266 WiFi — Как ускорить соединение»), где я сократил время соединения с 6 с до примерно 2 с., @hcheung

@hcheung Для дальнейшего использования было бы очень интересно, если бы вы разместили здесь только этот небольшой абзац о BSSID в качестве ответа! Спасибо!, @Basj


1 ответ


Лучший ответ:

4

Обычно ESP сканирует все каналы Wi-Fi с частотой 2,4 ГГц и находит SSID и связанный с ним BSSID (т. е. Mac-адрес) примерно за 6 секунд. Вы можете сократить время сканирования, подключившись с использованием BSSID.

Использование статического IP-адреса вместо использования DHCP-сервера для назначения IP-адреса еще больше сократит время подключения к WiFi еще на 500 мс.

Посмотрите один из моих проектов (в разделе «ESP8266 WiFi — как ускорить подключение»), где я сократил время подключения с 6 до примерно 2 с.

,

Спасибо @hcheung за ваш ответ. Знаете ли вы, сколько энергии требуется для пробуждения + подключения к Wi-Fi (2 секунды) + отправки одного HTTP-запроса (несколько байтов для отправки) + перехода в глубокий сон? Считаете ли вы, что 200 мА * 3 секунды = 0,17 мАч — правильный порядок величины? Таким образом, это можно было бы сделать ~ 6000 раз на 3 батарейках АА? (У меня нет оборудования для более точных измерений), @Basj

Вам нужно сделать некоторые измерения и [рассчитать](https://www.of-things.de/battery-life-calculator.php) самостоятельно. Поскольку в разных платах могут использоваться разные компоненты, в частности, встроенный LDO может быть не предназначен для применения в режиме глубокого сна и имеет ток утечки во время глубокого сна. Если вы не можете разработать собственную плату, поищите платы, специально предназначенные для работы от батареи., @hcheung

Спасибо @hcheung. Что такое "ЛДО"? Знаете ли вы стандартный потребительский уровень ESP32 (легко найти в популярных магазинах), который хорошо работает от батареи?, @Basj

LDO расшифровывается как Low Dropout Output, обратитесь к регулятору, который преобразует входное напряжение в 3,3 В на вашей плате. Типичные китайские платы ESP32 или платы ESP8266 не имеют хорошего LDO, они предназначены для питания через USB., @hcheung

Спасибо @hcheung. PS: я отредактировал, чтобы добавить код + ссылку на документ о сигнатуре функции (нелегко найти!), @Basj