mirror of
				https://github.com/eledio-devices/thirdparty-ArduinoJson.git
				synced 2025-10-31 08:42:39 +01:00 
			
		
		
		
	Added an example that shows how to save and load a configuration file
This commit is contained in:
		| @@ -8,7 +8,8 @@ HEAD | ||||
| * Added a clear error message when compiled as C instead of C++ (issue #629) | ||||
| * Added detection of MPLAB XC compiler (issue #629) | ||||
| * Added detection of Keil ARM Compiler (issue #629) | ||||
| * Reworked all examples | ||||
| * Added an example that shows how to save and load a configuration file | ||||
| * Reworked all other examples | ||||
|  | ||||
| > ### How to use the new feature? | ||||
| > | ||||
|   | ||||
							
								
								
									
										144
									
								
								examples/JsonConfigFile/JsonConfigFile.ino
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										144
									
								
								examples/JsonConfigFile/JsonConfigFile.ino
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,144 @@ | ||||
| // ArduinoJson - arduinojson.org | ||||
| // Copyright Benoit Blanchon 2014-2017 | ||||
| // MIT License | ||||
| // | ||||
| // This example shows how to store your project configuration in a file. | ||||
| // It uses the SD library but can be easily modified for any other file-system. | ||||
| // | ||||
| // The file contains a JSON document with the following content: | ||||
| // { | ||||
| //   "hostname": "examples.com", | ||||
| //   "port": 2731 | ||||
| // } | ||||
|  | ||||
| #include <ArduinoJson.h> | ||||
| #include <SD.h> | ||||
| #include <SPI.h> | ||||
|  | ||||
| // Configuration that we'll store on disk | ||||
| struct Config { | ||||
|   char hostname[64]; | ||||
|   int port; | ||||
| }; | ||||
|  | ||||
| const char *filename = "/config.txt";  // <- SD library uses 8.3 filenames | ||||
| Config config;                         // <- global configuration object | ||||
|  | ||||
| // Loads the configuration from a file | ||||
| void loadConfiguration(const char *filename, Config &config) { | ||||
|   // Open file for reading | ||||
|   File file = SD.open(filename); | ||||
|  | ||||
|   // Allocate the memory pool on the stack. | ||||
|   // Don't forget to change the capacity to match your JSON document. | ||||
|   // Use https://arduinojson.org/assistant/ to compute the capacity. | ||||
|   StaticJsonBuffer<512> jsonBuffer; | ||||
|  | ||||
|   // Parse the root object | ||||
|   JsonObject &root = jsonBuffer.parseObject(file); | ||||
|  | ||||
|   if (!root.success()) | ||||
|     Serial.println(F("Failed to read file, using default configuration")); | ||||
|  | ||||
|   // Copy values from the JsonObject to the Config | ||||
|   config.port = root["port"] | 2731; | ||||
|   strlcpy(config.hostname,                   // <- destination | ||||
|           root["hostname"] | "example.com",  // <- source | ||||
|           sizeof(config.hostname));          // <- destination's capacity | ||||
|  | ||||
|   // Close the file (File's destructor doesn't close the file) | ||||
|   file.close(); | ||||
| } | ||||
|  | ||||
| // Saves the configuration to a file | ||||
| void saveConfiguration(const char *filename, const Config &config) { | ||||
|   // Delete existing file, otherwise the configuration is appended to the file | ||||
|   SD.remove(filename); | ||||
|  | ||||
|   // Open file for writing | ||||
|   File file = SD.open(filename, FILE_WRITE); | ||||
|   if (!file) { | ||||
|     Serial.println(F("Failed to create file")); | ||||
|     return; | ||||
|   } | ||||
|  | ||||
|   // Allocate the memory pool on the stack | ||||
|   // Don't forget to change the capacity to match your JSON document. | ||||
|   // Use https://arduinojson.org/assistant/ to compute the capacity. | ||||
|   StaticJsonBuffer<256> jsonBuffer; | ||||
|  | ||||
|   // Parse the root object | ||||
|   JsonObject &root = jsonBuffer.createObject(); | ||||
|  | ||||
|   // Set the values | ||||
|   root["hostname"] = config.hostname; | ||||
|   root["port"] = config.port; | ||||
|  | ||||
|   // Serialize JSON to file | ||||
|   if (root.printTo(file) == 0) { | ||||
|     Serial.println(F("Failed to write to file")); | ||||
|   } | ||||
|  | ||||
|   // Close the file (File's destructor doesn't close the file) | ||||
|   file.close(); | ||||
| } | ||||
|  | ||||
| // Prints the content of a file to the Serial | ||||
| void printFile(const char *filename) { | ||||
|   // Open file for reading | ||||
|   File file = SD.open(filename); | ||||
|   if (!file) { | ||||
|     Serial.println(F("Failed to read file")); | ||||
|     return; | ||||
|   } | ||||
|  | ||||
|   // Extract each characters by one by one | ||||
|   while (file.available()) { | ||||
|     Serial.print((char)file.read()); | ||||
|   } | ||||
|   Serial.println(); | ||||
|  | ||||
|   // Close the file (File's destructor doesn't close the file) | ||||
|   file.close(); | ||||
| } | ||||
|  | ||||
| void setup() { | ||||
|   // Initialize serial port | ||||
|   Serial.begin(9600); | ||||
|   while (!Serial) continue; | ||||
|  | ||||
|   // Initialize SD library | ||||
|   while (!SD.begin()) { | ||||
|     Serial.println(F("Failed to initialize SD library")); | ||||
|     delay(1000); | ||||
|   } | ||||
|  | ||||
|   // Should load default config if run for the first time | ||||
|   Serial.println(F("Loading configuration...")); | ||||
|   loadConfiguration(filename, config); | ||||
|  | ||||
|   // Create configuration file | ||||
|   Serial.println(F("Saving configuration...")); | ||||
|   saveConfiguration(filename, config); | ||||
|  | ||||
|   // Dump config file | ||||
|   Serial.println(F("Print config file...")); | ||||
|   printFile(filename); | ||||
| } | ||||
|  | ||||
| void loop() { | ||||
|   // not used in this example | ||||
| } | ||||
|  | ||||
| // See also | ||||
| // -------- | ||||
| // | ||||
| // The website arduinojson.org contains the documentation for all the functions | ||||
| // used above. It also includes an FAQ that will help you solve any | ||||
| // serialization or deserialization problem. | ||||
| // Please check it out at: https://arduinojson.org/ | ||||
| // | ||||
| // The book "Mastering ArduinoJson" contains a case study of a project that has | ||||
| // a complex configuration with nested members. | ||||
| // Contrary to this example, the project in the book uses the SPIFFS filesystem. | ||||
| // Please check it out at: https://leanpub.com/arduinojson/ | ||||
		Reference in New Issue
	
	Block a user