Apakah ESP8266 entah bagaimana mengingat data akses wifi?

10

Hari ini saya bermain-main dengan ESP8266, mencoba OTA dan menulis server web. Untuk menemukan kesalahan, saya mengurangi sketsa menjadi hanya baris berikut:

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

Perhatikan bahwa tidak ada kode untuk terhubung ke jaringan Wifi. Namun, chip tersebut masih terhubung ke jaringan lokal saya, yang dijamin WPA2, pada setiap booting. Saya bisa ping chip, browser saya bisa mendapatkan "Hai di sana!" pesan melalui http, pesan Serial akan dicetak.

Bagaimana ini mungkin? Apakah ESP8266 mempertahankan informasi Wifi, mungkin karena beberapa data OTA lama yang tidak sepenuhnya ditimpa?

Saya menggunakan platformio. Inilah seluruh platformio.ini saya:

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

Saya memposting kompilasi dan mengunggah log di sini: https://pastebin.com/BtGrFZiu

Geier
sumber

Jawaban:

12

Ya, biasanya kredensial WiFi terakhir akan disimpan dalam flash dan ESP8266 memuat data ini saat bootup dan menyambung kembali ke WiFi yang terakhir diketahui. Lihat https://github.com/esp8266/Arduino/issues/2843#issuecomment-334250100 :

SDK menyimpan beberapa info, termasuk kredensial wifi, di sektor flash.

Sektor itu disimpan di antara flashings untuk memungkinkan startup cepat setelah pembaruan. Saat boot, sebelum sketsa Anda dieksekusi, SDK akan mengambil kredensial wifi dan mencoba koneksi cepat.

Perilaku ini dapat dikendalikan dengan menggunakan fungsi yang WiFi.setAutoConnect(autoConnect)didokumentasikan di https://github.com/esp8266/Arduino/blob/master/doc/esp8266wifi/station-class.rst#setautoconnect . Ini pada gilirannya memanggil fungsi Espressif SDK wifi_station_set_auto_connect( referensi API )

masukkan deskripsi gambar di sini

Singkatnya: Ini adalah perilaku normal. Jika Anda ingin memastikan bahwa ESP8266 Anda tidak terhubung ke WiFi apa pun kecuali Anda mengatakannya melakukannya secara eksplisit, hubungi WiFi.setAutoConnect(autoConnect)di awal.

Sunting: Dari dalam kode firmware, Anda dapat menggunakan system_restore. Dokumentasi mengatakan bahwa itu akan mengatur ulang data terkait WiFi. Ini akan merusak pengaturan sebelumnya. Fungsi ini dapat dimasukkan dari https://github.com/esp8266/Arduino/blob/master/tools/sdk/include/user_interface.h dalam Arduino-ESP8266. Saya belum mencobanya sendiri dan saya tidak dapat mengatakan bahwa itu benar-benar menghapus informasi keamanan penting dari flash.

abc

Atau, seperti yang telah Anda ketahui, menghapus seluruh blitz akan menghapus data WiFi dengan pasti. Ini dapat dicapai dengan menggunakan esptool.pydengan erase_flashopsi, misalnya python esptool.py -p COM6 erase_flash. Kemudian Anda dapat mem-flash firmware baru yang tidak akan menggunakan pengaturan WiFi sebelumnya (tetapi mungkin akan membuka lagi jalur akses default).

Lalu ada juga ESP.eraseConfigyang hanya menghapus sektor flash yang relevan.

Maximilian Gerhardt
sumber
Terima kasih. Apakah ada cara untuk menghapus kredensial yang sebelumnya ditetapkan dari flash? EDIT: Ditemukan bahwa itu mungkin dengan esptool: esp8266.com/viewtopic.php?f=32&t=8204
Geier
1
@ Geier diperbarui.
Maximilian Gerhardt
1
WiFi.disconnect () menghapus kredensial yang diingat juga
Juraj