ESP8266 จดจำการเข้าถึงข้อมูล wifi ได้หรือไม่


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

ขอให้สังเกตว่าไม่มีรหัสเพื่อเชื่อมต่อกับเครือข่ายไร้สาย อย่างไรก็ตามชิปยังคงเชื่อมต่อกับเครือข่ายในพื้นที่ที่ปลอดภัย WPA2 ของฉันในการบู๊ตทุกครั้ง ฉันสามารถปิงชิปได้เบราว์เซอร์ของฉันสามารถรับ "สวัสดี!" ข้อความผ่าน http ข้อความอนุกรมจะถูกพิมพ์

เป็นไปได้อย่างไร? ESP8266 เก็บข้อมูล Wifi อย่างใดอย่างหนึ่งหรืออาจเป็นเพราะข้อมูล OTA เก่าที่ไม่ได้เขียนทับทั้งหมด

ฉันใช้ platformio นี่คือ 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/issues/2843#issuecomment-334250100 :

SDK เก็บข้อมูลบางอย่างรวมถึงข้อมูลรับรอง wifi ในส่วนของแฟลช

ภาคนั้นจะถูกเก็บไว้ระหว่างการกะพริบเพื่ออนุญาตให้เริ่มต้นอย่างรวดเร็วหลังการอัพเดต ในการบูตก่อนที่ร่างของคุณจะถูกดำเนินการ SDK จะดึงข้อมูลรับรอง wifi และพยายามเชื่อมต่อที่รวดเร็ว

ลักษณะการทำงานนี้สามารถควบคุมได้โดยใช้ฟังก์ชั่น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 ของคุณไม่ได้เชื่อมต่อกับ WiFi ใด ๆ เว้นแต่คุณจะบอกให้ทำอย่างชัดเจนให้โทรไปWiFi.setAutoConnect(autoConnect)ที่จุดเริ่มต้น

แก้ไข: จากภายในรหัสเฟิร์ม, system_restoreคุณสามารถใช้ เอกสารระบุว่าจะรีเซ็ตข้อมูลที่เกี่ยวข้องกับ WiFi สิ่งนี้ควรทำลายการตั้งค่าก่อนหน้า สามารถรวมฟังก์ชั่นนี้ได้จากhttps://github.com/esp8266/Arduino/blob/master/tools/sdk/include/user_interface.hภายใน Arduino-ESP8266 ฉันไม่ได้ลองตัวเองและฉันไม่สามารถพูดได้ว่าจริง ๆ แล้วมันลบข้อมูลความปลอดภัยที่สำคัญจากแฟลชแม้ว่า

abc

หรืออย่างที่คุณทราบการลบแฟลชทั้งหมดจะลบข้อมูล WiFi อย่างแน่นอน นี้สามารถทำได้โดยใช้esptool.pyกับตัวเลือกเช่นerase_flash python esptool.py -p COM6 erase_flashจากนั้นคุณสามารถแฟลชเฟิร์มแวร์ใหม่ซึ่งจะไม่ใช้การตั้งค่า WiFi ก่อนหน้า (แต่อาจจะเปิดจุดเชื่อมต่อเริ่มต้นอีกครั้ง)

จากนั้นยังมีESP.eraseConfigซึ่งจะลบเฉพาะภาคแฟลชที่เกี่ยวข้อง


ขอบคุณ. มีวิธีลบข้อมูลรับรองที่ถูกตั้งค่าไว้ก่อนหน้าจากแฟลชหรือไม่ แก้ไข: พบว่าเป็นไปได้กับ esptool: esp8266.com/viewtopic.php?f=32&t=8204
Geier

1
@Geier อัพเดทแล้ว
Maximilian Gerhardt

1
WiFi.disconnect () ลบข้อมูลรับรองที่จำได้เช่นกัน
Juraj
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.