Zaloguj się do swojego konta Altimeter Cloud
Nie masz konta? Utwórz konto
Wyślemy link potwierdzający na Twój e-mail. Sprawdź folder spam, jeśli go nie otrzymasz.
Masz już konto? Zaloguj się
Biblioteka NVS / Preferences pozwala przechowywać ustawienia i fragmenty informacji w partycji NVS na pamięci flash. Oznacza to, że te ustawienia można ustawiać i odczytywać bez utraty ich podczas ponownego uruchomienia lub utraty zasilania. Za pomocą tej biblioteki można przechowywać większość typów zmiennych zarówno w wersjach ze znakiem, jak i bez znaku.
W tym przykładzie sprawdzamy, jak przycisk resetowania działa jako przycisk włączania/wyłączania diody LED. Możesz również dodać głębokie uśpienie, jeśli jest w trybie wyłączonym, aby zaoszczędzić energię, ale więcej na ten temat będzie później. Za każdym razem, gdy naciśniesz przycisk zasilania, dioda Neopixel albo się włączy, albo wyłączy w zależności od stanu przełącznika.
Biblioteka Preferences obsługuje wszystkie popularne typy zmiennych. W przypadku liczb całkowitych użyj prefs.putInt("key", 42) i prefs.getInt("key", 0), gdzie drugi parametr to wartość domyślna, jeśli klucz nie istnieje. W przypadku liczb całkowitych bez znaku dostępne są putUInt / getUInt, przydatne dla liczników takich jak prefs.putUInt("boots", bootCount). Ciągi znaków są przechowywane za pomocą prefs.putString("wifi_ssid", "MyNetwork") i pobierane za pomocą prefs.getString("wifi_ssid", ""). W przypadku wartości zmiennoprzecinkowych użyj prefs.putFloat("calibration", 1.0523) i prefs.getFloat("calibration", 1.0) — przydatne dla przesunięć czujników. Wartości logiczne używają prefs.putBool("enabled", true) i prefs.getBool("enabled", false). Aby usunąć jeden klucz, wywołaj prefs.remove("key"), lub aby wyczyścić całą przestrzeń nazw, użyj prefs.clear(). Każda przestrzeń nazw jest ograniczona do 15 znaków, a klucze do 15 znaków. Zawsze wywoływaj prefs.end() po zakończeniu, aby zwolnić zasoby.
/* * Mercury NVS Preferences Example * Przełącza wartość (0/1) w pamięci flash za każdym razem, gdy tablica się uruchamia. * Jeśli 1: diody LED NeoPixel zapalają się na zielono. Jeśli 0: diody pozostają wyłączone. * * Wartość przetrwa cykle zasilania i reprogramowanie. * Zresetuj, przesyłając nowy kod, który czyści przestrzeń nazw. * * Nie są potrzebne zewnętrzne biblioteki — Preferences i NeoPixel * są wbudowane w strukturę Arduino ESP32. */ #include "Preferences.h" #include "Adafruit_NeoPixel.h" #include "Mercury_Pins.h" Preferences prefs; Adafruit_NeoPixel pixels(4, LED, NEO_GRB + NEO_KHZ800); void setup() { Serial.begin(115200); delay(500); // Włącz zasilanie NeoPixel pinMode(LEDPOWER, OUTPUT); digitalWrite(LEDPOWER, HIGH); delay(10); pixels.begin(); pixels.clear(); pixels.show(); // Otwórz przestrzeń nazw NVS ("demo" może być dowolną nazwą, do 15 znaków) prefs.begin("demo", false); // false = tryb odczytu/zapisu // Odczytaj zapisaną wartość (domyślnie 0, jeśli nie została jeszcze zapisana) int state = prefs.getInt("toggle", 0); // Odwróć ją int newState = (state == 0) ? 1 : 0; // Zapisz nową wartość do pamięci flash prefs.putInt("toggle", newState); prefs.end(); Serial.println("Previous state: " + String(state)); Serial.println("New state: " + String(newState)); if (newState == 1) { // Wszystkie 4 piksele na zielono for (int i = 0; i < 4; i++) { pixels.setPixelColor(i, pixels.Color(0, 30, 0)); } pixels.show(); Serial.println("LEDs: GREEN (reset to toggle off)"); } else { Serial.println("LEDs: OFF (reset to toggle on)"); } } void loop() { // Nic do zrobienia — tylko demonstracja przechowywania NVS delay(1000); }#pragma once /* * Mercury (ESP32-C6) Definicje pinów * Przypisania GPIO specyficzne dla tablicy */ // ââ Status LED (NeoPixel) ââ #define LEDPOWER 3 // Zasilanie NeoPixel (ustaw HIGH, aby włączyć) #define LED 2 // Sygnał danych NeoPixel // ââ Magistrala I2C ââ #define SDA 21 // Dane I2C #define SCL 22 // Zegar I2C // ââ Zasilanie czujnika ââ #define VACC 20 // Magistrala zasilania czujnika (ustaw HIGH, aby włączyć) // ââ Porty ogólnego przeznaczenia ââ #define GP06 6 // Port GP06 #define GP07 7 // Port GP07 // ââ Wyjście dużego prądu ââ #define OUT1 5 // Wyjście dużego prądu (np. pyro / przekaźnik) // ââ Diody LED paska baterii ââ #define BL1 4 // Dioda LED baterii 1 (najniższa) #define BL2 14 // Dioda LED baterii 2 #define BL3 15 // Dioda LED baterii 3 #define BL4 18 // Dioda LED baterii 4 #define BL5 19 // Dioda LED baterii 5 (najwyższa) // ââ Wskaźniki ââ #define DISK 8 // Dioda LED aktywności dysku // ââ Analog / Detekcja ââ #define BATIN 0 // Napięcie baterii (dzielnik 1:1) #define USBDETECT 1 // Detekcja zasilania USB (HIGH = USB obecny) #define BUTTON 9 // BUTTON na tablicy, przycisk boot, ale może być używany