Чи пам’ятає ESP8266 якось пам’ятати дані доступу до Wi-Fi?


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();
}

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

Як це можливо? Чи ESP8266 якось зберігає інформацію Wi-Fi, можливо, через деякі старі дані OTA, які не були повністю перезаписані?

Я використовую платформу. Ось мій весь 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/isissue/2843#issuecomment-334250100 :

SDK зберігає деяку інформацію, включаючи дані Wi-Fi, у секторі спалаху.

Цей сектор зберігається між спалахами, щоб забезпечити швидкий запуск після оновлення. Під час завантаження, перш ніж ваш ескіз буде виконаний, SDK відновить облікові дані wifi та спробує швидке з'єднання.

Таку поведінку можна контролювати за допомогою функції, WiFi.setAutoConnect(autoConnect)як це зафіксовано в https://github.com/esp8266/Arduino/blob/master/doc/esp8266wifi/station-class.rst#setautoconnect . Це, в свою чергу, викликає функцію SDK Espressif 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що стирає лише відповідні флеш-сектори.


Дякую. Чи є спосіб стерти облікові дані, які раніше були встановлені зі спалаху? EDIT: Виявлено, що це можливо за допомогою esptool: esp8266.com/viewtopic.php?f=32&t=8204
Geier,

1
@Geier оновлено.
Максиміліан Герхардт

1
WiFi.disconnect () також видаляє запам'ятовані облікові дані
Juraj
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.