RFC: offical API to save WiFi-connection parameter
After @MarkR42 explained that the automatic storing of the WiFi-connection parameter can wear-out the flash of the ESP8266 many discussions came up: #2510, #2547, #2564 and http://forum.micropython.org/viewtopic.php?f=16&t=2631
This explains the importance of this issue.
In principle, the feature of saving the connection parameter is due to the ESP8266 SDK and strictly speaking not compatible to the existing HW API (https://github.com/micropython/micropython/wiki/Hardware-API#the-wlan-class). But on the other hand it provides a nice user experience. Also @pfalcon explained that this is a common feature in smart phones, computers, … So we have to expect, that the ESP8266 will not be the only device that supports saving of WiFi-connection parameters.
But, this side effects can lead to permanent hardware damage. Thus, we need a way to at least deactivate this feature.
Therefore, we have to find an agreement about the method, default behaviour and API names. That is the reason for this issue.
There are already three different possible methods described:
a) #2510 additional parameter save_to_flash in wlan.connect()
b) https://github.com/micropython/micropython/pull/2510#issuecomment-255714114 additional function esp.persist_wlan(val) which allows the user to turn on/off the feature of saving WiFi settings to flash
c) #2564 additional function esp.save_config() to save configuration to flash on demand
As default behaviour we have the possibilities:
wlan.connect()andwlan.active()always save to flash. That will probably lead to permanent hardware damage and is not possible for devices that do not support the saving (e.g. the WiPy board).wlan.connect()andwlan.active()don't always save to flash. This will break the user experience of the ESP8266 users.
What are your comments?
Wifi credentials are not store to flash
Hi,
this is important different wifi think between ESP8266 and ESP32. ESP8266 store wifi credentials by default with ESP API, but for ESP32 you need to call esp_wifi_set_storage with right value, end call esp_wifi_set_auto connect, which is not call in modnetwork.c en ESP32 port.
So, it will be fine, when this additional API for ESP32 will be wrapped to python library. Many flash area overwriting crash the flash, but without storing credentials to flash devices will be more vulnerable.
And mainly, this can be documented well in examples, because, code for ESP8266, which do auto-connect with stored credentials not work on ESP32!