• Skip to main content
  • Skip to primary sidebar

RNTLab.com

The Ultimate Shortcut to Learn Electronics and Programming with Open Source Hardware and Software

  • Courses
  • Forum
    • Forum
    • Ask Question
  • Shop
  • Account
  • Blog
  • Login

WiFi Manager with Custom Parameters does not save Parameters

Q&A Forum › Category: ESP32 › WiFi Manager with Custom Parameters does not save Parameters
0 Vote Up Vote Down
Prakash asked 2 months ago

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:

}

Question Tags: WiFiManager Custom Parameters
3 Answers
0 Vote Up Vote Down
Sara Santos Staff answered 2 months ago

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

0 Vote Up Vote Down
Prakash answered 2 months ago

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.

0 Vote Up Vote Down
Sara Santos Staff answered 2 months ago

Thanks for sharing the solution.
I’ll mark this issue as resolved. If you need further help, you just need to open a new question in our forum.
Regards,
Sara

Primary Sidebar

Login to Ask or Answer Questions

This Forum is private and it’s only available for members enrolled in our Courses.

Login »

Latest Course Updates

  • [eBook Updated] SMART HOME with RPi, ESP32, and ESP8266 (version 1.2) March 8, 2023
  • [eBook Updated] ESP32-CAM Projects (version 1.3) January 7, 2023

You must be logged in to view this content.

Contact Support - Refunds - Privacy - Terms - MakerAdvisor.com - Member Login

Copyright © 2013-2023 · RandomNerdTutorials.com · All Rights Reserved

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.