]> granicus.if.org Git - esp-idf/commitdiff
Non-Volatile Storage (NVS) example
authorKrzysztof <krzychb@gazeta.pl>
Sun, 6 Nov 2016 16:41:08 +0000 (17:41 +0100)
committerKrzysztof <krzychb@gazeta.pl>
Sun, 6 Nov 2016 17:19:49 +0000 (18:19 +0100)
Demonstrates how to read and write a value using NVS.
The value tracks number of ESP32 module restarts.
Example also shows how to use basic diagnostics if read / write
operation was successful.

examples/07_nvs_read_write/Makefile [new file with mode: 0644]
examples/07_nvs_read_write/README.md [new file with mode: 0644]
examples/07_nvs_read_write/main/component.mk [new file with mode: 0644]
examples/07_nvs_read_write/main/nvs_read_write.c [new file with mode: 0644]

diff --git a/examples/07_nvs_read_write/Makefile b/examples/07_nvs_read_write/Makefile
new file mode 100644 (file)
index 0000000..3d6adb4
--- /dev/null
@@ -0,0 +1,9 @@
+#
+# This is a project Makefile. It is assumed the directory this Makefile resides in is a
+# project subdirectory.
+#
+
+PROJECT_NAME := nvs-read-write
+
+include $(IDF_PATH)/make/project.mk
+
diff --git a/examples/07_nvs_read_write/README.md b/examples/07_nvs_read_write/README.md
new file mode 100644 (file)
index 0000000..bac8ee8
--- /dev/null
@@ -0,0 +1,7 @@
+# Non-Volatile Storage (NVS) Read and Write Example
+
+Demonstrates how to read and write a value using NVS. The value tracks number of ESP32 module restarts.
+
+Example also shows how to use basic diagnostics if read / write operation was successful.
+
+See the README.md file in the upper level 'examples' directory for more information about examples.
diff --git a/examples/07_nvs_read_write/main/component.mk b/examples/07_nvs_read_write/main/component.mk
new file mode 100644 (file)
index 0000000..24356f2
--- /dev/null
@@ -0,0 +1,10 @@
+#
+# Main Makefile. This is basically the same as a component makefile.
+#
+# This Makefile should, at the very least, just include $(SDK_PATH)/make/component_common.mk. By default, 
+# this will take the sources in the src/ directory, compile them and link them into 
+# lib(subdirectory_name).a in the build directory. This behaviour is entirely configurable,
+# please read the ESP-IDF documents if you need to do this.
+#
+
+include $(IDF_PATH)/make/component_common.mk
diff --git a/examples/07_nvs_read_write/main/nvs_read_write.c b/examples/07_nvs_read_write/main/nvs_read_write.c
new file mode 100644 (file)
index 0000000..40d330f
--- /dev/null
@@ -0,0 +1,62 @@
+/* Non-Volatile Storage (NVS) Read and Write Example
+
+   This example code is in the Public Domain (or CC0 licensed, at your option.)
+
+   Unless required by applicable law or agreed to in writing, this
+   software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+   CONDITIONS OF ANY KIND, either express or implied.
+*/
+#include <stdio.h>
+#include "freertos/FreeRTOS.h"
+#include "freertos/task.h"
+#include "esp_system.h"
+#include "nvs_flash.h"
+#include "nvs.h"
+
+void app_main()
+{
+    nvs_flash_init();
+    system_init();
+
+    nvs_handle handle_to_settings;
+    esp_err_t err;
+    int32_t restart_counter = 0;
+
+    // Open the NVS
+    printf("Opening Non-Volatile Storage (NVS) ... ");
+    err = nvs_open("settings", NVS_READWRITE, &handle_to_settings);
+    printf((err != ESP_OK) ? "Failed!\n" : "OK\n");
+
+    // Read from the NVS
+    printf("Reading restart counter from NVS ... ");
+    err = nvs_get_i32(handle_to_settings, "restart_conter", &restart_counter);
+    switch (err) {
+        case ESP_OK:
+            printf("OK\n");
+            printf("Restart counter = %d\n", restart_counter);
+            break;
+        case ESP_ERR_NVS_NOT_FOUND:
+            printf("The counter is not initialized yet!\n");
+            break;
+        default :
+            printf("Error (%d) reading!\n", err);
+    }
+
+    // Write to the NVS
+    printf("Updating restart counter in NVS ... ");
+    restart_counter++;
+    err = nvs_set_i32(handle_to_settings, "restart_conter", restart_counter);
+    printf((err != ESP_OK) ? "Failed!\n" : "OK\n");
+
+    // Close the NVS
+    nvs_close(handle_to_settings);
+
+    // Restart module
+    for (int i = 10; i >= 0; i--) {
+        printf("Restarting in %d seconds...\n", i);
+        vTaskDelay(1000 / portTICK_RATE_MS);
+    }
+    printf("Restarting now.\n");
+    fflush(stdout);
+    system_restart();
+}