Просмотр исходного кода

Merge pull request #651 from awolden/awolden/ina226

Add INA226 to environmental sensors
ripplebiz 11 месяцев назад
Родитель
Сommit
5cd1df48ad

+ 2 - 0
platformio.ini

@@ -115,12 +115,14 @@ build_flags =
   -D ENV_INCLUDE_LPS22HB=1
   -D ENV_INCLUDE_INA3221=1
   -D ENV_INCLUDE_INA219=1
+  -D ENV_INCLUDE_INA226=1
   -D ENV_INCLUDE_INA260=1
   -D ENV_INCLUDE_MLX90614=1
   -D ENV_INCLUDE_VL53L0X=1
 lib_deps =
   adafruit/Adafruit INA3221 Library @ ^1.0.1
   adafruit/Adafruit INA219 @ ^1.2.3
+  robtillaart/INA226 @ ^0.6.4
   adafruit/Adafruit INA260 Library @ ^1.5.3
   adafruit/Adafruit AHTX0 @ ^2.0.5
   adafruit/Adafruit BME280 Library @ ^2.3.0

+ 28 - 0
src/helpers/sensors/EnvironmentSensorManager.cpp

@@ -65,6 +65,14 @@ static Adafruit_INA219 INA219(TELEM_INA219_ADDRESS);
 static Adafruit_INA260 INA260;
 #endif
 
+#if ENV_INCLUDE_INA226
+#define TELEM_INA226_ADDRESS    0x44 
+#define TELEM_INA226_SHUNT_VALUE 0.100 
+#define TELEM_INA226_MAX_AMP 0.8
+#include <INA226.h>
+static INA226 INA226(TELEM_INA226_ADDRESS);
+#endif
+
 #if ENV_INCLUDE_MLX90614
 #define TELEM_MLX90614_ADDRESS 0x5A      // MLX90614 IR temperature sensor I2C address
 #include <Adafruit_MLX90614.h>
@@ -202,6 +210,17 @@ bool EnvironmentSensorManager::begin() {
   }
   #endif
 
+  #if ENV_INCLUDE_INA226
+  if (INA226.begin()) {
+    MESH_DEBUG_PRINTLN("Found INA226 at address: %02X", TELEM_INA226_ADDRESS);
+    INA226.setMaxCurrentShunt(TELEM_INA226_MAX_AMP, TELEM_INA226_SHUNT_VALUE);
+    INA226_initialized = true;
+  } else {
+    INA226_initialized = false;
+    MESH_DEBUG_PRINTLN("INA226 was not found at I2C address %02X", TELEM_INA226_ADDRESS);
+  }
+  #endif
+
   #if ENV_INCLUDE_MLX90614
   if (MLX90614.begin(TELEM_MLX90614_ADDRESS, TELEM_WIRE)) {
     MESH_DEBUG_PRINTLN("Found MLX90614 at address: %02X", TELEM_MLX90614_ADDRESS);
@@ -323,6 +342,15 @@ bool EnvironmentSensorManager::querySensors(uint8_t requester_permissions, Cayen
     }
     #endif
 
+    #if ENV_INCLUDE_INA226
+    if (INA226_initialized) {
+      telemetry.addVoltage(next_available_channel, INA226.getBusVoltage());
+      telemetry.addCurrent(next_available_channel, INA226.getCurrent_mA() / 1000.0);
+      telemetry.addPower(next_available_channel, INA226.getPower_mW() / 1000.0);
+      next_available_channel++;
+    }
+    #endif
+
     #if ENV_INCLUDE_MLX90614
     if (MLX90614_initialized) {
       telemetry.addTemperature(TELEM_CHANNEL_SELF, MLX90614.readObjectTempC());

+ 1 - 0
src/helpers/sensors/EnvironmentSensorManager.h

@@ -14,6 +14,7 @@ protected:
   bool INA3221_initialized = false;
   bool INA219_initialized = false;
   bool INA260_initialized = false;
+  bool INA226_initialized = false;
   bool SHTC3_initialized = false;
   bool LPS22HB_initialized = false;
   bool MLX90614_initialized = false;