From a96d1022a007430179843aa028f6ecbe7883ee3f Mon Sep 17 00:00:00 2001 From: Martin Kudlacek Date: Mon, 28 Jul 2025 09:41:06 +0200 Subject: [PATCH] Added support for TI INA260 --- .../sensors/EnvironmentSensorManager.cpp | 25 +++++++++++++++++++ .../sensors/EnvironmentSensorManager.h | 1 + variants/rak4631/platformio.ini | 2 ++ 3 files changed, 28 insertions(+) diff --git a/src/helpers/sensors/EnvironmentSensorManager.cpp b/src/helpers/sensors/EnvironmentSensorManager.cpp index 5412ea6b..2befdf04 100644 --- a/src/helpers/sensors/EnvironmentSensorManager.cpp +++ b/src/helpers/sensors/EnvironmentSensorManager.cpp @@ -53,6 +53,12 @@ static Adafruit_INA3221 INA3221; static Adafruit_INA219 INA219(TELEM_INA219_ADDRESS); #endif +#if ENV_INCLUDE_INA260 +#define TELEM_INA260_ADDRESS 0x41 // INA260 single channel current sensor I2C address +#include +static Adafruit_INA260 INA260; +#endif + #if ENV_INCLUDE_MLX90614 #define TELEM_MLX90614_ADDRESS 0x5A // MLX90614 IR temperature sensor I2C address #include @@ -165,6 +171,16 @@ bool EnvironmentSensorManager::begin() { } #endif + #if ENV_INCLUDE_INA260 + if (INA260.begin(TELEM_INA260_ADDRESS, TELEM_WIRE)) { + MESH_DEBUG_PRINTLN("Found INA260 at address: %02X", TELEM_INA260_ADDRESS); + INA260_initialized = true; + } else { + INA260_initialized = false; + MESH_DEBUG_PRINTLN("INA260 was not found at I2C address %02X", TELEM_INA219_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); @@ -265,6 +281,15 @@ bool EnvironmentSensorManager::querySensors(uint8_t requester_permissions, Cayen } #endif + #if ENV_INCLUDE_INA260 + if (INA260_initialized) { + telemetry.addVoltage(next_available_channel, INA260.readBusVoltage() / 1000); + telemetry.addCurrent(next_available_channel, INA260.readCurrent() / 1000); + telemetry.addPower(next_available_channel, INA260.readPower() / 1000); + next_available_channel++; + } + #endif + #if ENV_INCLUDE_MLX90614 if (MLX90614_initialized) { telemetry.addTemperature(TELEM_CHANNEL_SELF, MLX90614.readObjectTempC()); diff --git a/src/helpers/sensors/EnvironmentSensorManager.h b/src/helpers/sensors/EnvironmentSensorManager.h index 63c56643..cb26ab93 100644 --- a/src/helpers/sensors/EnvironmentSensorManager.h +++ b/src/helpers/sensors/EnvironmentSensorManager.h @@ -13,6 +13,7 @@ protected: bool BMP280_initialized = false; bool INA3221_initialized = false; bool INA219_initialized = false; + bool INA260_initialized = false; bool SHTC3_initialized = false; bool LPS22HB_initialized = false; bool MLX90614_initialized = false; diff --git a/variants/rak4631/platformio.ini b/variants/rak4631/platformio.ini index 29d07a78..754837d3 100644 --- a/variants/rak4631/platformio.ini +++ b/variants/rak4631/platformio.ini @@ -26,6 +26,7 @@ build_flags = ${nrf52_base.build_flags} -D ENV_INCLUDE_LPS22HB=1 -D ENV_INCLUDE_INA3221=1 -D ENV_INCLUDE_INA219=1 + -D ENV_INCLUDE_INA260=1 build_src_filter = ${nrf52_base.build_src_filter} +<../variants/rak4631> + @@ -40,6 +41,7 @@ lib_deps = adafruit/Adafruit BME280 Library @ ^2.3.0 adafruit/Adafruit BMP280 Library @ ^2.6.8 adafruit/Adafruit SHTC3 Library @ ^1.0.1 + adafruit/Adafruit INA260 Library @ ^1.5.3 sparkfun/SparkFun u-blox GNSS Arduino Library@^2.2.27 [env:RAK_4631_Repeater]