#include //this needs to be first, or it all crashes and burns... #include //https://github.com/esp8266/Arduino //needed for library #include #include #include //https://github.com/tzapu/WiFiManager #include //https://github.com/bblanchon/ArduinoJson //define your default values here, if there are different values in config.json, they are overwritten. const char *mqtt_server = NULL; const char *mqtt_port = "8080"; const char *blynk_token = "YOUR_BLYNK_TOKEN"; void setup() { // put your setup code here, to run once: Serial.begin(115200); Serial.println(); //read configuration from FS json //SPIFFS.format(); Serial.println("Mounting FS..."); if (!SPIFFS.begin()) { Serial.println("Failed to mount file system"); //abort return; } 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 buf(new char[size]); configFile.readBytes(buf.get(), size); StaticJsonBuffer<200> jsonBuffer; JsonObject& json = jsonBuffer.parseObject(buf.get()); json.printTo(Serial); if (json.success()) { Serial.println("\nParsed json"); mqtt_server = json["mqtt_server"]; mqtt_port = json["mqtt_port"]; blynk_token = json["blynk_token"]; } else { Serial.println("Failed to load json config"); } } } //end read // 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_mqtt_port("port", "mqtt port", mqtt_port, 8); WiFiManagerParameter custom_blynk_token("blynk", "blynk token", blynk_token, 32); //WiFiManager //Local intialization. Once its business is done, there is no need to keep it around WiFiManager wifiManager; //add all your parameters here wifiManager.addParameter(&custom_mqtt_server); wifiManager.addParameter(&custom_mqtt_port); wifiManager.addParameter(&custom_blynk_token); //reset settings - for testing //wifiManager.resetSettings(); //sets timeout until configuration portal gets turned off //useful to make it all retry or go to sleep //in seconds //wifiManager.setTimeout(120); //fetches ssid and pass and tries to connect //if it does not connect it starts an access point with the specified name //here "AutoConnectAP" //and goes into a blocking loop awaiting configuration if (!wifiManager.autoConnect("AutoConnectAP")) { Serial.println("failed to connect and hit timeout"); delay(3000); //reset and try again, or maybe put it to deep sleep ESP.reset(); delay(5000); } //if you get here you have connected to the WiFi Serial.println("connected...yeey :)"); //read updated parameters mqtt_server = custom_mqtt_server.getValue(); mqtt_port = custom_mqtt_port.getValue(); blynk_token = custom_blynk_token.getValue(); //save the custom parameters to FS StaticJsonBuffer<200> jsonBuffer; JsonObject& json = jsonBuffer.createObject(); json["mqtt_server"] = mqtt_server; json["mqtt_port"] = mqtt_port; json["blynk_token"] = blynk_token; File configFile = SPIFFS.open("/config.json", "w"); if (!configFile) { Serial.println("Failed to open config file for writing"); return; } json.printTo(Serial); json.printTo(configFile); configFile.close(); //end save } void loop() { // put your main code here, to run repeatedly: }