Created
April 13, 2025 11:39
-
-
Save miathedev/ae9262903053a8769ebb7f0339775f42 to your computer and use it in GitHub Desktop.
Meshtastic Onewire patch
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From 14f33b1ebb5a8eec392efd085c2ecf88766be616 Mon Sep 17 00:00:00 2001 | |
From: Mia Metzler <[email protected]> | |
Date: Sun, 13 Apr 2025 13:38:10 +0200 | |
Subject: [PATCH] Add onewire | |
--- | |
platformio.ini | 1 + | |
.../Telemetry/EnvironmentTelemetry.cpp | 14 +++++- | |
.../Telemetry/Sensor/OnewireSensor.cpp | 45 +++++++++++++++++++ | |
src/modules/Telemetry/Sensor/OnewireSensor.h | 31 +++++++++++++ | |
4 files changed, 90 insertions(+), 1 deletion(-) | |
create mode 100644 src/modules/Telemetry/Sensor/OnewireSensor.cpp | |
create mode 100644 src/modules/Telemetry/Sensor/OnewireSensor.h | |
diff --git a/platformio.ini b/platformio.ini | |
index 1c51e53b..42c80f3e 100644 | |
--- a/platformio.ini | |
+++ b/platformio.ini | |
@@ -128,6 +128,7 @@ lib_deps = | |
https://github.com/meshtastic/DFRobot_LarkWeatherStation#4de3a9cadef0f6a5220a8a906cf9775b02b0040d | |
https://github.com/DFRobot/DFRobot_RainfallSensor#38fea5e02b40a5430be6dab39a99a6f6347d667e | |
robtillaart/[email protected] | |
+ milesburton/DallasTemperature@^4.0.4 | |
; Health Sensor Libraries | |
sparkfun/SparkFun MAX3010x Pulse and Proximity Sensor [email protected] | |
diff --git a/src/modules/Telemetry/EnvironmentTelemetry.cpp b/src/modules/Telemetry/EnvironmentTelemetry.cpp | |
index 6a5e8376..7e8f5033 100644 | |
--- a/src/modules/Telemetry/EnvironmentTelemetry.cpp | |
+++ b/src/modules/Telemetry/EnvironmentTelemetry.cpp | |
@@ -40,7 +40,8 @@ | |
#include "Sensor/SHTC3Sensor.h" | |
#include "Sensor/TSL2591Sensor.h" | |
#include "Sensor/VEML7700Sensor.h" | |
- | |
+#include "Sensor/OnewireSensor.h" | |
+OnewireSensor oneWireSensor; | |
BMP085Sensor bmp085Sensor; | |
BMP280Sensor bmp280Sensor; | |
BME280Sensor bme280Sensor; | |
@@ -115,6 +116,8 @@ int32_t EnvironmentTelemetryModule::runOnce() | |
#ifdef T1000X_SENSOR_EN | |
result = t1000xSensor.runOnce(); | |
#elif !MESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR_EXTERNAL | |
+ if (oneWireSensor.hasSensor()) //hasSensor doesnt work here, because it cant be found over i2c | |
+ result = oneWireSensor.runOnce(); | |
if (dfRobotLarkSensor.hasSensor()) | |
result = dfRobotLarkSensor.runOnce(); | |
if (dfRobotGravitySensor.hasSensor()) | |
@@ -458,6 +461,10 @@ bool EnvironmentTelemetryModule::getEnvironmentTelemetry(meshtastic_Telemetry *m | |
valid = valid && nau7802Sensor.getMetrics(m); | |
hasSensor = true; | |
} | |
+ if (true) { | |
+ valid = valid && oneWireSensor.getMetrics(m); | |
+ hasSensor = true; | |
+ } | |
if (aht10Sensor.hasSensor()) { | |
if (!bmp280Sensor.hasSensor() && !bmp3xxSensor.hasSensor()) { | |
valid = valid && aht10Sensor.getMetrics(m); | |
@@ -612,6 +619,11 @@ AdminMessageHandleResult EnvironmentTelemetryModule::handleAdminMessageForModule | |
if (result != AdminMessageHandleResult::NOT_HANDLED) | |
return result; | |
} | |
+ if (oneWireSensor.hasSensor()) { | |
+ result = oneWireSensor.handleAdminMessage(mp, request, response); | |
+ if (result != AdminMessageHandleResult::NOT_HANDLED) | |
+ return result; | |
+ } | |
if (bmp280Sensor.hasSensor()) { | |
result = bmp280Sensor.handleAdminMessage(mp, request, response); | |
if (result != AdminMessageHandleResult::NOT_HANDLED) | |
diff --git a/src/modules/Telemetry/Sensor/OnewireSensor.cpp b/src/modules/Telemetry/Sensor/OnewireSensor.cpp | |
new file mode 100644 | |
index 00000000..47d88dfb | |
--- /dev/null | |
+++ b/src/modules/Telemetry/Sensor/OnewireSensor.cpp | |
@@ -0,0 +1,45 @@ | |
+#include "configuration.h" | |
+ | |
+#if !MESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR | |
+ | |
+#include "../mesh/generated/meshtastic/telemetry.pb.h" | |
+#include "OnewireSensor.h" | |
+#include "TelemetrySensor.h" | |
+#include <Adafruit_BME280.h> | |
+#include <typeinfo> | |
+#include <OneWire.h> | |
+#include <DallasTemperature.h> | |
+ | |
+OnewireSensor::OnewireSensor() : TelemetrySensor(meshtastic_TelemetrySensorType_CUSTOM_SENSOR, "ONEWIRE") {} | |
+ | |
+ | |
+int32_t OnewireSensor::runOnce() | |
+{ | |
+ LOG_INFO("Init sensor: %s", sensorName); | |
+ //status = true; //Sensor found mock | |
+ oneWire = OneWire(oneWireBus); | |
+ sensors = DallasTemperature(&oneWire);sensors.begin(); | |
+ sensors.begin(); | |
+ status = sensors.getDeviceCount() > 0; | |
+ LOG_INFO("Onewire sensor init status: %d", status); | |
+ return initI2CSensor(); | |
+} | |
+ | |
+bool OnewireSensor::hasSensor() { | |
+ return true; | |
+} | |
+void OnewireSensor::setup() {} | |
+ | |
+bool OnewireSensor::getMetrics(meshtastic_Telemetry *measurement) | |
+{ | |
+ measurement->variant.environment_metrics.has_temperature = true; | |
+ | |
+ LOG_DEBUG("Onewire getMetrics"); | |
+ //Code to take a measurement | |
+ sensors.requestTemperatures(); | |
+ float temperatureC = sensors.getTempCByIndex(0); | |
+ measurement->variant.environment_metrics.temperature = temperatureC; | |
+ | |
+ return true; | |
+} | |
+#endif | |
\ No newline at end of file | |
diff --git a/src/modules/Telemetry/Sensor/OnewireSensor.h b/src/modules/Telemetry/Sensor/OnewireSensor.h | |
new file mode 100644 | |
index 00000000..84606d2f | |
--- /dev/null | |
+++ b/src/modules/Telemetry/Sensor/OnewireSensor.h | |
@@ -0,0 +1,31 @@ | |
+#include "configuration.h" | |
+ | |
+#if !MESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR | |
+ | |
+#include "../mesh/generated/meshtastic/telemetry.pb.h" | |
+#include "TelemetrySensor.h" | |
+#include <Adafruit_BME280.h> | |
+#include <OneWire.h> | |
+#include <DallasTemperature.h> | |
+ | |
+ | |
+class OnewireSensor : public TelemetrySensor | |
+{ | |
+ private: | |
+ Adafruit_BME280 bme280; | |
+ const int oneWireBus = 4; | |
+ OneWire oneWire; | |
+ DallasTemperature sensors; | |
+ | |
+ protected: | |
+ virtual void setup() override; | |
+ | |
+ | |
+ public: | |
+ OnewireSensor(); | |
+ virtual int32_t runOnce() override; | |
+ virtual bool getMetrics(meshtastic_Telemetry *measurement) override; | |
+ bool hasSensor(); | |
+}; | |
+ | |
+#endif | |
\ No newline at end of file | |
-- | |
2.49.0 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment