* Promicro: some refactors, minor fixes for INA3221 sensors

This commit is contained in:
Scott Powell
2025-05-14 21:22:26 +10:00
parent cf1c863cc2
commit 8007aad7a3
3 changed files with 12 additions and 21 deletions

View File

@@ -8,12 +8,6 @@
#define TELEM_CHANNEL_SELF 1 // LPP data channel for 'self' device
#define TELEM_INA3221_ADDRESS 0x42 // INA3221 3 channel current, voltage, power sensor I2C address
#define TELEM_INA3221_SHUNT_VALUE 0.100 // most variants will have a 0.1 ohm shunts
#define TELEM_INA3221_SETTING_CH1 "INA3221 Channel 1"
#define TELEM_INA3221_SETTING_CH2 "INA3221 Channel 2"
#define TELEM_INA3221_SETTING_CH3 "INA3221 Channel 3"
class SensorManager {
public:
double node_lat, node_lon; // modify these, if you want to affect Advert location

View File

@@ -75,34 +75,26 @@ mesh::LocalIdentity radio_new_identity() {
return mesh::LocalIdentity(&rng); // create new random identity
}
INA3221 INA_3221(TELEM_INA3221_ADDRESS, &Wire);
static INA3221 INA_3221(TELEM_INA3221_ADDRESS, &Wire);
bool PromicroSensorManager::begin() {
if (INA_3221.begin() ) {
Serial.print("Found INA3221 at address ");
Serial.print(INA_3221.getAddress());
Serial.println();
Serial.print(INA_3221.getDieID(), HEX);
Serial.print(INA_3221.getManufacturerID(), HEX);
Serial.print(INA_3221.getConfiguration(), HEX);
Serial.println();
MESH_DEBUG_PRINTLN("Found INA3221 at address: %02X", INA_3221.getAddress());
MESH_DEBUG_PRINTLN("%04X %04X %04X", INA_3221.getDieID(), INA_3221.getManufacturerID(), INA_3221.getConfiguration());
for(int i = 0; i < 3; i++) {
INA_3221.setShuntR(i, TELEM_INA3221_SHUNT_VALUE);
}
INA3221initialized = true;
}
else {
} else {
INA3221initialized = false;
Serial.print("INA3221 was not found at I2C address ");
Serial.print(TELEM_INA3221_ADDRESS, HEX);
Serial.println();
MESH_DEBUG_PRINTLN("INA3221 was not found at I2C address %02X", TELEM_INA3221_ADDRESS);
}
return true;
}
bool PromicroSensorManager::querySensors(uint8_t requester_permissions, CayenneLPP& telemetry) {
if (requester_permissions && TELEM_PERM_ENVIRONMENT) {
if (requester_permissions & TELEM_PERM_ENVIRONMENT) {
if (INA3221initialized) {
for(int i = 0; i < 3; i++) {
// add only enabled INA3221 channels to telemetry

View File

@@ -23,13 +23,18 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr);
void radio_set_tx_power(uint8_t dbm);
mesh::LocalIdentity radio_new_identity();
#define TELEM_INA3221_ADDRESS 0x42 // INA3221 3 channel current, voltage, power sensor I2C address
#define TELEM_INA3221_SHUNT_VALUE 0.100 // most variants will have a 0.1 ohm shunts
#define TELEM_INA3221_SETTING_CH1 "INA3221-1"
#define TELEM_INA3221_SETTING_CH2 "INA3221-2"
#define TELEM_INA3221_SETTING_CH3 "INA3221-3"
class PromicroSensorManager: public SensorManager {
bool INA3221initialized = false;
// INA3221 channels in telemetry
int INA3221_CHANNELS[NUM_SENSOR_SETTINGS] = {TELEM_CHANNEL_SELF + 1, TELEM_CHANNEL_SELF + 2, TELEM_CHANNEL_SELF+ 3};
char * INA3221_CHANNEL_NAMES[NUM_SENSOR_SETTINGS] = { TELEM_INA3221_SETTING_CH1, TELEM_INA3221_SETTING_CH2, TELEM_INA3221_SETTING_CH3};
const char * INA3221_CHANNEL_NAMES[NUM_SENSOR_SETTINGS] = { TELEM_INA3221_SETTING_CH1, TELEM_INA3221_SETTING_CH2, TELEM_INA3221_SETTING_CH3};
bool INA3221_CHANNEL_ENABLED[NUM_SENSOR_SETTINGS] = {true, true, true};
public: