Příručka Mercury V1
Zjistěte, jak létat rychle a snadno, připojte svůj výškoměr pro nahrávání na webové stránky Altimeter Cloud a využijte všechny pokročilé funkce. Pokud jste v nouzi nebo teprve začínáte, jste tu správně.

Příklad kódu: Snímač tlaku BMP390 a BMP581 s automatickou detekcí

PDF

Mercury má buď tlakový senzor Bosch BMP390 nebo Bosch BMP581.
Tento skript vám ukáže, jak zjistit, který z nich máte, a jak si přečíst jeho teplotu, tlak a převést jej na nadmořskou výšku.

Standardní konverze použitá v tomto programu předpokládá 1013,25 Hpa (průměrný) tlak a okolní teplotu 15 stupňů Celsia. 

Pokud si najdete předpověď počasí pro vaši lokalitu a čas a místo toho zadáte její tlak, měl by vám tento skript zobrazit zhruba vaši výšku nad mořskou hladinou.
Pokud používáte náš online kompilátor a nahrávač, nezapomeňte po resetování (stisknutí tlačítka napájení) vašeho Mercury připojit monitor sériového portu, abyste viděli příchozí informace. 

Používáte Arduino IDE? Náš online programátor standardně zahrnuje Mercury_Pins.h, takže názvy pinů fungují bez problémů. Pokud používáte Arduino IDE nebo jiný programátor, zkopírujte obsah tabulátoru Mercury_Pins.h a vložte jej na začátek vašeho programu.
// Příklad testu tlakového senzoru pro Mercury altimetry (altimetercloud.com)
#include "Wire.h"
#include "Mercury_Pins.h"

// Existuje poměrně hodně možností knihoven, vybrali jsme tyto pro náš příklad
#include "Adafruit_BMP3XX.h"
#include "Adafruit_BMP5xx.h"

Adafruit_BMP3XX bmp3;
Adafruit_BMP5xx bmp5;

bool hasBMP581 = false;
bool hasBMP390 = false;

float seaLevelHpa = 1013.25;   // Tíseníí tlak na hladině moře z předpovědi počasí pro vaši lokalitu. 

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

    // Zapněte napájení senzorů na Mercury altimetru
    pinMode(VACC, OUTPUT);
    digitalWrite(VACC, HIGH);
    delay(100);

    // Spusťte I2C na pinech SDA a SCL Mercury
    Wire.begin(SDA, SCL);

    // Zjistěte, který tlakový senzor je přítomen ve vašem Mercury, starší revize měly Bosch BMP390 a novější revize (3+) mají Bosch BMP581
    if (bmp5.begin(0x47, &Wire)) {
        hasBMP581 = true;
        Serial.println("BMP581 nalezen");
    } else if (bmp3.begin_I2C(0x77, &Wire)) {
        hasBMP390 = true;
        Serial.println("BMP390 nalezen");
    } else {
        Serial.println("Senzor nenalezen!");
    }
}

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

    // Přečtěte zjištěný senzor pro jeho tlak a teplotu
    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;
    }

    // Převeďte tlak na nadmořskou výšku pomocí standardního předpokladu 15 stupňů Celsia okolní teploty a tlaku na hladině moře definovaného výše.
    alt = 44330.0 * (1.0 - pow(pressure / seaLevelHpa, 0.1903));
    Serial.printf("Temp: %.1fC  Tlak: %.2f hPa  Výška: %.1f m\n", temp, pressure, alt);
    delay(500);
}

#pragma once
/*
 * Mercury (ESP32-C6) Definice pinů
 * Přiřazení GPIO specifické pro desku
 */

// ââ Stavový LED (NeoPixel) ââ
#define LEDPOWER      3    // Napájení NeoPixelu (nastavte HIGH pro povolení)
#define LED           2    // Datový signál NeoPixelu

// ââ I2C sběrnice ââ
#define SDA           21   // I2C data
#define SCL           22   // I2C hodiny

// ââ Napájení senzoru ââ
#define VACC          20   // Napájecí sběrnice senzoru (nastavte HIGH pro povolení)

// ââ Univerzální porty ââ
#define GP06          6    // Port GP06
#define GP07          7    // Port GP07

// ââ Vysokoproudý výstup ââ
#define OUT1          5    // Vysokoproudý výstup (např. pyro / relé)

// ââ LED indikátory baterie ââ
#define BL1           4    // LED baterie 1 (nejnižší)
#define BL2           14   // LED baterie 2
#define BL3           15   // LED baterie 3
#define BL4           18   // LED baterie 4
#define BL5           19   // LED baterie 5 (nejvyšší)

// ââ Indikátory ââ
#define DISK          8    // LED aktivity disku

// ââ Analógové / Detekce ââ
#define BATIN         0    // Napětí baterie (dělič 1:1)
#define USBDETECT     1    // Detekce napájení USB (HIGH = USB přítomno)
#define BUTTON        9    // BUTTON na desce, spouštěcí tlačítko, ale lze jej použít