Zaloguj się do swojego konta Altimeter Cloud
Nie masz konta? Utwórz konto
Wyślemy link potwierdzający na Twój e-mail. Sprawdź folder spam, jeśli go nie otrzymasz.
Masz już konto? Zaloguj się
Mercury wyposażony jest w czujnik ciśnienia Bosch BMP390 lub Bosch BMP581.
Ten skrypt pokazuje, jak wykryć, który z nich masz, i przeczytać jego temperaturę oraz ciśnienie, a następnie przeliczyć je na wysokość.
Standardowa konwersja stosowana w tym programie zakłada ciśnienie 1013,25 Hpa (średnie) i temperaturę otoczenia 15 stopni Celsjusza.
Jeśli znajdziesz prognozę pogody dla swojej lokalizacji i czasu, a następnie wprowadzisz to ciśnienie, ten skrypt powinien pokazać przybliżoną wysokość nad poziomem morza.
Jeśli używasz naszego kompilatora online i programatora, nie zapomnij podłączyć monitora portu szeregowego po zresetowaniu (naciśnięciu przycisku zasilania) Mercury, aby zobaczyć przychodzące informacje.
// Przykład testu czujnika ciśnienia dla altimetrów Mercury (altimetercloud.com) #include "Wire.h" #include "Mercury_Pins.h" // Istnieje wiele opcji bibliotek – wybraliśmy te do naszego przykładu #include "Adafruit_BMP3XX.h" #include "Adafruit_BMP5xx.h" Adafruit_BMP3XX bmp3; Adafruit_BMP5xx bmp5; bool hasBMP581 = false; bool hasBMP390 = false; float seaLevelHpa = 1013.25; // Prognozowane ciśnienie na poziomie morza dla Twojej lokalizacji. void setup() { Serial.begin(115200); // Włącz zasilanie czujników na altimetrze Mercury pinMode(VACC, OUTPUT); digitalWrite(VACC, HIGH); delay(100); // Uruchom I2C na pinach SDA i SCL Mercury Wire.begin(SDA, SCL); // Wykryj, który czujnik ciśnienia znajduje się na Twoim Mercury, wcześniejsze wersje miały Bosch BMP390, a nowsze wersje (3+) mają Bosch BMP581 if (bmp5.begin(0x47, &Wire)) { hasBMP581 = true; Serial.println("Znaleziono BMP581"); } else if (bmp3.begin_I2C(0x77, &Wire)) { hasBMP390 = true; Serial.println("Znaleziono BMP390"); } else { Serial.println("Nie znaleziono czujnika!"); } } void loop() { float temp = 0, pressure = 0, alt = 0; // Odczytaj wykryty czujnik w celu uzyskania jego ciśnienia i temperatury 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; } // Konwertuj ciśnienie na wysokość, używając standardowego założenia temperatury otoczenia 15 stopni Celsjusza i ciśnienia na poziomie morza zdefiniowanego wcześniej. alt = 44330.0 * (1.0 - pow(pressure / seaLevelHpa, 0.1903)); Serial.printf("Temp: %.1fC Pressure: %.2f hPa Alt: %.1f m\n", temp, pressure, alt); delay(500); }#pragma once /* * Mercury (ESP32-C6) Definicje pinów * Przypisania GPIO specyficzne dla płytki */ // ââ Dioda LED stanu (NeoPixel) ââ #define LEDPOWER 3 // Zasilanie NeoPixel (ustaw HIGH aby włączyć) #define LED 2 // Sygnał danych NeoPixel // ââ Magistrala I2C ââ #define SDA 21 // Dane I2C #define SCL 22 // Zegar I2C // ââ Zasilanie czujnika ââ #define VACC 20 // Szyna zasilania czujnika (ustaw HIGH aby włączyć) // ââ Porty ogólnego przeznaczenia ââ #define GP06 6 // Port GP06 #define GP07 7 // Port GP07 // ââ Wyjście wysokiego prądu ââ #define OUT1 5 // Wyjście wysokiego prądu (np. pirotechnika / przekaźnik) // ââ Diody LED paska baterii ââ #define BL1 4 // Dioda LED baterii 1 (najmniejsza) #define BL2 14 // Dioda LED baterii 2 #define BL3 15 // Dioda LED baterii 3 #define BL4 18 // Dioda LED baterii 4 #define BL5 19 // Dioda LED baterii 5 (największa) // ââ Wskaźniki ââ #define DISK 8 // Dioda LED aktywności dysku // ââ Wejścia analogowe / Detekcja ââ #define BATIN 0 // Napięcie baterii (dzielnik 1:1) #define USBDETECT 1 // Detekcja zasilania USB (HIGH = USB obecny) #define BUTTON 9 // PRZYCISK na płytce, przycisk boot ale może być używany