nvs_store.c
La partición NVS es la memoria de supervivencia de ESP-IDF: pares de radio, claves Wi-Fi e IDs de Matter viven ahí como pares clave-valor con desgaste repartido. Este sketch persiste un contador de arranques y lee una cadena.
Hardware necesario
Una placa ESP32-H2 (RISC-V a 96 MHz, radio IEEE 802.15.4 solo — sin Wi-Fi) tipo DevKitM-1, alimentada por USB. Ninguno: basta la flash del módulo (partición nvs creada por idf.py).
Cableado
Sin cableado. Consola USB-Serial/JTAG para ver los logs en cada reinicio.
Funcionamiento
nvs_flash_init monta la partición (borrado automático si está vacía), nvs_open abre el namespace « config », set_i32+commit garantizan la escritura. nvs_get_str pasa NULL para el tamaño y devuelve ESP_ERR_NVS_NOT_FOUND si falta. Prográmelo con ESP-IDF (idf.py set-target esp32h2); el puerto USB-Serial/JTAG (GPIO26/27) sirve de consola y puerto de flash. Mantenga Boot + Reset para modo download si hace falta.
Para ir más lejos
Guarde ahí los ajustes de su nodo (canal 802.15.4, umbrales de sensor) y un factory-reset con nvs_flash_erase().
nvs_store.c
// nvs_store.c — compteur persistant dans la partition NVS.
#include <string.h>
#include "nvs_flash.h"
#include "nvs.h"
#include "esp_log.h"
static const char *TAG = "nvs";
void app_main(void)
{
esp_err_t err = nvs_flash_init(); // partition « nvs » du partition table
if (err == ESP_ERR_NVS_NO_FREE_PAGES || err == ESP_ERR_NVS_NEW_VERSION_FOUND) {
ESP_ERROR_CHECK(nvs_flash_erase()); // efface seulement au 1er flash
err = nvs_flash_init();
}
ESP_ERROR_CHECK(err);
nvs_handle_t h;
ESP_ERROR_CHECK(nvs_open("config", NVS_READWRITE, &h));
int32_t n = 0;
nvs_get_i32(h, "compteur", &n); // 0 si absent
n++;
ESP_ERROR_CHECK(nvs_set_i32(h, "compteur", n));
ESP_ERROR_CHECK(nvs_commit(h)); // ecriture physique
ESP_LOGI(TAG, "demarrage n°%d persiste", (int)n);
char wifi[32] = "inconnu";
if (nvs_get_str(h, "reseau", wifi, NULL) == ESP_OK)
ESP_LOGI(TAG, "reseau memorise : %s", wifi);
nvs_close(h);
while (1) vTaskDelay(pdMS_TO_TICKS(1000));
}