Melden Sie sich bei Ihrem Altimeter Cloud Konto an
Noch kein Konto? Registrieren
Wir senden Ihnen einen Bestätigungslink per E-Mail. Prüfen Sie auch Ihren Spam-Ordner.
Haben Sie bereits ein Konto? Anmelden
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.
// 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