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: Rozpoczynanie komunikacji I2C

PDF

Piny I2C są podłączone do czujnika IMU, czujnika ciśnienia i portów rozszerzeń.
SDA znajduje się na pinie 21, a SCL na pinie 22. Są one zdefiniowane w pliku Mercury_pins.h, więc możesz po prostu używać nazw SDA i SCL.
Wire.begin(SDA, SCL);

Poniższy kod włącza zasilanie czujników, uruchamia I2C i skanuje dostępne urządzenia co 10 sekund.
Po skompilowaniu i wgraniu na Mercury podłącz monitor szeregowy, aby wyświetlić wyjście. 

Używasz Arduino IDE? Nasz online programmer domyślnie zawiera Mercury_Pins.h, więc 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 początek swojego programu.
/*
 * Mercury I2C Scanner
 * Skanuje magistralę I2C i raportuje wszystkie podłączone urządzenia.
 * Przydatne do sprawdzenia adresów czujników po montażu.
 */

#include "Wire.h"
#include "Mercury_Pins.h"

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

    Serial.println("Mercury I2C Scanner");
    Serial.println("====================");

    // Włącz zasilanie szyny czujników
    pinMode(VACC, OUTPUT);
    digitalWrite(VACC, HIGH);
    delay(100);  // Pozwól czujnikom się ustabilizować

    // Uruchom I2C na pinach Mercury
    Wire.begin(SDA, SCL);

    Serial.println("Sensor power: ON");
    Serial.println("I2C bus ready (SDA=" + String(SDA) + " SCL=" + String(SCL) + ")");
    Serial.println();
}

void loop() {
    int found = 0;

    Serial.println("Scanning I2C bus...");

    for (int row = 0; row < 128; row += 16) {
        // Etykieta wiersza

        for (int col = 0; col < 16; col++) {
            int addr = row + col;

            // Pomiń zarezerwowane adresy (0x00-0x07 i 0x78-0x7F)
            if (addr < 0x08 || addr > 0x77) {
                continue;
            }

            Wire.beginTransmission(addr);
            int result = Wire.endTransmission();

            if (result == 0) {
                found++;
            } else {
            }
        }
    }

    Serial.println();
    if (found == 0) {
        Serial.println("No devices found. Check wiring and sensor power.");
    } else {
        Serial.println(String(found) + " device(s) found:");
        // Drugi przebieg, aby wyświetlić znalezione urządzenia ze wspólnymi nazwami
        for (int addr = 0x08; addr <= 0x77; addr++) {
            Wire.beginTransmission(addr);
            if (Wire.endTransmission() == 0) {
                Serial.printf("  0x%02X", addr);
                // Zidentyfikuj popularne czujniki
                switch (addr) {
                    case 0x47: Serial.print(" - BMP581 (Mercury Pressure)"); break;
                    case 0x6B: Serial.print(" - LSM6DSO32 (Mercury IMU)"); break;
                    case 0x77: Serial.print(" - BMP390 (Mercury Pressure)"); break;
                }
                Serial.println();
            }
        }
    }

    Serial.println();
    Serial.println("Next scan in 10 seconds...");
    Serial.println("---");
    delay(10000);
}

#pragma once
/*
 * Mercury (ESP32-C6) Pin Definitions
 * Board-specific GPIO assignments
 */

// ââ Status LED (NeoPixel) ââ
#define LEDPOWER      3    // NeoPixel power (drive HIGH to enable)
#define LED           2    // NeoPixel data signal

// ââ I2C Bus ââ
#define SDA           21   // I2C data
#define SCL           22   // I2C clock

// ââ Sensor Power ââ
#define VACC          20   // Sensor power rail (drive HIGH to enable)

// ââ General Purpose Ports ââ
#define GP06          6    // GP06 port
#define GP07          7    // GP07 port

// ââ High Current Output ââ
#define OUT1          5    // High current output (e.g. pyro / relay)

// ââ Battery Bar LEDs ââ
#define BL1           4    // Battery LED 1 (lowest)
#define BL2           14   // Battery LED 2
#define BL3           15   // Battery LED 3
#define BL4           18   // Battery LED 4
#define BL5           19   // Battery LED 5 (highest)

// ââ Indicators ââ
#define DISK          8    // Disk activity LED

// ââ Analogue / Detection ââ
#define BATIN         0    // Battery voltage (1:1 divider)
#define USBDETECT     1    // USB power detect (HIGH = USB present)
#define BUTTON        9    // BUTTON on the board, boot button but can be used