首页 > 解决方案 > 如何加载配置并保存新配置 LittleFS ESP32?

问题描述

我在数据文件夹中使用一个 json 文件。我想将其用作配置文件并根据需要使用值更新它。我有一个简单的草图来存储 ssid 和密码。先读出,再修改,再通过串口监视器读出,进行测试。

问题是第一次读取似乎已经被覆盖,即使我稍后调用覆盖函数,我已经在第一次读取和覆盖函数之间使用不同的延迟对其进行了测试。

这似乎很简单,那么为什么它会在调用函数之前显示覆盖的值?

这是代码:

    readJSON(LITTLEFS, "/config.json");
    String test = config["ssid"];
    Serial.println(test);

    delay(10);

    String test2;
    config["ssid"] = "InternetName";
    serializeJson(config, test2);
    writeFile(LITTLEFS, "/config.json", test2.c_str()); // String to Const char*

    delay(10);

    readJSON(LITTLEFS, "/config.json");
    String test3 = config["ssid"];
    Serial.println(test3); 

以下是 readJSON 和 writeFile 函数:

DynamicJsonDocument config(1024);
void readJSON(fs::FS &fs, const char * path){
    Serial.printf("Reading Json: %s\r\n", path);
    String output;

    File file = fs.open(path);
    if(!file || file.isDirectory()){
        Serial.println("- failed to open file for reading");
        return;
    }

    Serial.println("- read from file:");
    while(file.available()){
        //Serial.write(file.read());
        char intRead = file.read();
        output += intRead;
    }
    deserializeJson(config, output);
    file.close();
}

void writeFile(fs::FS &fs, const char * path, const char * message){
    Serial.printf("Writing file: %s\r\n", path);

    File file = fs.open(path, FILE_WRITE);
    if(!file){
        Serial.println("- failed to open file for writing");
        return;
    }
    if(file.print(message)){
        Serial.println("- file written");
    } else {
        Serial.println("- write failed");
    }
    file.close();
} 

配置.json:

{
    "ssid": "nameofinternet",
    "password": "password"
} 

输出:

Reading Json: /config.json
- read from file:
InternetName
Writing file: /config.json
- file written
Reading Json: /config.json
- read from file:
InternetName 

标签: arduinoesp32spiffsarduinojson

解决方案


推荐阅读