mirror of
https://github.com/meshtastic/firmware.git
synced 2025-07-30 02:15:41 +00:00
Add additional ADS1X15 to support daisy chaining
This commit is contained in:
parent
cf39519c83
commit
1f424a7f82
@ -76,6 +76,7 @@ class ScanI2C
|
||||
PCT2075,
|
||||
BMM150,
|
||||
ADS1X15,
|
||||
ADS1X15_ALT,
|
||||
} DeviceType;
|
||||
|
||||
// typedef uint8_t DeviceAddress;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
||||
|
@ -33,8 +33,10 @@ extern void drawCommonHeader(OLEDDisplay *display, int16_t x, int16_t y, const c
|
||||
#if __has_include(<Adafruit_ADS1X15.h>)
|
||||
#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,
|
||||
|
@ -7,7 +7,7 @@
|
||||
#include "TelemetrySensor.h"
|
||||
#include <Adafruit_ADS1X15.h>
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user