Manual Mercury V1
Descubre cómo volar rápidamente con facilidad, conecta tu altimeter para subir datos al sitio web de Altimeter Cloud y todas las características avanzadas también. Si estás atascado o apenas comenzando, este es el lugar indicado.

Ejemplo de código: Sensor de presión BMP390 y BMP581 con detección automática

PDF

El Mercury tiene a bordo un sensor de presión Bosch BMP390 o Bosch BMP581.
Este script te muestra cómo detectar cuál tienes y leer su temperatura y presión y convertirla a una altitud.

La conversión estándar utilizada en este programa asume una presión de 1013.25 Hpa (promedio) y una temperatura ambiente de 15 grados centígrados. 

Si buscas el pronóstico meteorológico local para tu ubicación y hora e introduces esa presión en su lugar, este script debería mostrarte aproximadamente tu altura sobre el nivel del mar.
Si utilizas nuestro compilador y cargador en línea, no olvides conectar el monitor Serie después de reiniciar (presionar el botón de encendido) tu Mercury para ver la información que viene. 

¿Usas Arduino IDE? Nuestro programador en línea incluye Mercury_Pins.h por defecto para que los nombres de pines funcionen sin problemas. Si estás usando Arduino IDE u otro programador, copia el contenido de la pestaña Mercury_Pins.h y pégalo en la parte superior de tu programa.
// Ejemplo de prueba del sensor de presión para altímetros Mercury (altimetercloud.com)
#include "Wire.h"
#include "Mercury_Pins.h"

// Hay bastantes opciones de bibliotecas, hemos elegido estas para nuestro ejemplo
#include "Adafruit_BMP3XX.h"
#include "Adafruit_BMP5xx.h"

Adafruit_BMP3XX bmp3;
Adafruit_BMP5xx bmp5;

bool hasBMP581 = false;
bool hasBMP390 = false;

float seaLevelHpa = 1013.25;   // La presión meteorológica del nivel del mar pronosticada para tu ubicación. 

void setup() {
    Serial.begin(115200);

    // Enciende la alimentación de los sensores en el altímetro Mercury
    pinMode(VACC, OUTPUT);
    digitalWrite(VACC, HIGH);
    delay(100);

    // Inicia I2C en los pines SDA y SCL del Mercury
    Wire.begin(SDA, SCL);

    // Detecta qué sensor de presión está presente en tu Mercury, las revisiones anteriores tenían un Bosch BMP390 y las revisiones posteriores (3+) tienen el Bosch BMP581
    if (bmp5.begin(0x47, &Wire)) {
        hasBMP581 = true;
        Serial.println("BMP581 encontrado");
    } else if (bmp3.begin_I2C(0x77, &Wire)) {
        hasBMP390 = true;
        Serial.println("BMP390 encontrado");
    } else {
        Serial.println("¡No se encontró sensor!");
    }
}

void loop() {
    float temp = 0, pressure = 0, alt = 0;

    // Lee el sensor detectado para obtener su presión y temperatura
    if (hasBMP581 && bmp5.performReading()) {
        temp = bmp5.temperature;
        pressure = bmp5.pressure;
    } else if (hasBMP390 && bmp3.performReading()) {
        temp = bmp3.temperature;
        pressure = bmp3.pressure / 100.0;
    } else {
        delay(500);
        return;
    }

    // Convierte la presión a altitud utilizando la suposición estándar de 15 grados centígrados de temperatura ambiente y la presión del nivel del mar definida anteriormente.
    alt = 44330.0 * (1.0 - pow(pressure / seaLevelHpa, 0.1903));
    Serial.printf("Temp: %.1fC  Presión: %.2f hPa  Alt: %.1f m\n", temp, pressure, alt);
    delay(500);
}

#pragma once
/*
 * Definiciones de pines de Mercury (ESP32-C6)
 * Asignaciones GPIO específicas de la placa
 */

// ââ LED de estado (NeoPixel) ââ
#define LEDPOWER      3    // Alimentación de NeoPixel (usar HIGH para habilitar)
#define LED           2    // Señal de datos de 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 (usar HIGH para habilitar)

// ââ Puertos de uso general ââ
#define GP06          6    // Puerto GP06
#define GP07          7    // Puerto GP07

// ââ Salida de corriente alta ââ
#define OUT1          5    // Salida de corriente alta (p. ej. pirotecnia / relé)

// ââ LEDs de indicador 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 arranque pero se puede usar