From ac1513129627e505544264b8ff46282a4a46f3c1 Mon Sep 17 00:00:00 2001 From: Wesley Ellis Date: Wed, 22 Oct 2025 16:17:06 -0400 Subject: [PATCH 1/2] Add support for bmp085/bmp180 temperature/pressure sensor --- platformio.ini | 2 ++ .../sensors/EnvironmentSensorManager.cpp | 29 +++++++++++++++++++ .../sensors/EnvironmentSensorManager.h | 1 + 3 files changed, 32 insertions(+) diff --git a/platformio.ini b/platformio.ini index 1200f5998..56a517197 100644 --- a/platformio.ini +++ b/platformio.ini @@ -128,6 +128,7 @@ build_flags = -D ENV_INCLUDE_MLX90614=1 -D ENV_INCLUDE_VL53L0X=1 -D ENV_INCLUDE_BME680=1 + -D ENV_INCLUDE_BMP085=1 lib_deps = adafruit/Adafruit INA3221 Library @ ^1.0.1 adafruit/Adafruit INA219 @ ^1.2.3 @@ -143,3 +144,4 @@ lib_deps = adafruit/Adafruit_VL53L0X @ ^1.2.4 stevemarple/MicroNMEA @ ^2.0.6 adafruit/Adafruit BME680 Library @ ^2.0.4 + adafruit/Adafruit BMP085 Library @ ^1.2.4 diff --git a/src/helpers/sensors/EnvironmentSensorManager.cpp b/src/helpers/sensors/EnvironmentSensorManager.cpp index bb70c0b5c..41d50e92c 100644 --- a/src/helpers/sensors/EnvironmentSensorManager.cpp +++ b/src/helpers/sensors/EnvironmentSensorManager.cpp @@ -15,6 +15,12 @@ static Adafruit_BME680 BME680; #endif +#ifdef ENV_INCLUDE_BMP085 +#define TELEM_BMP085_SEALEVELPRESSURE_HPA (1013.25) +#include +static Adafruit_BMP085 BMP085; +#endif + #if ENV_INCLUDE_AHTX0 #define TELEM_AHTX_ADDRESS 0x38 // AHT10, AHT20 temperature and humidity sensor I2C address #include @@ -305,6 +311,21 @@ bool EnvironmentSensorManager::begin() { } #endif + #if ENV_INCLUDE_BMP085 + // first arg is MODE + // 0: ULTRALOWPOWER + // 1: STANDARD + // 2: HIGHRES + // 3: ULTRAHIGHRES + if (BMP085.begin(1, TELEM_WIRE)) { + MESH_DEBUG_PRINTLN("Found sensor BMP085"); + BMP085_initialized = true; + } else { + BMP085_initialized = false; + MESH_DEBUG_PRINTLN("BMP085 was not found at I2C address %02X", 0x77); + } + #endif + return true; } @@ -447,6 +468,14 @@ bool EnvironmentSensorManager::querySensors(uint8_t requester_permissions, Cayen } #endif + #if ENV_INCLUDE_BMP085 + if (BMP085_initialized) { + telemetry.addTemperature(TELEM_CHANNEL_SELF, BMP085.readTemperature()); + telemetry.addBarometricPressure(TELEM_CHANNEL_SELF, BMP085.readPressure() / 100); + telemetry.addAltitude(TELEM_CHANNEL_SELF, BMP085.readAltitude(TELEM_BMP085_SEALEVELPRESSURE_HPA * 100)); + } + #endif + } return true; diff --git a/src/helpers/sensors/EnvironmentSensorManager.h b/src/helpers/sensors/EnvironmentSensorManager.h index 133d26504..5f1c08e2e 100644 --- a/src/helpers/sensors/EnvironmentSensorManager.h +++ b/src/helpers/sensors/EnvironmentSensorManager.h @@ -21,6 +21,7 @@ class EnvironmentSensorManager : public SensorManager { bool VL53L0X_initialized = false; bool SHT4X_initialized = false; bool BME680_initialized = false; + bool BMP085_initialized = false; bool gps_detected = false; bool gps_active = false; From 4cfbd3bad556abfdb03d5a00023b28536842b59f Mon Sep 17 00:00:00 2001 From: Wesley Ellis Date: Wed, 22 Oct 2025 16:53:11 -0400 Subject: [PATCH 2/2] Switch BMP085 mode to 0 for ULTRALOWPOWER --- src/helpers/sensors/EnvironmentSensorManager.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/helpers/sensors/EnvironmentSensorManager.cpp b/src/helpers/sensors/EnvironmentSensorManager.cpp index 41d50e92c..98339105b 100644 --- a/src/helpers/sensors/EnvironmentSensorManager.cpp +++ b/src/helpers/sensors/EnvironmentSensorManager.cpp @@ -312,12 +312,9 @@ bool EnvironmentSensorManager::begin() { #endif #if ENV_INCLUDE_BMP085 - // first arg is MODE - // 0: ULTRALOWPOWER - // 1: STANDARD - // 2: HIGHRES - // 3: ULTRAHIGHRES - if (BMP085.begin(1, TELEM_WIRE)) { + // First argument is MODE (aka oversampling) + // choose ULTRALOWPOWER + if (BMP085.begin(0, TELEM_WIRE)) { MESH_DEBUG_PRINTLN("Found sensor BMP085"); BMP085_initialized = true; } else {