Documentation

https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-reference/storage/nvs_flash.html

Initialse NVS

Needs to be done before your program tries to access the NVS

#include "nvs_flash.h"

	//INITIALIZE NVS
	printf("Initialising NVS...\n");

	esp_err_t err = nvs_flash_init();
	//err = nvs_flash_init();
	if (err == ESP_ERR_NVS_NO_FREE_PAGES || err == ESP_ERR_NVS_NEW_VERSION_FOUND)
	{
		// NVS partition was truncated and needs to be erased
		// Retry nvs_flash_init
		printf("Initialise NVS erase needed\n");

		ESP_ERROR_CHECK(nvs_flash_erase());
		err = nvs_flash_init();
	}
	ESP_ERROR_CHECK (err);

Write value

#include "nvs_flash.h"

	//WRITE TO NV MEMORY
	uint8_t MyNvValue = 123;
	nvs_handle_t my_handle;

	printf("Writing NVS value...\n");
	esp_err_t err = nvs_open("storage", NVS_READWRITE, &my_handle);
	err = nvs_open("storage", NVS_READWRITE, &my_handle);
	if (err != ESP_OK)
	{
		printf("Error (%s) opening NVS handle!\n", esp_err_to_name(err));
	}
	else
	{
		//Write
		err = nvs_set_u8(my_handle, "MyNvValue", MyNvValue);		//<<< nvs_set_u8, nvs_set_i16, nvs_set_u16, nvs_set_i32, nvs_set_u32, nvs_set_i64, nvs_set_u64, nvs_set_str
		printf((err != ESP_OK) ? "Failed!\n" : "Done\n");

		//Commit written value (nvs_commit() must be called to ensure changes are written to flash storage)
		printf("Committing updates in NVS... ");
		err = nvs_commit(my_handle);
		printf((err != ESP_OK) ? "Failed!\n" : "Done\n");

		//Close
		nvs_close(my_handle);
	}

Read value

#include "nvs_flash.h"

	//READ FROM NV MEMORY
	printf("Reading NVS value...\n");
	nvs_handle_t my_handle;
	uint8_t MyNvValue = 0;

	esp_err_t err = nvs_open("storage", NVS_READWRITE, &my_handle);
	if (err != ESP_OK)
	{
		printf("Error (%s) opening NVS handle!\n", esp_err_to_name(err));
	}
	else
	{
		err = nvs_get_u8(my_handle, "MyNvValue", &MyNvValue);		//<<< nvs_get_u8, nvs_get_i16, nvs_get_u16, nvs_get_i32, nvs_get_u32, nvs_get_i64, nvs_get_u64, nvs_get_str
		switch (err)
		{
			case ESP_OK:
				printf("MyNvValue = %d\n", MyNvValue);
				break;
			case ESP_ERR_NVS_NOT_FOUND:
				printf("The MyNvValue value is not initialized yet!\n");
				//MyNvValue = 0;			//<Not necessary, the previous value will not have been overwritten if not found
				break;
			default :
				printf("Error (%s) reading!\n", esp_err_to_name(err));
		}

		// Close
		nvs_close(my_handle);
	}