Có phải ESP8266 bằng cách nào đó nhớ dữ liệu truy cập wifi?


10

Hôm nay tôi đã thực hiện một số sửa đổi với một chiếc ESP8266, thử OTA và viết một máy chủ web. Để tìm lỗi, tôi đã giảm bản phác thảo xuống chỉ các dòng sau:

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

Lưu ý rằng không có mã để kết nối với mạng Wifi. Tuy nhiên, chip vẫn kết nối với mạng cục bộ, được bảo mật WPA2 của tôi trên mỗi lần khởi động. Tôi có thể ping chip, trình duyệt của tôi có thể nhận được "Xin chào!" tin nhắn qua http, tin nhắn nối tiếp được in.

Sao có thể như thế được? Có phải ESP8266 bằng cách nào đó giữ lại thông tin Wifi, có thể do một số dữ liệu OTA cũ không được ghi đè hoàn toàn?

Tôi đang sử dụng platformio. Đây là toàn bộ platformio.ini của tôi:

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

Tôi đã đăng nhật ký biên dịch và tải lên tại đây: https://pastebin.com/BtGrFZiu

Câu trả lời:


12

Có, thông thường thông tin xác thực WiFi cuối cùng sẽ được lưu trong flash và ESP8266 tải dữ liệu này khi khởi động và kết nối lại với WiFi đã biết cuối cùng. Xem https://github.com/esp8266/Arduino/issues/2843#issuecomment-334250100 :

SDK lưu trữ một số thông tin, bao gồm thông tin xác thực wifi, trong một khu vực của đèn flash.

Khu vực đó được giữ giữa các lần nhấp nháy để cho phép khởi động nhanh sau khi cập nhật. Khi khởi động, trước khi bản phác thảo của bạn được thực thi, SDK sẽ truy xuất thông tin đăng nhập wifi và thử kết nối nhanh.

Hành vi này có thể được kiểm soát bằng cách sử dụng chức năng WiFi.setAutoConnect(autoConnect)như được ghi lại trong https://github.com/esp8266/Arduino/blob/master/doc/esp8266wifi/station- class.rst # setautoconnect . Đến lượt nó gọi hàm Espressif SDK wifi_station_set_auto_connect( tham chiếu API )

nhập mô tả hình ảnh ở đây

Tóm lại: Đây là hành vi bình thường. Nếu bạn muốn đảm bảo rằng ESP8266 của bạn không kết nối với bất kỳ WiFi nào trừ khi bạn yêu cầu nó làm điều đó một cách rõ ràng, hãy gọi WiFi.setAutoConnect(autoConnect)ngay từ đầu.

Chỉnh sửa: Từ trong mã phần sụn, bạn có thể sử dụng system_restore. Các tài liệu nói rằng nó sẽ thiết lập lại dữ liệu liên quan đến WiFi. Điều này sẽ phá hủy các cài đặt trước đó. Chức năng này có thể được bao gồm từ https://github.com/esp8266/Arduino/blob/master/tools/sdk/include/user_interface.h trong Arduino-ESP8266. Tôi đã không tự mình thử điều này và tôi cũng không thể nói rằng nó thực sự xóa thông tin quan trọng về bảo mật khỏi flash.

abc

Hoặc, như bạn cũng đã phát hiện ra, việc xóa toàn bộ đèn flash sẽ giúp lọc dữ liệu WiFi một cách chắc chắn. Điều này có thể đạt được bằng cách sử dụng esptool.pyvới erase_flashtùy chọn, ví dụ python esptool.py -p COM6 erase_flash. Sau đó, bạn có thể flash chương trình cơ sở mới sẽ không sử dụng cài đặt WiFi trước đó (nhưng có thể sẽ mở lại điểm truy cập mặc định).

Sau đó, cũng ESP.eraseConfigchỉ xóa các lĩnh vực flash có liên quan.


Cảm ơn bạn. Có cách nào để xóa thông tin đăng nhập được đặt trước đó từ đèn flash không? EDIT: Nhận thấy rằng điều đó là có thể với esptool: Esp8266.com/viewtopic.php?f=32&t=8204
Geier

1
@Geier cập nhật.
Maximilian Gerhardt

1
WiFi.disconnect () cũng xóa các thông tin đã nhớ
Juraj
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.