From 6eb1123382b75ae94b92e780d16496068dd28e21 Mon Sep 17 00:00:00 2001 From: Wesley Ellis Date: Wed, 21 Jan 2026 07:37:06 -0500 Subject: [PATCH 1/2] 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 a75d378c8..b5156c43f 100644 --- a/src/helpers/sensors/EnvironmentSensorManager.cpp +++ b/src/helpers/sensors/EnvironmentSensorManager.cpp @@ -62,7 +62,9 @@ LPS22HBClass LPS22HB(*TELEM_WIRE); #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 @@ -269,6 +271,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; From f72541f83dec95c008ad146d4baad540714c5c12 Mon Sep 17 00:00:00 2001 From: Andy Shinn Date: Mon, 2 Mar 2026 15:54:35 -0600 Subject: [PATCH 2/2] allow shunt value overrides for Adafruit INA3221 since it uses 0.050 resistors --- src/helpers/sensors/EnvironmentSensorManager.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/helpers/sensors/EnvironmentSensorManager.cpp b/src/helpers/sensors/EnvironmentSensorManager.cpp index b5156c43f..697778733 100644 --- a/src/helpers/sensors/EnvironmentSensorManager.cpp +++ b/src/helpers/sensors/EnvironmentSensorManager.cpp @@ -65,7 +65,9 @@ LPS22HBClass LPS22HB(*TELEM_WIRE); #ifndef TELEM_INA3221_ADDRESS #define TELEM_INA3221_ADDRESS 0x42 // INA3221 3 channel current sensor I2C address (0x40-0x43 based on A0 pin) #endif +#ifndef TELEM_INA3221_SHUNT_VALUE #define TELEM_INA3221_SHUNT_VALUE 0.100 // most variants will have a 0.1 ohm shunts +#endif #define TELEM_INA3221_NUM_CHANNELS 3 #include static Adafruit_INA3221 INA3221;