ESP8266 bir şekilde wifi erişim verilerini hatırlıyor mu?


10

Bugün bir ESP8266 ile uğraştım, OTA'yı denedim ve bir web sunucusu yazdım. Bir hata bulmak için, çizimi yalnızca aşağıdaki satırlara indirgedim:

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

Bir Wifi ağına bağlanmak için herhangi bir kod olmadığına dikkat edin. Ancak, çip hala her önyüklemede yerel, WPA2 korumalı ağıma bağlanıyor. Yongaya ping atabilirim, tarayıcım "Merhaba!" http ile mesaj gönderilirse, Seri mesaj yazdırılır.

Bu nasıl mümkün olabilir? ESP8266, tamamen üzerine yazılmamış bazı eski OTA verileri nedeniyle bir şekilde Wifi bilgilerini saklıyor mu?

Platformio kullanıyorum. İşte tüm platformio.ini:

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

Derleme ve yükleme günlüğünü buraya gönderdim: https://pastebin.com/BtGrFZiu

Yanıtlar:


12

Evet, normalde son WiFi kimlik bilgileri flash olarak kaydedilir ve ESP8266 bu verileri önyüklemeye yükler ve bilinen son WiFi'ye yeniden bağlanır. Bkz. Https://github.com/esp8266/Arduino/issues/2843#issuecomment-334250100 :

SDK, wifi kimlik bilgileri de dahil olmak üzere bazı bilgileri flaşın bir sektöründe saklar.

Bu sektör, güncelleme sonrasında hızlı bir başlangıç ​​yapmak için yanıp sönmeler arasında tutulur. Önyüklemede, çiziminiz yürütülmeden önce, SDK wifi kimlik bilgilerini alır ve hızlı bir bağlantı kurmaya çalışır.

Bu davranış, https://github.com/esp8266/Arduino/blob/master/doc/esp8266wifi/station-class.rst#setautoconnectWiFi.setAutoConnect(autoConnect) içinde belgelendiği gibi işlev kullanılarak kontrol edilebilir . Bu da Espressif SDK işlevini çağırır ( API başvurusu )wifi_station_set_auto_connect

resim açıklamasını buraya girin

Kısacası: Bu normal bir davranıştır. ESP8266'nızın açıkça yapmadığını söylemedikçe herhangi bir WiFi'ye bağlanmadığından emin olmak istiyorsanız WiFi.setAutoConnect(autoConnect), başlangıçta arayın .

Düzenle: Ürün yazılımı kodunun içinden kullanabilirsiniz system_restore. Belgelerde WiFi ile ilgili verilerin sıfırlanacağı belirtiliyor. Bu, önceki ayarları yok etmelidir. İşlev, Arduino-ESP8266 içindeki https://github.com/esp8266/Arduino/blob/master/tools/sdk/include/user_interface.h adresinden eklenebilir . Bunu kendim denemedim ya da güvenlik açısından kritik bilgileri flaştan sildiğini söyleyemem.

ABC

Ya da, bildiğiniz gibi, tüm flaşı silmek, WiFi verilerini mutlak bir kesinlikle temizleyecektir. Bu kullanılarak elde edilebilir esptool.pyile erase_flashörneğin seçeneğiyle, python esptool.py -p COM6 erase_flash. Ardından, önceki WiFi ayarlarını kullanmayacak (ancak muhtemelen varsayılan erişim noktasını tekrar açacak) yeni ürün yazılımını yanıp sönebilirsiniz.

Sonra ESP.eraseConfigsadece ilgili flash sektörlerini silen de var .


Teşekkür ederim. Daha önce flaştan ayarlanmış kimlik bilgilerini silmenin bir yolu var mı? DÜZENLEME: esptool ile mümkün olduğunu keşfetti: esp8266.com/viewtopic.php?f=32&t=8204
Geier

1
@Gier güncellendi.
Maximilian Gerhardt

1
WiFi.disconnect (), hatırlanan kimlik bilgilerini de kaldırır
Juraj
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.