Dear Sir/Madam,
I have upgraded the WiFi Manager Autoconnect with custom parameters to work with ArduinoJson 6. However, the custom parameters do not retain after the reset otherwise work as expected. I doubly ensured that I haven’t uncommented the
//wm.resetSettings();.
I am struggling for a long. One year back I had the same issue question on Arduino Forum [https://forum.arduino.cc/t/wifi-manager-custom-parameters-are-not-saved-in-memory-via-ondemand-portal/921063/5]
I have hope from this forum. Kindly pinpoint where I go wrong.
#include <FS.h> // this needs to be first, or it all crashes and burns…
#include <WiFiManager.h> // https://github.com/tzapu/WiFiManager
#include <ArduinoJson.h> // https://github.com/bblanchon/ArduinoJson
#ifdef ESP32
#include <SPIFFS.h>
#endif
//define your default values here, if there are different values in config.json, they are overwritten.
char telegram_token[50] = “YOUR_TELEGRAM_TOKEN”;
char chat_id[15] = “UrChatID”;
//flag for saving data
bool shouldSaveConfig = false;
//callback notifying us of the need to save config
void saveConfigCallback () {
Serial.println(“Should save config”);
shouldSaveConfig = true;
}
void setupSpiffs(){
//clean FS, for testing
// SPIFFS.format();
//read configuration from FS json
Serial.println(“mounting FS…”);
if (SPIFFS.begin()) {
Serial.println(“mounted file system”);
if (SPIFFS.exists(“/config.json”)) {
//file exists, reading and loading
Serial.println(“reading config file”);
File configFile = SPIFFS.open(“/config.json”, “r”);
if (configFile) {
Serial.println(“opened config file”);
size_t size = configFile.size();
// Allocate a buffer to store contents of the file.
std::unique_ptr<char[]> buf(new char[size]);
configFile.readBytes(buf.get(), size);
DynamicJsonDocument json(1024); //json(ESP.getMaxFreeBlockSize());
DeserializationError error = deserializeJson(json,buf.get());
//JsonObject& json = jsonBuffer.parseObject();
//json.printTo(Serial);
serializeJson(json,Serial);
if (!error) {
Serial.println(“\nparsed json”);
//strcpy(mqtt_server, json[“mqtt_server”]);
strcpy(telegram_token, json[“telegram_token”]);
strcpy(chat_id, json[“chat_id”]);
} else {
Serial.println(“failed to load json config”);
}
}
}
} else {
Serial.println(“failed to mount FS”);
}
//end read
}
void setup() {
WiFi.mode(WIFI_STA); // explicitly set mode, esp defaults to STA+AP
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println();
setupSpiffs();
// WiFiManager, Local intialization. Once its business is done, there is no need to keep it around
WiFiManager wm;
//set config save notify callback
wm.setSaveConfigCallback(saveConfigCallback);
// setup custom parameters
//
// The extra parameters to be configured (can be either global or just in the setup)
// After connecting, parameter.getValue() will get you the configured value
// id/name placeholder/prompt default length
//WiFiManagerParameter custom_mqtt_server(“server”, “mqtt server”, mqtt_server, 40);
WiFiManagerParameter custom_telegram_token(“token”, “telegram token”, telegram_token, 50);
WiFiManagerParameter custom_chat_id(“Chat_ID”, “chat_id”, chat_id, 15);
//add all your parameters here
//wm.addParameter(&custom_mqtt_server);
wm.addParameter(&custom_telegram_token);
wm.addParameter(&custom_chat_id);
//reset settings – wipe credentials for testing
//wm.resetSettings();
//automatically connect using saved credentials if they exist
//If connection fails it starts an access point with the specified name
//here “AutoConnectAP” if empty will auto generate basedcon chipid, if password is blank it will be anonymous
//and goes into a blocking loop awaiting configuration
if (!wm.autoConnect(“AutoConnectAP”, “password”)) {
Serial.println(“failed to connect and hit timeout”);
delay(3000);
// if we still have not connected restart and try all over again
ESP.restart();
delay(5000);
}
//if you get here you have connected to the WiFi
Serial.println(“connected…yeey :)”);
//read updated parameters
// strcpy(mqtt_server, custom_mqtt_server.getValue());
strcpy(telegram_token, custom_telegram_token.getValue());
strcpy(chat_id, custom_chat_id.getValue());
//save the custom parameters to FS
if (shouldSaveConfig) {
Serial.println(“saving config”);
DynamicJsonDocument json(1024); //json(ESP.getMaxFreeBlockSize());
//JsonObject& json = jsonBuffer.createObject();
// json[“mqtt_server”] = mqtt_server;
json[“telegram_token”] = telegram_token;
json[“chat_id”] = chat_id;
File configFile = SPIFFS.open(“/config.json”, “w”);
if (!configFile) {
Serial.println(“failed to open config file for writing”);
}
serializeJsonPretty(json,Serial);
//json.prettyPrintTo(Serial);
serializeJson(json,configFile);
//json.printTo(configFile);
configFile.close();
//end save
shouldSaveConfig = false;
}
}
void loop() {
// put your main code here, to run repeatedly:
}
Hi.
I’m sorry.
But I think it is better to try to get help from the creator of the library to make sure it is not an issue related to the library itself.
I also recommend trying to take a look at the library documentation and see if there’s something missing in your code: https://github.com/tzapu/WiFiManager#custom-parameters
Regards,
Sara
Hello Madam,
It is resolved! To save custom Parameters, the Wifi (rather the “Hotspot”) to which the ESP has to connect should be “ON” so that during the first Restart connects and also retains the custom Parameters. Otherwise, it does not save the parameters.
Thank you for attending the issue.