存储设备号(设备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.h
或 EEPROM32.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.h
或 EEPROM32.h
等库来模拟EEPROM时,存储的数据会被写入到Flash的特定位置,而这些位置不会受到固件更新过程的影响。固件更新通常只会更新代码和相关数据分区,而不会影响Flash中未被指定更新的部分,因此存储在EEPROM模拟区域中的设备号不会丢失。
当然,需要注意的是,确保在固件更新时不要误操作或者未经意地擦除了存储设备号的EEPROM区域。因此,在实现中,建议在进行固件更新前备份重要的EEPROM数据,以防止意外情况的发生。
总结来说,使用EEPROM模拟的方式存储设备号在ESP32上是一种安全可靠的方法,不会因为固件更新而丢失。
3. 使用SPIFFS或FAT文件系统
如果设备号较长或需要与其他配置信息一起存储,可以考虑使用SPIFFS或FAT文件系统来存储设备号。
示例使用SPIFFS存储设备号:
阅读全文
公众号近期文章
赞赏支持
0 Responses to “Esp32中存储设备号等信息的方案”