c10d431819
This commit implements basic NVS support for the esp32. It follows the pattern of the esp32.Partition class and exposes an NVS object per NVS namespace. The initial support provided is only for signed 32-bit integers and binary blobs. It's easy (albeit a bit tedious) to add support for more types. See discussions in: #4436, #4707, #6780
68 lines
1.6 KiB
Python
68 lines
1.6 KiB
Python
# Test the esp32 NVS class - access to esp-idf's Non-Volatile-Storage
|
|
|
|
from esp32 import NVS
|
|
|
|
nvs = NVS("mp-test")
|
|
|
|
# test setting and gettin an integer kv
|
|
nvs.set_i32("key1", 1234)
|
|
print(nvs.get_i32("key1"))
|
|
nvs.set_i32("key2", -503)
|
|
print(nvs.get_i32("key2"))
|
|
print(nvs.get_i32("key1"))
|
|
|
|
# test setting and getting a blob kv using a bytearray
|
|
blob1 = "testing a string as a blob"
|
|
nvs.set_blob("blob1", blob1)
|
|
buf1 = bytearray(len(blob1))
|
|
len1 = nvs.get_blob("blob1", buf1)
|
|
print(buf1)
|
|
print(len(blob1), len1)
|
|
|
|
# test setting and getting a blob kv using a string
|
|
blob2 = b"testing a bytearray"
|
|
nvs.set_blob("blob2", blob2)
|
|
buf2 = bytearray(len(blob2))
|
|
len2 = nvs.get_blob("blob2", buf2)
|
|
print(buf2)
|
|
print(len(blob2), len2)
|
|
|
|
# test raising of error exceptions
|
|
nvs.erase_key("key1")
|
|
try:
|
|
nvs.erase_key("key1") # not found
|
|
except OSError as e:
|
|
print(e)
|
|
try:
|
|
nvs.get_i32("key1") # not found
|
|
except OSError as e:
|
|
print(e)
|
|
try:
|
|
nvs.get_i32("blob1") # not found (blob1 exists but diff type)
|
|
except OSError as e:
|
|
print(e)
|
|
try:
|
|
buf3 = bytearray(10)
|
|
nvs.get_blob("blob1", buf3) # invalid length (too short)
|
|
except OSError as e:
|
|
print(e)
|
|
|
|
nvs.commit() # we're not verifying that this does anything, just doesn't error
|
|
|
|
# test using a second namespace and that it doesn't interfere with first
|
|
nvs2 = NVS("mp-test2")
|
|
try:
|
|
print(nvs2.get_i32("key2"))
|
|
except OSError as e:
|
|
print(e)
|
|
nvs2.set_i32("key2", 7654)
|
|
print(nvs.get_i32("key2"))
|
|
print(nvs2.get_i32("key2"))
|
|
|
|
# clean-up (the namespaces will remain)
|
|
nvs.erase_key("key2")
|
|
nvs.erase_key("blob1")
|
|
nvs.erase_key("blob2")
|
|
nvs2.erase_key("key2")
|
|
nvs.commit()
|