From fae3c284d3491da77564e2e158fbbd149864db9c Mon Sep 17 00:00:00 2001 From: Florent Date: Sun, 31 Aug 2025 18:09:05 +0200 Subject: [PATCH] techo: use EnvironmentSensor to get BME280 data --- variants/techo/platformio.ini | 8 ++++ variants/techo/target.cpp | 84 +++-------------------------------- variants/techo/target.h | 20 +-------- 3 files changed, 17 insertions(+), 95 deletions(-) diff --git a/variants/techo/platformio.ini b/variants/techo/platformio.ini index 76712178..e5cfacd4 100644 --- a/variants/techo/platformio.ini +++ b/variants/techo/platformio.ini @@ -22,13 +22,21 @@ build_flags = ${nrf52840_techo.build_flags} -D SX126X_CURRENT_LIMIT=140 -D SX126X_RX_BOOSTED_GAIN=1 -D P_LORA_TX_LED=LED_GREEN + -D DISABLE_DIAGNOSTIC_OUTPUT + -D ENV_INCLUDE_GPS=1 + -D ENV_INCLUDE_BME280=1 + -D GPS_BAUD_RATE=9600 + -D PIN_GPS_EN=GPS_EN + -D TELEM_BME280_ADDRESS=0x77 build_src_filter = ${nrf52840_techo.build_src_filter} + + + + +<../variants/techo> lib_deps = ${nrf52840_techo.lib_deps} stevemarple/MicroNMEA @ ^2.0.6 + adafruit/Adafruit BME280 Library @ ^2.3.0 debug_tool = jlink upload_protocol = nrfutil diff --git a/variants/techo/target.cpp b/variants/techo/target.cpp index 9a10491d..be9a698d 100644 --- a/variants/techo/target.cpp +++ b/variants/techo/target.cpp @@ -11,8 +11,14 @@ WRAPPER_CLASS radio_driver(radio, board); VolatileRTCClock fallback_clock; AutoDiscoverRTCClock rtc_clock(fallback_clock); + +#ifdef ENV_INCLUDE_GPS MicroNMEALocationProvider nmea = MicroNMEALocationProvider(Serial1); -TechoSensorManager sensors = TechoSensorManager(nmea); +EnvironmentSensorManager sensors = EnvironmentSensorManager(nmea); +#else +EnvironmentSensorManager sensors = EnvironmentSensorManager(); +#endif + #ifdef DISPLAY_CLASS DISPLAY_CLASS display; @@ -45,79 +51,3 @@ mesh::LocalIdentity radio_new_identity() { return mesh::LocalIdentity(&rng); // create new random identity } -void TechoSensorManager::start_gps() { - if (!gps_active) { - gps_active = true; - _location->begin(); - } -} - -void TechoSensorManager::stop_gps() { - if (gps_active) { - gps_active = false; - _location->stop(); - } -} - -bool TechoSensorManager::begin() { - Serial1.begin(9600); - - // GPS enabled pin - pinMode(GPS_EN, OUTPUT); - - return true; -} - -bool TechoSensorManager::querySensors(uint8_t requester_permissions, CayenneLPP& telemetry) { - if (requester_permissions & TELEM_PERM_LOCATION) { // does requester have permission? - telemetry.addGPS(TELEM_CHANNEL_SELF, node_lat, node_lon, node_altitude); - } - return true; -} - -void TechoSensorManager::loop() { - static long next_gps_update = 0; - - if (!gps_active) { - return; // GPS is not active, skip further processing - } - - _location->loop(); - - if (millis() > next_gps_update) { - if (_location->isValid()) { - node_lat = ((double)_location->getLatitude())/1000000.; - node_lon = ((double)_location->getLongitude())/1000000.; - node_altitude = ((double)_location->getAltitude()) / 1000.0; - MESH_DEBUG_PRINTLN("lat %f lon %f", node_lat, node_lon); - } - next_gps_update = millis() + 1000; - } -} - -int TechoSensorManager::getNumSettings() const { - return 1; // always show GPS setting -} - -const char* TechoSensorManager::getSettingName(int i) const { - return (i == 0) ? "gps" : NULL; -} - -const char* TechoSensorManager::getSettingValue(int i) const { - if (i == 0) { - return gps_active ? "1" : "0"; - } - return NULL; -} - -bool TechoSensorManager::setSettingValue(const char* name, const char* value) { - if (strcmp(name, "gps") == 0) { - if (strcmp(value, "0") == 0) { - stop_gps(); - } else { - start_gps(); - } - return true; - } - return false; // not supported -} diff --git a/variants/techo/target.h b/variants/techo/target.h index 58fba687..134f13b5 100644 --- a/variants/techo/target.h +++ b/variants/techo/target.h @@ -7,33 +7,17 @@ #include #include #include +#include #include #ifdef DISPLAY_CLASS #include #include #endif -class TechoSensorManager : public SensorManager { - bool gps_active = false; - LocationProvider* _location; - - void start_gps(); - void stop_gps(); -public: - TechoSensorManager(LocationProvider &location): _location(&location) { } - bool begin() override; - bool querySensors(uint8_t requester_permissions, CayenneLPP& telemetry) override; - void loop() override; - int getNumSettings() const override; - const char* getSettingName(int i) const override; - const char* getSettingValue(int i) const override; - bool setSettingValue(const char* name, const char* value) override; -}; - extern TechoBoard board; extern WRAPPER_CLASS radio_driver; extern AutoDiscoverRTCClock rtc_clock; -extern TechoSensorManager sensors; +extern EnvironmentSensorManager sensors; #ifdef DISPLAY_CLASS extern DISPLAY_CLASS display;