تم تصميم مكتبة ESP32 IDF غير متقلبة (NVS) لتخزين أزواج القيمة الرئيسية في الفلاش.
1. الميزات
2. ESP32 NVS
3. الاستخدام الأساسي
4. البدء
5. مثال
6. المساهمة
7. ترخيص
تعمل NVS على أزواج القيمة الرئيسية. المفاتيح هي سلاسل ASCII ، الحد الأقصى لطول المفتاح هو حاليًا 15 حرفًا. يمكن أن يكون للقيم أحد الأنواع التالية:
يقوم NVS بتعيين كل زوج من القيمة الرئيسية لأحد مساحات الأسماء. تتبع أسماء مساحة الاسم نفس القواعد مثل أسماء المفاتيح ، أي الحد الأقصى للطول هو 15 حرفًا. علاوة على ذلك ، لا يمكن أن يكون هناك أكثر من 254 مساحات أسماء مختلفة في قسم NVS واحد.
#include <stdlib.h>
#include "esp_check.h"
#include "esp_log.h"
#include "non_volatile_storage.h"
static const char * TAG = "app_main" ;
void app_main ( void )
{
ESP_ERROR_CHECK ( nvs_init ());
// Float
float write_float = 123456.789 ;
if ( nvs_write_float ( "namespace_1" , "key_1" , write_float ) == ESP_OK ) {
ESP_LOGI ( TAG , "Successfully write float to NVS" );
} else {
ESP_LOGE ( TAG , "Failed to write float to NVS" );
}
float read_float ;
if ( nvs_read_float ( "namespace_1" , "key_1" , & read_float ) == ESP_OK ) {
ESP_LOGI ( TAG , "Successfully read float from NVS: %f" , read_float );
} else {
ESP_LOGE ( TAG , "Failed to read float from NVS" );
}
// String
char * write_string = "Hello, World!" ;
if ( nvs_write_string ( "namespace_1" , "key_2" , write_string ) == ESP_OK ) {
ESP_LOGI ( TAG , "Successfully write string to NVS" );
} else {
ESP_LOGE ( TAG , "Failed to write string to NVS" );
}
char * read_string = NULL ;
if ( nvs_read_string ( "namespace_1" , "key_2" , & read_string ) == ESP_OK ) {
ESP_LOGI ( TAG , "Successfully read string from NVS: %s" , read_string );
} else {
ESP_LOGE ( TAG , "Failed to read string from NVS" );
}
// IMPORTANT NOTE!: This applies ONLY to strings. Remember to delete the pointer to avoid a memory leak.
free ( read_string );
// Blob
#define MAX_STRING_LENGTH 10
typedef struct {
char name [ MAX_STRING_LENGTH ];
uint32_t id ;
} person_t ;
const person_t write_blob = {
. name = "Joe" ,
. id = 123 ,
};
if ( nvs_write_blob ( "namespace_1" , "key_3" , & write_blob , sizeof ( person_t )) == ESP_OK ) {
ESP_LOGI ( TAG , "Successfully write blob to NVS" );
} else {
ESP_LOGE ( TAG , "Failed to write blob to NVS" );
}
person_t read_blob = {};
if ( nvs_read_blob ( "namespace_1" , "key_3" , & read_blob , sizeof ( person_t )) == ESP_OK ) {
ESP_LOGI ( TAG , "Successfully read blob from NVS: name:%s, id:%d" , read_blob . name , read_blob . id );
} else {
ESP_LOGE ( TAG , "Failed to read blob from NVS" );
}
}للبدء في مشروع ESP32 Task Monitor ، ستحتاج إلى متحكم ESP32 وجهاز كمبيوتر مضيف يعمل Python. ستحتاج أيضًا إلى تثبيت إطار تطوير ESP-IDF وحزم بيثون المطلوبة.
git clone git @ github . com : VPavlusha / ESP32_NVS . git cd ESP32_NVS / example
idf . py build idf . py - p PORT [ - b BAUD ] flash استبدل المنفذ باسم المنفذ التسلسلي الخاص بمجلس ESP32. يمكنك أيضًا تغيير معدل Baud Flasher عن طريق استبدال Baud بمعدل Baud الذي تحتاجه. معدل باود الافتراضي هو 460800.
idf . py - p < PORT > monitorلا تنس استبدال المنفذ باسم المنفذ التسلسلي.
مزيد من المعلومات كيفية بناء المشروع: دليل برمجة ESP-IDF.
يتضمن هذا المشروع مثالًا يعرض وظائف مكتبة مراقبة المهام. يوفر هذا المثال عرضًا عمليًا لكيفية استخدام واجهة برمجة تطبيقات NVS لكتابة/قراءة البيانات إلى/من NVS في تطبيقاتك الخاصة.
المساهمات في مشروع ESP32 NVS مرحب بها. إذا وجدت خطأ أو لديك طلب ميزة ، فيرجى إرسال مشكلة على صفحة GitHub للمشروع. إذا كنت ترغب في المساهمة ، فيرجى إرسال طلب سحب.
تم ترخيص مشروع ESP32 NVS بموجب ترخيص MIT. انظر ملف ترخيص معهد ماساتشوستس للتكنولوجيا لمزيد من المعلومات.