Fixes on imports of Adafruit library, and ADS1x15 integration

This commit is contained in:
oscgonfer 2025-06-25 11:04:54 +02:00
parent 49b32debe4
commit cf39519c83
3 changed files with 40 additions and 15 deletions

View File

@ -22,7 +22,15 @@
#include "graphics/ScreenFonts.h" #include "graphics/ScreenFonts.h"
#include <Throttle.h> #include <Throttle.h>
#if __has_include(<Adafruit_ADS1015.h>) namespace graphics
{
extern void drawCommonHeader(OLEDDisplay *display, int16_t x, int16_t y, const char *titleStr);
}
#include "Sensor/nullSensor.h"
#if __has_include(<Adafruit_ADS1X15.h>)
#include "Sensor/ADS1X15Sensor.h" #include "Sensor/ADS1X15Sensor.h"
ADS1X15Sensor ads1x15Sensor; ADS1X15Sensor ads1x15Sensor;
#else #else
@ -49,8 +57,8 @@ int32_t PowerTelemetryModule::runOnce()
without having to configure it from the PythonAPI or WebUI. without having to configure it from the PythonAPI or WebUI.
*/ */
// moduleConfig.telemetry.power_measurement_enabled = 1; moduleConfig.telemetry.power_measurement_enabled = 1;
// moduleConfig.telemetry.power_screen_enabled = 1; moduleConfig.telemetry.power_screen_enabled = 1;
// moduleConfig.telemetry.power_update_interval = 45; // moduleConfig.telemetry.power_update_interval = 45;
if (!(moduleConfig.telemetry.power_measurement_enabled)) { if (!(moduleConfig.telemetry.power_measurement_enabled)) {
@ -83,6 +91,9 @@ int32_t PowerTelemetryModule::runOnce()
result = max17048Sensor.isInitialized() ? 0 : max17048Sensor.runOnce(); result = max17048Sensor.isInitialized() ? 0 : max17048Sensor.runOnce();
if (ads1x15Sensor.hasSensor()) if (ads1x15Sensor.hasSensor())
result = ads1x15Sensor.isInitialized() ? 0 : ads1x15Sensor.runOnce(); result = ads1x15Sensor.isInitialized() ? 0 : ads1x15Sensor.runOnce();
if (!ads1x15Sensor.hasSensor()) {
LOG_INFO("ADS1X15 not found");
}
} }
// it's possible to have this module enabled, only for displaying values on the screen. // it's possible to have this module enabled, only for displaying values on the screen.
@ -215,6 +226,7 @@ bool PowerTelemetryModule::getPowerTelemetry(meshtastic_Telemetry *m)
if (max17048Sensor.hasSensor()) if (max17048Sensor.hasSensor())
valid = max17048Sensor.getMetrics(m); valid = max17048Sensor.getMetrics(m);
if (ads1x15Sensor.hasSensor()) if (ads1x15Sensor.hasSensor())
LOG_INFO("Getting ADS1X15 sensor");
valid = ads1x15Sensor.getMetrics(m); valid = ads1x15Sensor.getMetrics(m);
#endif #endif

View File

@ -1,11 +1,11 @@
#include "configuration.h" #include "configuration.h"
#if HAS_TELEMETRY && !MESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR && __has_include(<Adafruit_ADS1015.h>) #if HAS_TELEMETRY && !MESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR && __has_include(<Adafruit_ADS1X15.h>)
#include "../mesh/generated/meshtastic/telemetry.pb.h" #include "../mesh/generated/meshtastic/telemetry.pb.h"
#include "ADS1X15Sensor.h" #include "ADS1X15Sensor.h"
#include "TelemetrySensor.h" #include "TelemetrySensor.h"
#include <Adafruit_ADS1015.h> #include <Adafruit_ADS1X15.h>
ADS1X15Sensor::ADS1X15Sensor() : TelemetrySensor(meshtastic_TelemetrySensorType_ADS1X15, "ADS1X15") {} ADS1X15Sensor::ADS1X15Sensor() : TelemetrySensor(meshtastic_TelemetrySensorType_ADS1X15, "ADS1X15") {}
@ -23,7 +23,7 @@ int32_t ADS1X15Sensor::runOnce()
void ADS1X15Sensor::setup() {} void ADS1X15Sensor::setup() {}
struct _ADS1X15Measurement ADS1X15Sensor::getMeasurement(ads1x15_ch_t ch) struct _ADS1X15Measurement ADS1X15Sensor::getMeasurement(uint8_t ch)
{ {
struct _ADS1X15Measurement measurement; struct _ADS1X15Measurement measurement;
@ -32,7 +32,7 @@ struct _ADS1X15Measurement ADS1X15Sensor::getMeasurement(ads1x15_ch_t ch)
double voltage_range = 6.144; double voltage_range = 6.144;
// Get value with full range // Get value with full range
uint16_t value = ads.readADC_SingleEnded(ch); uint16_t value = ads1x15.readADC_SingleEnded(ch);
// Dynamic gain, to increase resolution of low voltage values // Dynamic gain, to increase resolution of low voltage values
// If value is under 4.096v increase the gain depending on voltage // If value is under 4.096v increase the gain depending on voltage
@ -72,8 +72,7 @@ struct _ADS1X15Measurement ADS1X15Sensor::getMeasurement(ads1x15_ch_t ch)
value = ads1x15.readADC_SingleEnded(ch); value = ads1x15.readADC_SingleEnded(ch);
} }
reading = (float)value / 32768 * voltage_range; measurement.voltage = (float)value / 32768 * voltage_range;
measurement.voltage = reading;
return measurement; return measurement;
} }
@ -84,7 +83,7 @@ struct _ADS1X15Measurements ADS1X15Sensor::getMeasurements()
// ADS1X15 has 4 channels starting from 0 // ADS1X15 has 4 channels starting from 0
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
measurements.measurements[i] = getMeasurement((ads1x15_ch_t)i); measurements.measurements[i] = getMeasurement(i);
} }
return measurements; return measurements;

View File

@ -1,16 +1,21 @@
#include "configuration.h" #include "configuration.h"
#if HAS_TELEMETRY && !MESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR && __has_include(<Adafruit_ADS1015.h>) #if HAS_TELEMETRY && !MESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR && __has_include(<Adafruit_ADS1X15.h>)
#include "../mesh/generated/meshtastic/telemetry.pb.h" #include "../mesh/generated/meshtastic/telemetry.pb.h"
#include "TelemetrySensor.h" #include "TelemetrySensor.h"
#include "VoltageSensor.h" #include <Adafruit_ADS1X15.h>
#include <Adafruit_ADS1015.h>
class ADS1X15Sensor : public TelemetrySensor, VoltageSensor class ADS1X15Sensor : public TelemetrySensor
{ {
private: private:
Adafruit_ADS1015 ads1x15; Adafruit_ADS1X15 ads1x15;
// get a single measurement for a channel
struct _ADS1X15Measurement getMeasurement(uint8_t ch);
// get all measurements for all channels
struct _ADS1X15Measurements getMeasurements();
protected: protected:
virtual void setup() override; virtual void setup() override;
@ -21,4 +26,13 @@ class ADS1X15Sensor : public TelemetrySensor, VoltageSensor
virtual bool getMetrics(meshtastic_Telemetry *measurement) override; virtual bool getMetrics(meshtastic_Telemetry *measurement) override;
}; };
struct _ADS1X15Measurement {
float voltage;
};
struct _ADS1X15Measurements {
// ADS1X15 has 4 channels
struct _ADS1X15Measurement measurements[4];
};
#endif #endif