ESP8266 каким-то образом запоминает данные доступа к Wi-Fi?
Сегодня я немного повозился с 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 информацию о Wi-Fi каким-то образом, возможно, из-за некоторых старых данных OTA, которые не были полностью перезаписаны?
Я использую Platformio. Вот весь мой файл Platformio.ini:
[env:d1_mini]
platform = espressif8266
board = d1_mini
framework = arduino
Я разместил журнал компиляции и загрузки здесь: https://pastebin.com/BtGrFZiu
@Geier, 👍12
1 ответ
Лучший ответ:
Да, обычно последние учетные данные Wi-Fi сохраняются во флэш-памяти, и ESP8266 загружает эти данные при загрузке и повторно подключается к последнему известному Wi-Fi. См. 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
. В документации говорится, что он сбросит данные, связанные с Wi-Fi. Это должно уничтожить предыдущие настройки. Эту функцию можно включить из https://github.com/esp8266/Arduino/. blob/master/tools/sdk/include/user_interface.h в Arduino-ESP8266. Я сам не пробовал и не могу сказать, что это действительно стирает критически важную для безопасности информацию с флэш-памяти.
Или, как вы также узнали, принудительное стирание всей флэш-памяти с абсолютной уверенностью удалит данные Wi-Fi. Этого можно добиться, используя esptool.py
с опцией erase_flash
, например, python esptool.py -p COM6 Erase_flash
. Затем вы можете прошить новую прошивку, которая не будет использовать предыдущие настройки Wi-Fi (но, вероятно, снова откроет точку доступа по умолчанию).
А еще есть ESP.eraseConfig
который стирает только соответствующие сектора флэш-памяти.
- ESP8266 не подключается к Wi-Fi
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Можно ли отключить WiFi на ESP8266?
- Как отключить или остановить точку доступа в ESP8266?
- ESP8266 — действительно ли у него по умолчанию плохой радиус действия Wi-Fi?
- Как подключить ESP8266 с помощью адаптера ESP-01 к Arduino Uno?
- ESP8266 на Wi-Fi без пароля, возможно?
- ESP8266 Аналоговое чтение мешает Wi-Fi?
Спасибо. Есть ли способ стереть ранее установленные учетные данные из флэш-памяти? РЕДАКТИРОВАТЬ: Обнаружено, что это возможно с помощью esptool: https://www.esp8266.com/viewtopic.php?f=32&t=8204., @Geier
@Geier обновлен., @Maximilian Gerhardt
WiFi.disconnect() также удаляет запомненные учетные данные., @Juraj