micropython/tests/esp32/esp32_nvs.py
Thorsten von Eicken c10d431819 esp32: Add basic support for Non-Volatile-Storage in esp32 module.
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
2021-02-19 15:05:19 +11:00

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()