Browse Source

add support for BMP280 temperature+pressure sensor

recrof 1 year ago
parent
commit
9530744ff4

+ 35 - 6
src/helpers/sensors/EnvironmentSensorManager.cpp

@@ -15,6 +15,16 @@ static Adafruit_AHTX0 AHTX0;
 static Adafruit_BME280 BME280;
 #endif
 
+#if ENV_INCLUDE_BMP280
+#ifndef TELEM_BMP280_ADDRESS
+#define TELEM_BMP280_ADDRESS    0x76      // BMP280 environmental sensor I2C address
+#endif
+#define TELEM_BMP280_SEALEVELPRESSURE_HPA (1013.25)    // Athmospheric pressure at sea level
+#include <Adafruit_BMP280.h>
+static Adafruit_BMP280 BMP280;
+#endif
+
+
 #if ENV_INCLUDE_INA3221
 #define TELEM_INA3221_ADDRESS   0x42      // INA3221 3 channel current sensor I2C address
 #define TELEM_INA3221_SHUNT_VALUE 0.100 // most variants will have a 0.1 ohm shunts
@@ -55,6 +65,17 @@ bool EnvironmentSensorManager::begin() {
   }
   #endif
 
+  #if ENV_INCLUDE_BMP280
+  if (BMP280.begin(TELEM_BMP280_ADDRESS)) {
+    MESH_DEBUG_PRINTLN("Found BMP280 at address: %02X", TELEM_BMP280_ADDRESS);
+    MESH_DEBUG_PRINTLN("BMP sensor ID: %02X", BMP280.sensorID());
+    BMP280_initialized = true;
+  } else {
+    BMP280_initialized = false;
+    MESH_DEBUG_PRINTLN("BMP280 was not found at I2C address %02X", TELEM_BMP280_ADDRESS);
+  }
+  #endif
+
   #if ENV_INCLUDE_INA3221
   if (INA3221.begin(TELEM_INA3221_ADDRESS, &Wire)) {
       MESH_DEBUG_PRINTLN("Found INA3221 at address: %02X", TELEM_INA3221_ADDRESS);
@@ -97,7 +118,7 @@ bool EnvironmentSensorManager::querySensors(uint8_t requester_permissions, Cayen
       sensors_event_t humidity, temp;
       AHTX0.getEvent(&humidity, &temp);
       telemetry.addTemperature(TELEM_CHANNEL_SELF, temp.temperature);
-      telemetry.addRelativeHumidity(TELEM_CHANNEL_SELF, humidity.relative_humidity);      
+      telemetry.addRelativeHumidity(TELEM_CHANNEL_SELF, humidity.relative_humidity);
     }
     #endif
 
@@ -110,6 +131,14 @@ bool EnvironmentSensorManager::querySensors(uint8_t requester_permissions, Cayen
     }
     #endif
 
+    #if ENV_INCLUDE_BMP280
+    if (BMP280_initialized) {
+      telemetry.addTemperature(TELEM_CHANNEL_SELF, BMP280.readTemperature());
+      telemetry.addBarometricPressure(TELEM_CHANNEL_SELF, BMP280.readPressure());
+      telemetry.addAltitude(TELEM_CHANNEL_SELF, BME280.readAltitude(TELEM_BME280_SEALEVELPRESSURE_HPA));
+    }
+    #endif
+
     #if ENV_INCLUDE_INA3221
     if (INA3221_initialized) {
       for(int i = 0; i < TELEM_INA3221_NUM_CHANNELS; i++) {
@@ -152,7 +181,7 @@ int EnvironmentSensorManager::getNumSettings() const {
 const char* EnvironmentSensorManager::getSettingName(int i) const {
   #if ENV_INCLUDE_GPS
     return (gps_detected && i == 0) ? "gps" : NULL;
-  #else  
+  #else
     return NULL;
   #endif
 }
@@ -184,7 +213,7 @@ bool EnvironmentSensorManager::setSettingValue(const char* name, const char* val
 void EnvironmentSensorManager::initBasicGPS() {
 
   Serial1.setPins(PIN_GPS_TX, PIN_GPS_RX);
-  
+
   #ifdef GPS_BAUD_RATE
   Serial1.begin(GPS_BAUD_RATE);
   #else
@@ -200,7 +229,7 @@ void EnvironmentSensorManager::initBasicGPS() {
   #ifndef PIN_GPS_EN
     MESH_DEBUG_PRINTLN("No GPS wake/reset pin found for this board. Continuing on...");
   #endif
-  
+
   // Give GPS a moment to power up and send data
   delay(1000);
 
@@ -226,7 +255,7 @@ void EnvironmentSensorManager::start_gps() {
   gps_active = true;
   #ifdef PIN_GPS_EN
     pinMode(PIN_GPS_EN, OUTPUT);
-    digitalWrite(PIN_GPS_EN, HIGH);  
+    digitalWrite(PIN_GPS_EN, HIGH);
     return;
   #endif
 
@@ -241,7 +270,7 @@ void EnvironmentSensorManager::stop_gps() {
     return;
   #endif
 
-  MESH_DEBUG_PRINTLN("Stop GPS is N/A on this board. Actual GPS state unchanged");  
+  MESH_DEBUG_PRINTLN("Stop GPS is N/A on this board. Actual GPS state unchanged");
 }
 
 void EnvironmentSensorManager::loop() {

+ 3 - 2
src/helpers/sensors/EnvironmentSensorManager.h

@@ -10,9 +10,10 @@ protected:
 
   bool AHTX0_initialized = false;
   bool BME280_initialized = false;
+  bool BMP280_initialized = false;
   bool INA3221_initialized = false;
   bool INA219_initialized = false;
-  
+
   bool gps_detected = false;
   bool gps_active = false;
 
@@ -31,7 +32,7 @@ public:
   EnvironmentSensorManager(){};
   #endif
   bool begin() override;
-  bool querySensors(uint8_t requester_permissions, CayenneLPP& telemetry) override;  
+  bool querySensors(uint8_t requester_permissions, CayenneLPP& telemetry) override;
   #if ENV_INCLUDE_GPS
   void loop() override;
   #endif

+ 4 - 2
variants/heltec_v3/platformio.ini

@@ -19,15 +19,16 @@ build_flags =
   -D SX126X_RX_BOOSTED_GAIN=1
   -D ENV_INCLUDE_AHTX0=1
   -D ENV_INCLUDE_BME280=1
+  -D ENV_INCLUDE_BMP280=1
   -D ENV_INCLUDE_INA3221=1
-  -D ENV_INCLUDE_INA219=1  
+  -D ENV_INCLUDE_INA219=1
   -D ENV_INCLUDE_GPS=1
   -D PIN_GPS_RX=45
   -D PIN_GPS_TX=46
   -D PIN_GPS_EN=-1
 build_src_filter = ${esp32_base.build_src_filter}
   +<../variants/heltec_v3>
-  +<helpers/sensors>    
+  +<helpers/sensors>
 lib_deps =
   ${esp32_base.lib_deps}
   adafruit/Adafruit SSD1306 @ ^2.5.13
@@ -35,6 +36,7 @@ lib_deps =
   adafruit/Adafruit INA219 @ ^1.2.3
   adafruit/Adafruit AHTX0 @ ^2.0.5
   adafruit/Adafruit BME280 Library @ ^2.3.0
+  adafruit/Adafruit BMP280 Library@^2.6.8
   stevemarple/MicroNMEA @ ^2.0.6
 
 [env:Heltec_v3_repeater]

+ 12 - 0
variants/lilygo_tlora_v2_1/platformio.ini

@@ -17,6 +17,8 @@ build_flags =
   -D P_LORA_MISO=19     ; SPI MISO
   -D P_LORA_MOSI=27     ; SPI MOSI
   -D P_LORA_TX_LED=2    ; LED pin for TX indication
+  -D PIN_BOARD_SDA=21
+  -D PIN_BOARD_SCL=22
   -D PIN_VBAT_READ=35   ; Battery voltage reading (analog pin)
   -D PIN_USER_BTN=0
   -D ARDUINO_LOOP_STACK_SIZE=16384
@@ -25,11 +27,21 @@ build_flags =
   -D WRAPPER_CLASS=CustomSX1276Wrapper
   -D SX127X_CURRENT_LIMIT=120
   -D LORA_TX_POWER=20
+  -D ENV_INCLUDE_AHTX0=1
+  -D ENV_INCLUDE_BME280=1
+  -D ENV_INCLUDE_BMP280=1
+  -D ENV_INCLUDE_INA3221=1
+  -D ENV_INCLUDE_INA219=1
 build_src_filter = ${esp32_base.build_src_filter}
   +<../variants/lilygo_tlora_v2_1>
+  +<helpers/sensors>
 lib_deps =
   ${esp32_base.lib_deps}
   adafruit/Adafruit SSD1306 @ ^2.5.13
+  adafruit/Adafruit INA3221 Library @ ^1.0.1
+  adafruit/Adafruit INA219 @ ^1.2.3
+  adafruit/Adafruit AHTX0 @ ^2.0.5
+  adafruit/Adafruit BME280 Library @ ^2.3.0
 
 ; === LILYGO T-LoRa V2.1-1.6 with SX1276 environments ===
 [env:LilyGo_TLora_V2_1_1_6_Repeater]

+ 15 - 13
variants/promicro/platformio.ini

@@ -1,7 +1,7 @@
 [Faketec]
-extends = nrf52840_base
+extends = nrf52_base
 board = promicro_nrf52840
-build_flags = ${nrf52840_base.build_flags}
+build_flags = ${nrf52_base.build_flags}
   -I variants/promicro
   -D FAKETEC
   -D RADIO_CLASS=CustomSX1262
@@ -19,20 +19,22 @@ build_flags = ${nrf52840_base.build_flags}
   -D ENV_INCLUDE_GPS=1
   -D ENV_INCLUDE_AHTX0=1
   -D ENV_INCLUDE_BME280=1
+  -D ENV_INCLUDE_BMP280=1
   -D ENV_INCLUDE_INA3221=1
   -D ENV_INCLUDE_INA219=1
-build_src_filter = ${nrf52840_base.build_src_filter}
+build_src_filter = ${nrf52_base.build_src_filter}
   +<helpers/nrf52/PromicroBoard.cpp>
-  +<helpers/sensors>  
+  +<helpers/sensors>
   +<../variants/promicro>
-lib_deps= ${nrf52840_base.lib_deps}
+lib_deps= ${nrf52_base.lib_deps}
 	adafruit/Adafruit SSD1306 @ ^2.5.13
   adafruit/Adafruit INA3221 Library @ ^1.0.1
   adafruit/Adafruit INA219 @ ^1.2.3
   adafruit/Adafruit AHTX0 @ ^2.0.5
-  adafruit/Adafruit BME280 Library @ ^2.3.0  
+  adafruit/Adafruit BME280 Library @ ^2.3.0
+  adafruit/Adafruit BMP280 Library@^2.6.8
   stevemarple/MicroNMEA @ ^2.0.6
-  
+
 [env:Faketec_Repeater]
 extends = Faketec
 build_src_filter = ${Faketec.build_src_filter}
@@ -116,9 +118,9 @@ lib_deps = ${Faketec.lib_deps}
   densaugeo/base64 @ ~1.4.0
 
 [ProMicroLLCC68]
-extends = nrf52840_base
+extends = nrf52_base
 board = promicro_nrf52840
-build_flags = ${nrf52840_base.build_flags}
+build_flags = ${nrf52_base.build_flags}
   -I variants/promicro
   -D PROMICROLLCC68
   -D RADIO_CLASS=CustomLLCC68
@@ -127,15 +129,15 @@ build_flags = ${nrf52840_base.build_flags}
   -D SX126X_CURRENT_LIMIT=140
   -D SX126X_RX_BOOSTED_GAIN=1
 build_src_filter =
-  ${nrf52840_base.build_src_filter}
+  ${nrf52_base.build_src_filter}
   +<helpers/nrf52/PromicroBoard.cpp>
-  +<helpers/sensors>  
+  +<helpers/sensors>
   +<../variants/promicro>
-lib_deps= ${nrf52840_base.lib_deps}
+lib_deps= ${nrf52_base.lib_deps}
   adafruit/Adafruit INA3221 Library @ ^1.0.1
   adafruit/Adafruit INA219 @ ^1.2.3
   adafruit/Adafruit AHTX0 @ ^2.0.5
-  adafruit/Adafruit BME280 Library @ ^2.3.0  
+  adafruit/Adafruit BME280 Library @ ^2.3.0
 
 [env:ProMicroLLCC68_Repeater]
 extends = ProMicroLLCC68