Manuel Mercury V1
Découvrez comment voler rapidement et facilement, connectez votre altimètre pour télécharger vers le site web Altimeter Cloud et accédez à toutes les fonctionnalités avancées également. Si vous êtes bloqué ou si vous débutez, c'est l'endroit où il faut être.

Utilisation de la bibliothèque ESP32 Preferences

PDF

La bibliothèque NVS / Preferences vous permet de stocker des paramètres et des fragments d'information dans la partition NVS de la mémoire flash. Cela signifie que ces paramètres peuvent être définis et lus sans être perdus lors d'un redémarrage ou en cas de perte d'alimentation. Vous pouvez stocker la plupart des types de variables dans les versions signées et non signées avec cette bibliothèque.

Dans cet exemple, nous faisons fonctionner le bouton de réinitialisation comme un bouton marche/arrêt pour la LED. Vous pourriez également ajouter le sommeil profond s'il est en mode arrêt pour économiser de l'énergie, mais il y a plus à ce sujet plus tard. Chaque fois que vous appuyez sur le bouton d'alimentation, le Neopixel s'allumera ou s'éteindra selon l'état du basculement. 

La bibliothèque Preferences supporte tous les types de variables courants. Pour les entiers, utilisez prefs.putInt("key", 42) et prefs.getInt("key", 0) où le deuxième paramètre est la valeur par défaut si la clé n'existe pas. Pour les entiers non signés, il y a putUInt / getUInt, utile pour les compteurs comme prefs.putUInt("boots", bootCount). Les chaînes de caractères sont stockées avec prefs.putString("wifi_ssid", "MyNetwork") et récupérées avec prefs.getString("wifi_ssid", ""). Pour les valeurs en virgule flottante, utilisez prefs.putFloat("calibration", 1.0523) et prefs.getFloat("calibration", 1.0) — pratique pour les décalages de capteurs. Les valeurs booléennes utilisent prefs.putBool("enabled", true) et prefs.getBool("enabled", false). Pour supprimer une seule clé, appelez prefs.remove("key"), ou pour effacer un espace de noms entier, utilisez prefs.clear(). Chaque espace de noms est limité à 15 caractères et les clés à 15 caractères. Appelez toujours prefs.end() lorsque vous avez terminé pour libérer les ressources.

Vous utilisez l'Arduino IDE ? Notre programmateur en ligne inclut Mercury_Pins.h par défaut afin que les noms de broches fonctionnent sans problème. Si vous utilisez l'Arduino IDE ou un autre programmateur, copiez le contenu de l'onglet Mercury_Pins.h et collez-le en haut de votre programme.
/*
 * Mercury NVS Preferences Example
 * Bascule une valeur (0/1) en mémoire flash à chaque démarrage de la carte.
 * Si 1 : les LEDs NeoPixel deviennent vertes. Si 0 : les LEDs restent éteintes.
 *
 * La valeur persiste à travers les cycles d'alimentation et la reprogrammation.
 * Réinitialisez en téléchargeant un nouveau code qui efface l'espace de noms.
 *
 * Aucune bibliothèque externe requise — Preferences et NeoPixel
 * sont intégrés au framework Arduino de l'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);

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

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

    // Ouvrir l'espace de noms NVS ("demo" peut être n'importe quel nom, jusqu'à 15 caractères)
    prefs.begin("demo", false);  // false = mode lecture/écriture

    // Lire la valeur stockée (0 par défaut si pas encore sauvegardée)
    int state = prefs.getInt("toggle", 0);

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

    // Sauvegarder la nouvelle valeur en mémoire flash
    prefs.putInt("toggle", newState);
    prefs.end();

    Serial.println("État précédent : " + String(state));
    Serial.println("Nouvel état : " + String(newState));

    if (newState == 1) {
        // Les 4 pixels deviennent verts
        for (int i = 0; i < 4; i++) {
            pixels.setPixelColor(i, pixels.Color(0, 30, 0));
        }
        pixels.show();
        Serial.println("LEDs : VERTES (réinitialiser pour basculer à l'arrêt)");
    } else {
        Serial.println("LEDs : ÉTEINTES (réinitialiser pour basculer à la marche)");
    }
}

void loop() {
    // Rien à faire — juste une démonstration du stockage NVS
    delay(1000);
}

#pragma once
/*
 * Mercury (ESP32-C6) Pin Definitions
 * Board-specific GPIO assignments
 */

// ââ Status LED (NeoPixel) ââ
#define LEDPOWER      3    // NeoPixel power (drive HIGH to enable)
#define LED           2    // NeoPixel data signal

// ââ I2C Bus ââ
#define SDA           21   // I2C data
#define SCL           22   // I2C clock

// ââ Sensor Power ââ
#define VACC          20   // Sensor power rail (drive HIGH to enable)

// ââ General Purpose Ports ââ
#define GP06          6    // GP06 port
#define GP07          7    // GP07 port

// ââ High Current Output ââ
#define OUT1          5    // High current output (e.g. pyro / relay)

// ââ Battery Bar LEDs ââ
#define BL1           4    // Battery LED 1 (lowest)
#define BL2           14   // Battery LED 2
#define BL3           15   // Battery LED 3
#define BL4           18   // Battery LED 4
#define BL5           19   // Battery LED 5 (highest)

// ââ Indicators ââ
#define DISK          8    // Disk activity LED

// ââ Analogue / Detection ââ
#define BATIN         0    // Battery voltage (1:1 divider)
#define USBDETECT     1    // USB power detect (HIGH = USB present)
#define BUTTON        9    // BUTTON on the board, boot button but can be used