Instrukcja Mercury V1
Dowiedz się, jak szybko i łatwo latać, podłącz swój wysokościomierz do przesyłania danych na stronę Altimeter Cloud i korzystaj ze wszystkich zaawansowanych funkcji. Jeśli utknąłeś w miejscu lub dopiero zaczynasz, to jest odpowiednie miejsce dla Ciebie.

Przykład kodu: Czujnik ciśnienia BMP390 i BMP581 z automatycznym wykrywaniem

PDF

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. 

Używasz Arduino IDE? Nasz programator online domyślnie zawiera Mercury_Pins.h, dzięki czemu nazwy pinów działają bez problemów. Jeśli używasz Arduino IDE lub innego programatora, skopiuj zawartość karty Mercury_Pins.h i wklej ją na górze swojego programu.
// 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