ESP8266 как-то запоминает данные доступа к wifi?

10

Сегодня я немного поработал с ESP8266, попробовал OTA и написал веб-сервер. Чтобы найти ошибку, я уменьшил эскиз до следующих строк:

#include <ESP8266WebServer.h>

ESP8266WebServer server(80);

void setup() {
  Serial.begin(115200);
  server.on("/", []() {
    Serial.println("Sending response...");
    server.send(200, "text/plain", "Hi there!");
  });
  server.begin();
}

void loop() {
  server.handleClient();
}

Обратите внимание, что нет кода для подключения к сети Wi-Fi. Тем не менее, микросхема по-прежнему подключается к моей локальной сети, защищенной WPA2, при каждой загрузке. Я могу пропинговать чип, мой браузер может получить "Привет!" сообщение через http, печатается серийное сообщение.

Как это возможно? Сохраняет ли ESP8266 информацию о Wifi, возможно, из-за некоторых старых данных OTA, которые не были полностью перезаписаны?

Я пользуюсь platformio. Вот мой весь platformio.ini:

[env:d1_mini]
platform = espressif8266
board = d1_mini
framework = arduino

Я разместил журнал компиляции и загрузки здесь: https://pastebin.com/BtGrFZiu

Гайер
источник

Ответы:

12

Да, обычно последние учетные данные WiFi сохраняются во флэш-памяти, и ESP8266 загружает эти данные при загрузке и повторно подключается к последнему известному WiFi. См. Https://github.com/esp8266/Arduino/issues/2843#issuecomment-334250100 :

SDK хранит некоторую информацию, включая учетные данные Wi-Fi, в секторе флэш-памяти.

Этот сектор сохраняется между вспышками для быстрого запуска после обновления. При загрузке, до того как ваш эскиз будет выполнен, SDK получит учетные данные Wi-Fi и попытается установить быстрое соединение.

Это поведение можно контролировать с помощью функции, WiFi.setAutoConnect(autoConnect)описанной в https://github.com/esp8266/Arduino/blob/master/doc/esp8266wifi/station-class.rst#setautoconnect . Это в свою очередь вызывает функцию Espressif SDK wifi_station_set_auto_connect( ссылка на API )

введите описание изображения здесь

Короче говоря: это нормальное поведение. Если вы хотите убедиться, что ваш ESP8266 не подключается к какому-либо Wi-Fi, пока вы не скажете сделать это явно, сначала позвоните WiFi.setAutoConnect(autoConnect).

Редактировать: из кода прошивки, вы можете использовать system_restore. Документация говорит, что это сбросит данные, связанные с WiFi. Это должно уничтожить предыдущие настройки. Эта функция может быть включена в https://github.com/esp8266/Arduino/blob/master/tools/sdk/include/user_interface.h в Arduino-ESP8266. Я не пробовал это сам, и при этом я не могу сказать, что это фактически стирает критическую информацию безопасности от вспышки все же.

азбука

Или, как вы также выяснили, полное удаление всей флэш-памяти полностью удалит данные WiFi. Это может быть достигнуто при использовании esptool.pyс erase_flashопцией, например python esptool.py -p COM6 erase_flash. Затем вы можете прошить новую прошивку, которая не будет использовать предыдущие настройки WiFi (но, вероятно, снова откроет точку доступа по умолчанию).

Тогда есть также, ESP.eraseConfigкоторый стирает только соответствующие сектора вспышки.

Максимилиан Герхардт
источник
Спасибо. Есть ли способ стереть учетные данные, которые были ранее установлены с флэш-памяти? РЕДАКТИРОВАТЬ: обнаружил, что это возможно с esptool: esp8266.com/viewtopic.php?f=32&t=8204
Гейер
1
@Geier обновлен.
Максимилиан Герхардт
1
WiFi.disconnect () также удаляет запомненные учетные данные
Juraj