Inicie sessão na sua conta Altimeter Cloud
Não tem conta? Criar uma
Enviaremos um link de confirmação por e-mail. Verifique a pasta de spam se não o receber.
Já tem uma conta? Entrar
O Mercury possui um sensor de pressão Bosch BMP390 ou Bosch BMP581 a bordo.
Este script mostra como detectar qual você possui e ler sua temperatura e pressão e convertê-las para uma altitude.
A conversão padrão usada neste programa assume uma pressão de 1013.25 Hpa (média) e uma temperatura ambiente de 15 graus Celsius.
Se você encontrar a previsão do tempo local para sua localização e hora e inserir essa pressão em vez disso, você deverá ver aproximadamente sua altura acima do nível do mar com este script.
Se estiver usando nosso compilador e uploader online, não se esqueça de conectar o monitor Serial após redefinir (pressionar o botão de energia) seu Mercury para ver as informações sendo transmitidas.
// Exemplo de teste de sensor de pressão para altímetros Mercury (altimetercloud.com) #include "Wire.h" #include "Mercury_Pins.h" // Existem muitas opções de bibliotecas, escolhemos estas para nosso exemplo #include "Adafruit_BMP3XX.h" #include "Adafruit_BMP5xx.h" Adafruit_BMP3XX bmp3; Adafruit_BMP5xx bmp5; bool hasBMP581 = false; bool hasBMP390 = false; float seaLevelHpa = 1013.25; // A pressão do nível do mar de previsão do tempo para sua localização. void setup() { Serial.begin(115200); // Ligue a energia para os sensores no altímetro Mercury pinMode(VACC, OUTPUT); digitalWrite(VACC, HIGH); delay(100); // Inicie I2C nos pinos SDA e SCL do Mercury Wire.begin(SDA, SCL); // Detecte qual sensor de pressão está presente em seu Mercury, as revisões anteriores tinham um Bosch BMP390 e as revisões posteriores (3+) têm o Bosch BMP581 if (bmp5.begin(0x47, &Wire)) { hasBMP581 = true; Serial.println("BMP581 encontrado"); } else if (bmp3.begin_I2C(0x77, &Wire)) { hasBMP390 = true; Serial.println("BMP390 encontrado"); } else { Serial.println("Nenhum sensor encontrado!"); } } void loop() { float temp = 0, pressure = 0, alt = 0; // Leia o sensor detectado para sua pressão e temperatura 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; } // Converta a pressão para altitude usando a suposição padrão de 15 graus Celsius de temperatura ambiente e a pressão do nível do mar definida anteriormente. alt = 44330.0 * (1.0 - pow(pressure / seaLevelHpa, 0.1903)); Serial.printf("Temp: %.1fC Pressão: %.2f hPa Alt: %.1f m\n", temp, pressure, alt); delay(500); }#pragma once /* * Definições de pinos Mercury (ESP32-C6) * Atribuições de GPIO específicas da placa */ // ââ LED de Status (NeoPixel) ââ #define LEDPOWER 3 // Energia NeoPixel (dirija HIGH para ativar) #define LED 2 // Sinal de dados NeoPixel // ââ Barramento I2C ââ #define SDA 21 // Dados I2C #define SCL 22 // Relógio I2C // ââ Energia do Sensor ââ #define VACC 20 // Trilho de energia do sensor (dirija HIGH para ativar) // ââ Portas de Uso Geral ââ #define GP06 6 // Porta GP06 #define GP07 7 // Porta GP07 // ââ Saída de Alta Corrente ââ #define OUT1 5 // Saída de alta corrente (ex: pirotécnico / relé) // ââ LEDs da Barra de Bateria ââ #define BL1 4 // LED de Bateria 1 (mais baixo) #define BL2 14 // LED de Bateria 2 #define BL3 15 // LED de Bateria 3 #define BL4 18 // LED de Bateria 4 #define BL5 19 // LED de Bateria 5 (mais alto) // ââ Indicadores ââ #define DISK 8 // LED de atividade de disco // ââ Analógico / Detecção ââ #define BATIN 0 // Tensão da bateria (divisor 1:1) #define USBDETECT 1 // Detecção de energia USB (HIGH = USB presente) #define BUTTON 9 // BOTÃO na placa, botão de inicialização, mas pode ser usado