介尘部落

文学|音乐|休闲娱乐|计算机技术|地球科学|社会学——知识成就命运


Esp32中存储设备号等信息的方案

存储设备号(设备ID)在ESP32上的最佳方案通常会考虑到以下几个因素:

1. 使用NVS(Non-Volatile Storage)

ESP32提供了NVS作为一种非易失性存储的方式,非常适合存储小量的数据,如设备号、配置信息等。使用NVS存储设备号的步骤如下:

初始化NVS:

#include "nvs_flash.h"
#include "nvs.h"

esp_err_t ret = nvs_flash_init();
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
    ESP_ERROR_CHECK(nvs_flash_erase());
    ret = nvs_flash_init();
}
ESP_ERROR_CHECK(ret);

保存设备号到NVS:

nvs_handle_t my_handle;
ret = nvs_open("storage", NVS_READWRITE, &my_handle);
ESP_ERROR_CHECK(ret);

// 假设设备号为字符串形式
char *device_id = "ESP32_Device_001";
ret = nvs_set_str(my_handle, "device_id", device_id);
ESP_ERROR_CHECK(ret);

ret = nvs_commit(my_handle);
ESP_ERROR_CHECK(ret);

nvs_close(my_handle);

读取设备号从NVS:

nvs_handle_t my_handle;
char retrieved_device_id[32]; // 假设设备号的最大长度为32

ret = nvs_open("storage", NVS_READONLY, &my_handle);
ESP_ERROR_CHECK(ret);

size_t required_size;
ret = nvs_get_str(my_handle, "device_id", NULL, &required_size);
if (ret == ESP_OK) {
    ret = nvs_get_str(my_handle, "device_id", retrieved_device_id, &required_size);
    ESP_ERROR_CHECK(ret);
    printf("Retrieved device ID: %s\n", retrieved_device_id);
} else {
    printf("Error (%d) reading device ID!\n", ret);
}

nvs_close(my_handle);

2. 使用EEPROM模拟

ESP32并没有真正的EEPROM,但可以通过软件模拟EEPROM来存储设备号。这种方法需要额外的库支持,例如 EEPROM.hEEPROM32.h 等库来模拟EEPROM操作。

示例使用EEPROM32.h库存储设备号:

#include <EEPROM32.h>

EEPROM.begin(512); // 初始化EEPROM,参数为EEPROM大小

// 保存设备号到EEPROM
String device_id = "ESP32_Device_001";
EEPROM.writeString(0, device_id);
EEPROM.commit();

// 读取设备号从EEPROM
String retrieved_device_id = EEPROM.readString(0);
Serial.println("Retrieved device ID: " + retrieved_device_id);

在ESP32上,使用EEPROM模拟的方式存储设备号是不会在固件更新中丢失的,因为ESP32并没有真正的硬件EEPROM,而是通过软件模拟EEPROM的功能来实现。这种软件模拟的EEPROM存储是在ESP32的Flash存储器中的一小部分,不会被固件更新过程所影响。

具体来说,使用 EEPROM.hEEPROM32.h 等库来模拟EEPROM时,存储的数据会被写入到Flash的特定位置,而这些位置不会受到固件更新过程的影响。固件更新通常只会更新代码和相关数据分区,而不会影响Flash中未被指定更新的部分,因此存储在EEPROM模拟区域中的设备号不会丢失。

当然,需要注意的是,确保在固件更新时不要误操作或者未经意地擦除了存储设备号的EEPROM区域。因此,在实现中,建议在进行固件更新前备份重要的EEPROM数据,以防止意外情况的发生。

总结来说,使用EEPROM模拟的方式存储设备号在ESP32上是一种安全可靠的方法,不会因为固件更新而丢失。

3. 使用SPIFFS或FAT文件系统

如果设备号较长或需要与其他配置信息一起存储,可以考虑使用SPIFFS或FAT文件系统来存储设备号。

示例使用SPIFFS存储设备号:

阅读全文
公众号-介尘阅读时光
赞赏支持

0 Responses to “Esp32中存储设备号等信息的方案”

Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)

×