Mercury V1 Handbuch
Finden Sie heraus, wie Sie schnell und einfach fliegen können, verbinden Sie Ihr Altimeter für den Upload zur Altimeter Cloud Website und nutzen Sie auch alle erweiterten Funktionen. Wenn Sie feststecken oder gerade erst anfangen, sind Sie hier richtig.

Verwendung der ESP32 Preferences-Bibliothek

PDF

Die NVS / Preferences-Bibliothek ermöglicht es, Einstellungen und Informationsausschnitte in der NVS-Partition im Flash-Speicher zu speichern. Dies bedeutet, dass diese Einstellungen gespeichert und gelesen werden können, ohne bei einem Neustart oder bei Stromausfällen verloren zu gehen. Mit dieser Bibliothek können Sie die meisten Variablentypen in sowohl signierten als auch unsignierten Versionen speichern.

In diesem Beispiel machen wir die Reset-Taste zu einer Ein-/Aus-Taste für die LED. Sie könnten auch Deep Sleep hinzufügen, wenn sie sich im Aus-Modus befindet, um Strom zu sparen, aber es gibt mehr darüber später. Jedes Mal, wenn Sie die Power-Taste drücken, wird das Neopixel je nach Toggle-Status an- oder ausgeschaltet. 

Die Preferences-Bibliothek unterstützt alle gängigen Variablentypen. Für Ganzzahlen verwenden Sie prefs.putInt("key", 42) und prefs.getInt("key", 0), wobei der zweite Parameter der Standard ist, wenn der Schlüssel nicht vorhanden ist. Für vorzeichenlose Ganzzahlen gibt es putUInt / getUInt, nützlich für Zähler wie prefs.putUInt("boots", bootCount). Strings werden mit prefs.putString("wifi_ssid", "MyNetwork") gespeichert und mit prefs.getString("wifi_ssid", "") abgerufen. Für Gleitkommawerte verwenden Sie prefs.putFloat("calibration", 1.0523) und prefs.getFloat("calibration", 1.0) — praktisch für Sensor-Offsets. Boolesche Werte verwenden prefs.putBool("enabled", true) und prefs.getBool("enabled", false). Um einen einzelnen Schlüssel zu entfernen, rufen Sie prefs.remove("key") auf, oder verwenden Sie prefs.clear(), um einen gesamten Namespace zu löschen. Jeder Namespace ist auf 15 Zeichen und Schlüssel auf 15 Zeichen begrenzt. Rufen Sie immer prefs.end() auf, wenn Sie fertig sind, um Ressourcen freizugeben.

Nutzen Sie die Arduino IDE? Unser Online-Programmierer bezieht Mercury_Pins.h standardmäßig ein, sodass die Pin-Namen ohne Probleme funktionieren. Wenn Sie die Arduino IDE oder einen anderen Programmierer verwenden, kopieren Sie den Inhalt des Mercury_Pins.h-Tabs und fügen Sie ihn am Anfang Ihres Programms ein.
/*
 * Mercury NVS Preferences Beispiel
 * Schaltet einen Wert (0/1) im Flash-Speicher bei jedem Systemstart um.
 * Wenn 1: NeoPixel-LEDs werden grün. Wenn 0: LEDs bleiben aus.
 *
 * Der Wert bleibt nach Stromausfällen und Neuprogrammierung erhalten.
 * Zurücksetzen durch Hochladen neuer Codes, die den Namespace löscht.
 *
 * Keine externen Bibliotheken erforderlich — Preferences und NeoPixel
 * sind im ESP32 Arduino Framework integriert.
 */

#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);

    // NeoPixel einschalten
    pinMode(LEDPOWER, OUTPUT);
    digitalWrite(LEDPOWER, HIGH);
    delay(10);

    pixels.begin();
    pixels.clear();
    pixels.show();

    // NVS Namespace öffnen ("demo" kann ein beliebiger Name sein, bis zu 15 Zeichen)
    prefs.begin("demo", false);  // false = Lese-/Schreibmodus

    // Den gespeicherten Wert auslesen (Standard 0, wenn nicht noch gespeichert)
    int state = prefs.getInt("toggle", 0);

    // Umschalten
    int newState = (state == 0) ? 1 : 0;

    // Den neuen Wert im Flash speichern
    prefs.putInt("toggle", newState);
    prefs.end();

    Serial.println("Vorheriger Status: " + String(state));
    Serial.println("Neuer Status: " + String(newState));

    if (newState == 1) {
        // Alle 4 Pixel grün
        for (int i = 0; i < 4; i++) {
            pixels.setPixelColor(i, pixels.Color(0, 30, 0));
        }
        pixels.show();
        Serial.println("LEDs: GRÜN (Reset zum Ausschalten)");
    } else {
        Serial.println("LEDs: AUS (Reset zum Einschalten)");
    }
}

void loop() {
    // Nichts zu tun — nur zur Veranschaulichung der NVS-Speicherung
    delay(1000);
}

#pragma once
/*
 * Mercury (ESP32-C6) Pin-Definitionen
 * Boardspezifische GPIO-Zuordnungen
 */

// ââ Status-LED (NeoPixel) ââ
#define LEDPOWER      3    // NeoPixel-Stromversorgung (HIGH fahren zum Aktivieren)
#define LED           2    // NeoPixel-Datensignal

// ââ I2C-Bus ââ
#define SDA           21   // I2C-Daten
#define SCL           22   // I2C-Takt

// ââ Sensor-Stromversorgung ââ
#define VACC          20   // Sensor-Stromversorgungsschiene (HIGH fahren zum Aktivieren)

// ââ Universelle Anschlüsse ââ
#define GP06          6    // GP06-Anschluss
#define GP07          7    // GP07-Anschluss

// ââ Hochstromausgang ââ
#define OUT1          5    // Hochstromausgang (z.B. Pyro / Relais)

// ââ Batterie-Balken-LEDs ââ
#define BL1           4    // Batterie-LED 1 (niedrigste)
#define BL2           14   // Batterie-LED 2
#define BL3           15   // Batterie-LED 3
#define BL4           18   // Batterie-LED 4
#define BL5           19   // Batterie-LED 5 (höchste)

// ââ Indikatoren ââ
#define DISK          8    // Festplattenaktivitäts-LED

// ââ Analog / Erkennung ââ
#define BATIN         0    // Batteriespannung (1:1 Teiler)
#define USBDETECT     1    // USB-Stromerkennung (HIGH = USB vorhanden)
#define BUTTON        9    // BUTTON auf dem Board, Boot-Button aber kann verwendet werden