Inicia sesión en tu cuenta de Altimeter Cloud
¿No tienes cuenta? Crear una
Te enviaremos un enlace de confirmación por correo. Revisa tu carpeta de spam si no lo recibes.
¿Ya tienes cuenta? Iniciar sesión
La librería NVS / Preferences te permite almacenar configuraciones y fragmentos de información en la partición NVS de la memoria flash. Esto significa que estos ajustes se pueden establecer y leer sin perderse cuando se reinicia o si se pierde la alimentación. Puedes almacenar la mayoría de tipos de variables en versiones con signo y sin signo con esta librería.
En este ejemplo hacemos que el botón de reinicio funcione como un botón de encendido/apagado para el LED. También podrías agregar sueño profundo si está en modo apagado para ahorrar energía, pero hay más sobre eso más adelante. Cada vez que presionas el botón de energía, el Neopixel se encenderá o apagará dependiendo del estado de alternancia.
La librería Preferences admite todos los tipos de variables comunes. Para enteros usa prefs.putInt("key", 42) y prefs.getInt("key", 0) donde el segundo parámetro es el valor predeterminado si la clave no existe. Para enteros sin signo está putUInt / getUInt, útil para contadores como prefs.putUInt("boots", bootCount). Las cadenas se almacenan con prefs.putString("wifi_ssid", "MyNetwork") y se recuperan con prefs.getString("wifi_ssid", ""). Para valores de punto flotante usa prefs.putFloat("calibration", 1.0523) y prefs.getFloat("calibration", 1.0) — útil para compensaciones de sensores. Los valores booleanos usan prefs.putBool("enabled", true) y prefs.getBool("enabled", false). Para eliminar una sola clave llama a prefs.remove("key"), o para borrar un espacio de nombres completo usa prefs.clear(). Cada espacio de nombres se limita a 15 caracteres y las claves a 15 caracteres. Siempre llama a prefs.end() cuando termines para liberar recursos.
/* * Ejemplo Mercury NVS Preferences * Alterna un valor (0/1) en la memoria flash cada vez que se inicia la placa. * Si es 1: los LEDs NeoPixel se ponen verdes. Si es 0: los LEDs se apagan. * * El valor persiste después de ciclos de alimentación y reprogramación. * Reinicia cargando código nuevo que limpie el espacio de nombres. * * No se necesitan librerías externas — Preferences y NeoPixel * están integrados en el marco Arduino del 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); // Encender NeoPixel pinMode(LEDPOWER, OUTPUT); digitalWrite(LEDPOWER, HIGH); delay(10); pixels.begin(); pixels.clear(); pixels.show(); // Abrir espacio de nombres NVS ("demo" puede ser cualquier nombre, hasta 15 caracteres) prefs.begin("demo", false); // false = modo lectura/escritura // Leer el valor almacenado (por defecto 0 si aún no se ha guardado) int state = prefs.getInt("toggle", 0); // Invertirlo int newState = (state == 0) ? 1 : 0; // Guardar el nuevo valor en flash prefs.putInt("toggle", newState); prefs.end(); Serial.println("Estado anterior: " + String(state)); Serial.println("Nuevo estado: " + String(newState)); if (newState == 1) { // Los 4 píxeles en verde for (int i = 0; i < 4; i++) { pixels.setPixelColor(i, pixels.Color(0, 30, 0)); } pixels.show(); Serial.println("LEDs: VERDES (reinicia para alternar apagado)"); } else { Serial.println("LEDs: APAGADOS (reinicia para alternar encendido)"); } } void loop() { // Nada que hacer — solo demostrando almacenamiento NVS delay(1000); }#pragma once /* * Definiciones de Pines Mercury (ESP32-C6) * Asignaciones GPIO específicas de la placa */ // ââ LED de Estado (NeoPixel) ââ #define LEDPOWER 3 // Alimentación NeoPixel (establecer HIGH para habilitar) #define LED 2 // Señal de datos NeoPixel // ââ Bus I2C ââ #define SDA 21 // Datos I2C #define SCL 22 // Reloj I2C // ââ Alimentación del Sensor ââ #define VACC 20 // Carril de alimentación del sensor (establecer HIGH para habilitar) // ââ Puertos de Propósito General ââ #define GP06 6 // Puerto GP06 #define GP07 7 // Puerto GP07 // ââ Salida de Alta Corriente ââ #define OUT1 5 // Salida de alta corriente (p.ej. piro / relé) // ââ LEDs de Barra de Batería ââ #define BL1 4 // LED de Batería 1 (más bajo) #define BL2 14 // LED de Batería 2 #define BL3 15 // LED de Batería 3 #define BL4 18 // LED de Batería 4 #define BL5 19 // LED de Batería 5 (más alto) // ââ Indicadores ââ #define DISK 8 // LED de actividad de disco // ââ Analógico / Detección ââ #define BATIN 0 // Voltaje de batería (divisor 1:1) #define USBDETECT 1 // Detección de alimentación USB (HIGH = USB presente) #define BUTTON 9 // BOTÓN en la placa, botón de inicio pero se puede usar