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.

Code-Beispiel: BMP390 & BMP581 Drucksensor mit automatischer Erkennung

PDF

Der Mercury hat entweder einen Bosch BMP390 oder Bosch BMP581 Drucksensor an Bord.
Dieses Skript zeigt dir, wie du erkennst, welcher Sensor vorhanden ist, und wie du dessen Temperatur und Druck ausliest und in eine Höhe umwandelst.

Die in diesem Programm verwendete Standardumrechnung geht von 1013,25 hPa (Durchschnitt) Druck und einer Umgebungstemperatur von 15 Grad Celsius aus. 

Wenn du die Wettervorhersage für deinen Standort und deine Zeit aufsuchst und stattdessen diesen Druck eingibst, sollte dir dieses Skript ungefähr deine Höhe über dem Meeresspiegel anzeigen.
Wenn du unseren Online-Compiler und Uploader verwendest, vergiss nicht, den Seriellen Monitor nach dem Zurücksetzen (Drücken der Einschalttaste) deines Mercury zu verbinden, um die eingehenden Informationen zu sehen. 

Verwendest du die Arduino IDE? Unser Online-Programmierer bindet Mercury_Pins.h standardmäßig ein, damit die Pin-Namen ohne Probleme funktionieren. Wenn du die Arduino IDE oder einen anderen Programmierer verwendest, kopiere den Inhalt des Mercury_Pins.h-Tabs und füge ihn oben in dein Programm ein.
// Beispiel für Drucksensortest für Mercury Altimeter (altimetercloud.com)
#include "Wire.h"
#include "Mercury_Pins.h"

// Es gibt viele Optionen für Bibliotheken, wir haben diese für unser Beispiel gewählt
#include "Adafruit_BMP3XX.h"
#include "Adafruit_BMP5xx.h"

Adafruit_BMP3XX bmp3;
Adafruit_BMP5xx bmp5;

bool hasBMP581 = false;
bool hasBMP390 = false;

float seaLevelHpa = 1013.25;   // Der Wettervorhersagedruck auf Meereshöhe für deinen Standort. 

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

    // Schalte die Stromversorgung der Sensoren auf dem Mercury Altimeter ein
    pinMode(VACC, OUTPUT);
    digitalWrite(VACC, HIGH);
    delay(100);

    // Starte I2C auf den SDA- und SCL-Pins des Mercury
    Wire.begin(SDA, SCL);

    // Erkenne, welcher Drucksensor auf deinem Mercury vorhanden ist. Frühere Versionen hatten einen Bosch BMP390 und spätere Versionen (3+) haben den Bosch BMP581
    if (bmp5.begin(0x47, &Wire)) {
        hasBMP581 = true;
        Serial.println("BMP581 gefunden");
    } else if (bmp3.begin_I2C(0x77, &Wire)) {
        hasBMP390 = true;
        Serial.println("BMP390 gefunden");
    } else {
        Serial.println("Kein Sensor gefunden!");
    }
}

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

    // Lese den erkannten Sensor für seinen Druck und seine Temperatur aus
    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;
    }

    // Konvertiere den Druck in Höhe unter Verwendung der Standardannahme einer Umgebungstemperatur von 15 Grad Celsius und des zuvor definierten Meeresdrucks.
    alt = 44330.0 * (1.0 - pow(pressure / seaLevelHpa, 0.1903));
    Serial.printf("Temp: %.1fC  Druck: %.2f hPa  Höhe: %.1f m\n", temp, pressure, alt);
    delay(500);
}

#pragma once
/*
 * Mercury (ESP32-C6) Pin-Definitionen
 * Board-spezifische 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-Stromschiene (HIGH fahren zum Aktivieren)

// ââ Allgemeine Zweckports ââ
#define GP06          6    // GP06 Port
#define GP07          7    // GP07 Port

// ââ Hochstrom-Ausgang ââ
#define OUT1          5    // Hochstrom-Ausgang (z.B. Sprengstoff / 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-Stromversorgungserkennung (HIGH = USB vorhanden)
#define BUTTON        9    // BUTTON auf der Platine, Boot-Knopf aber kann verwendet werden