Instrukcja Mercury V1
Dowiedz się, jak szybko i łatwo latać, podłącz swój wysokościomierz do przesyłania danych na stronę Altimeter Cloud i korzystaj ze wszystkich zaawansowanych funkcji. Jeśli utknąłeś w miejscu lub dopiero zaczynasz, to jest odpowiednie miejsce dla Ciebie.

Korzystanie z biblioteki ESP32 Preferences

PDF

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.

Używasz Arduino IDE? Nasz program online zawiera domyślnie Mercury_Pins.h, więc nazwy pinów działają bez problemu. Jeśli używasz Arduino IDE lub innego programu, skopiuj zawartość karty Mercury_Pins.h i wklej ją na początku swojego programu.
/*
 * 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