feat: BMP180 read and sea-level pressure conversion

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-17 19:43:03 +07:00
co-authored by Claude Opus 4.8
parent 906adaddfe
commit d042a94378
3 changed files with 37 additions and 0 deletions
+8
View File
@@ -2,6 +2,7 @@
#include <Wire.h>
#include "config.h"
#include "display_ui.h"
#include "sensors.h"
static void i2cScan() {
Serial.println(F("I2C scan:"));
@@ -25,7 +26,14 @@ void setup() {
displayBegin();
displaySplash("Weather", "Predictor v0.1");
if (!sensorsBegin()) Serial.println(F("BMP180 not found!"));
}
void loop() {
float abs_ = readAbsPressureHpa();
float msl = toSeaLevelHpa(abs_, DEFAULT_ALTITUDE_M);
Serial.printf("abs=%.1f hPa msl=%.1f hPa t=%.1f C\n",
abs_, msl, readTemperatureC());
delay(2000);
}
+22
View File
@@ -0,0 +1,22 @@
#include <Adafruit_BMP085.h>
#include <math.h>
#include "sensors.h"
static Adafruit_BMP085 bmp;
bool sensorsBegin() {
return bmp.begin(); // uses Wire (already started on D6/D1), addr 0x77
}
float readAbsPressureHpa() {
return bmp.readPressure() / 100.0f; // Pa -> hPa
}
float readTemperatureC() {
return bmp.readTemperature();
}
// Standard barometric reduction to sea level.
float toSeaLevelHpa(float absHpa, float altitudeM) {
return absHpa / powf(1.0f - (altitudeM / 44330.0f), 5.255f);
}
+7
View File
@@ -0,0 +1,7 @@
#pragma once
#include <Arduino.h>
bool sensorsBegin();
float readAbsPressureHpa(); // absolute (station) pressure, hPa
float readTemperatureC(); // degrees C
float toSeaLevelHpa(float absHpa, float altitudeM); // mean-sea-level pressure, hPa