From 2d2fc08f836a5099346135a39bb6119f0701f6e7 Mon Sep 17 00:00:00 2001 From: Wesley Ellis Date: Wed, 21 Jan 2026 07:37:06 -0500 Subject: [PATCH] Document alt INA3221 addr, avoid INA219 conflict This adds a support for defining alternate INA3221 addresses. It also adds some special handling in the case you change the address to 0x40 and it conflicts with INA219. In that case, the INA3221 responds to INA219 commands, but with garbage data --- src/helpers/sensors/EnvironmentSensorManager.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/helpers/sensors/EnvironmentSensorManager.cpp b/src/helpers/sensors/EnvironmentSensorManager.cpp index b7238def9..27b202436 100644 --- a/src/helpers/sensors/EnvironmentSensorManager.cpp +++ b/src/helpers/sensors/EnvironmentSensorManager.cpp @@ -61,7 +61,9 @@ static SensirionI2cSht4x SHT4X; #endif #if ENV_INCLUDE_INA3221 -#define TELEM_INA3221_ADDRESS 0x42 // INA3221 3 channel current sensor I2C address +#ifndef TELEM_INA3221_ADDRESS +#define TELEM_INA3221_ADDRESS 0x42 // INA3221 3 channel current sensor I2C address (0x40-0x43 based on A0 pin) +#endif #define TELEM_INA3221_SHUNT_VALUE 0.100 // most variants will have a 0.1 ohm shunts #define TELEM_INA3221_NUM_CHANNELS 3 #include @@ -268,6 +270,13 @@ bool EnvironmentSensorManager::begin() { #endif #if ENV_INCLUDE_INA219 + // Skip INA219 if INA3221 is at the same address (they conflict) + #if ENV_INCLUDE_INA3221 + if (INA3221_initialized && TELEM_INA219_ADDRESS == TELEM_INA3221_ADDRESS) { + INA219_initialized = false; + MESH_DEBUG_PRINTLN("INA219 skipped - INA3221 at same address %02X", TELEM_INA219_ADDRESS); + } else + #endif if (INA219.begin(TELEM_WIRE)) { MESH_DEBUG_PRINTLN("Found INA219 at address: %02X", TELEM_INA219_ADDRESS); INA219_initialized = true;