diff --git a/src/detect/ScanI2C.h b/src/detect/ScanI2C.h index 232c43c34..16383bbd1 100644 --- a/src/detect/ScanI2C.h +++ b/src/detect/ScanI2C.h @@ -76,6 +76,7 @@ class ScanI2C PCT2075, BMM150, ADS1X15, + ADS1X15_ALT, } DeviceType; // typedef uint8_t DeviceAddress; diff --git a/src/detect/ScanI2CTwoWire.cpp b/src/detect/ScanI2CTwoWire.cpp index 6c8851fc7..441743a90 100644 --- a/src/detect/ScanI2CTwoWire.cpp +++ b/src/detect/ScanI2CTwoWire.cpp @@ -599,7 +599,7 @@ void ScanI2CTwoWire::scanPort(I2CPort port, uint8_t *address, uint8_t asize) // ADS1X15 default config register is 8583h registerValue = getRegisterValue(ScanI2CTwoWire::RegisterLocation(addr, 0x01), 2); if (registerValue == 0x8583) { - type = ADS1X15; + type = ADS1X15_ALT; logFoundDevice("ADS1X15", (uint8_t)addr.address); break; } diff --git a/src/main.cpp b/src/main.cpp index be64f2a64..54baae0db 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -704,7 +704,7 @@ void setup() scannerToSensorsMap(i2cScanner, ScanI2C::DeviceType::PCT2075, meshtastic_TelemetrySensorType_PCT2075); scannerToSensorsMap(i2cScanner, ScanI2C::DeviceType::SCD4X, meshtastic_TelemetrySensorType_SCD4X); scannerToSensorsMap(i2cScanner, ScanI2C::DeviceType::ADS1X15, meshtastic_TelemetrySensorType_ADS1X15); - + scannerToSensorsMap(i2cScanner, ScanI2C::DeviceType::ADS1X15_ALT, meshtastic_TelemetrySensorType_ADS1X15_ALT); i2cScanner.reset(); #endif diff --git a/src/modules/Telemetry/PowerTelemetry.cpp b/src/modules/Telemetry/PowerTelemetry.cpp index 025e6b858..5dcb794fc 100644 --- a/src/modules/Telemetry/PowerTelemetry.cpp +++ b/src/modules/Telemetry/PowerTelemetry.cpp @@ -33,8 +33,10 @@ extern void drawCommonHeader(OLEDDisplay *display, int16_t x, int16_t y, const c #if __has_include() #include "Sensor/ADS1X15Sensor.h" ADS1X15Sensor ads1x15Sensor; +ADS1X15Sensor ads1x15Sensor_alt(meshtastic_TelemetrySensorType_ADS1X15_ALT); #else NullSensor ads1x15Sensor; +NullSensor ads1x15Sensor_alt; #endif namespace graphics @@ -57,8 +59,8 @@ int32_t PowerTelemetryModule::runOnce() without having to configure it from the PythonAPI or WebUI. */ - moduleConfig.telemetry.power_measurement_enabled = 1; - moduleConfig.telemetry.power_screen_enabled = 1; + // moduleConfig.telemetry.power_measurement_enabled = 1; + // moduleConfig.telemetry.power_screen_enabled = 1; // moduleConfig.telemetry.power_update_interval = 45; if (!(moduleConfig.telemetry.power_measurement_enabled)) { @@ -91,9 +93,8 @@ int32_t PowerTelemetryModule::runOnce() result = max17048Sensor.isInitialized() ? 0 : max17048Sensor.runOnce(); if (ads1x15Sensor.hasSensor()) result = ads1x15Sensor.isInitialized() ? 0 : ads1x15Sensor.runOnce(); - if (!ads1x15Sensor.hasSensor()) { - LOG_INFO("ADS1X15 not found"); - } + if (ads1x15Sensor_alt.hasSensor()) + result = ads1x15Sensor_alt.isInitialized() ? 0 : ads1x15Sensor_alt.runOnce(); } // it's possible to have this module enabled, only for displaying values on the screen. @@ -226,8 +227,9 @@ bool PowerTelemetryModule::getPowerTelemetry(meshtastic_Telemetry *m) if (max17048Sensor.hasSensor()) valid = max17048Sensor.getMetrics(m); if (ads1x15Sensor.hasSensor()) - LOG_INFO("Getting ADS1X15 sensor"); valid = ads1x15Sensor.getMetrics(m); + if (ads1x15Sensor_alt.hasSensor()) + valid = ads1x15Sensor_alt.getMetrics(m); #endif return valid; @@ -268,6 +270,7 @@ bool PowerTelemetryModule::sendTelemetry(NodeNum dest, bool phoneOnly) m.which_variant = meshtastic_Telemetry_power_metrics_tag; m.time = getTime(); if (getPowerTelemetry(&m)) { + // TODO - Consider adding all 8 channels here - seems a bit much? LOG_INFO("Send: ch1_voltage=%f, ch1_current=%f, ch2_voltage=%f, ch2_current=%f, " "ch3_voltage=%f, ch3_current=%f, ch4_voltage=%f", m.variant.power_metrics.ch1_voltage, m.variant.power_metrics.ch1_current, m.variant.power_metrics.ch2_voltage, diff --git a/src/modules/Telemetry/Sensor/ADS1X15Sensor.cpp b/src/modules/Telemetry/Sensor/ADS1X15Sensor.cpp index b51a574d9..d196e7256 100644 --- a/src/modules/Telemetry/Sensor/ADS1X15Sensor.cpp +++ b/src/modules/Telemetry/Sensor/ADS1X15Sensor.cpp @@ -7,7 +7,7 @@ #include "TelemetrySensor.h" #include -ADS1X15Sensor::ADS1X15Sensor() : TelemetrySensor(meshtastic_TelemetrySensorType_ADS1X15, "ADS1X15") {} +ADS1X15Sensor::ADS1X15Sensor(meshtastic_TelemetrySensorType sensorType) : TelemetrySensor(sensorType, "ADS1X15") {} int32_t ADS1X15Sensor::runOnce() { @@ -94,16 +94,48 @@ bool ADS1X15Sensor::getMetrics(meshtastic_Telemetry *measurement) struct _ADS1X15Measurements m = getMeasurements(); - measurement->variant.power_metrics.has_ch1_voltage = true; - measurement->variant.power_metrics.has_ch2_voltage = true; - measurement->variant.power_metrics.has_ch3_voltage = true; - measurement->variant.power_metrics.has_ch4_voltage = true; + switch (sensorType) + { + case meshtastic_TelemetrySensorType_ADS1X15: + { + measurement->variant.power_metrics.has_ch1_voltage = true; + measurement->variant.power_metrics.has_ch2_voltage = true; + measurement->variant.power_metrics.has_ch3_voltage = true; + measurement->variant.power_metrics.has_ch4_voltage = true; - measurement->variant.power_metrics.ch1_voltage = m.measurements[0].voltage; - measurement->variant.power_metrics.ch2_voltage = m.measurements[1].voltage; - measurement->variant.power_metrics.ch3_voltage = m.measurements[2].voltage; - measurement->variant.power_metrics.ch4_voltage = m.measurements[3].voltage; + measurement->variant.power_metrics.ch1_voltage = m.measurements[0].voltage; + measurement->variant.power_metrics.ch2_voltage = m.measurements[1].voltage; + measurement->variant.power_metrics.ch3_voltage = m.measurements[2].voltage; + measurement->variant.power_metrics.ch4_voltage = m.measurements[3].voltage; + break; + } + case meshtastic_TelemetrySensorType_ADS1X15_ALT: + { + measurement->variant.power_metrics.has_ch5_voltage = true; + measurement->variant.power_metrics.has_ch6_voltage = true; + measurement->variant.power_metrics.has_ch7_voltage = true; + measurement->variant.power_metrics.has_ch8_voltage = true; + measurement->variant.power_metrics.ch5_voltage = m.measurements[0].voltage; + measurement->variant.power_metrics.ch6_voltage = m.measurements[1].voltage; + measurement->variant.power_metrics.ch7_voltage = m.measurements[2].voltage; + measurement->variant.power_metrics.ch8_voltage = m.measurements[3].voltage; + break; + } + default: + { + measurement->variant.power_metrics.has_ch1_voltage = true; + measurement->variant.power_metrics.has_ch2_voltage = true; + measurement->variant.power_metrics.has_ch3_voltage = true; + measurement->variant.power_metrics.has_ch4_voltage = true; + + measurement->variant.power_metrics.ch1_voltage = m.measurements[0].voltage; + measurement->variant.power_metrics.ch2_voltage = m.measurements[1].voltage; + measurement->variant.power_metrics.ch3_voltage = m.measurements[2].voltage; + measurement->variant.power_metrics.ch4_voltage = m.measurements[3].voltage; + break; + } + } return true; } diff --git a/src/modules/Telemetry/Sensor/ADS1X15Sensor.h b/src/modules/Telemetry/Sensor/ADS1X15Sensor.h index 469dab945..7ddd3d073 100644 --- a/src/modules/Telemetry/Sensor/ADS1X15Sensor.h +++ b/src/modules/Telemetry/Sensor/ADS1X15Sensor.h @@ -21,7 +21,7 @@ class ADS1X15Sensor : public TelemetrySensor virtual void setup() override; public: - ADS1X15Sensor(); + ADS1X15Sensor(meshtastic_TelemetrySensorType sensorType = meshtastic_TelemetrySensorType_ADS1X15); virtual int32_t runOnce() override; virtual bool getMetrics(meshtastic_Telemetry *measurement) override; };