From c8877b3bc717b731caa36500f75e4f69f7d38b0f Mon Sep 17 00:00:00 2001 From: Florent Date: Sat, 31 May 2025 20:29:03 +0200 Subject: [PATCH 1/2] wio_e5 : bme280 support --- variants/wio-e5-mini/platformio.ini | 2 ++ variants/wio-e5-mini/target.cpp | 34 ++++++++++++++++++++++------- variants/wio-e5-mini/target.h | 15 ++++++++++++- 3 files changed, 42 insertions(+), 9 deletions(-) diff --git a/variants/wio-e5-mini/platformio.ini b/variants/wio-e5-mini/platformio.ini index 55ab0bc8..887304ea 100644 --- a/variants/wio-e5-mini/platformio.ini +++ b/variants/wio-e5-mini/platformio.ini @@ -10,6 +10,8 @@ build_flags = ${stm32_base.build_flags} -I variants/wio-e5-mini build_src_filter = ${stm32_base.build_src_filter} +<../variants/wio-e5-mini> +lib_deps = ${stm32_base.lib_deps} + finitespace/BME280 @ ^3.0.0 [env:wio-e5-mini-repeater] extends = lora_e5_mini diff --git a/variants/wio-e5-mini/target.cpp b/variants/wio-e5-mini/target.cpp index 8ccbe384..7a2b0d39 100644 --- a/variants/wio-e5-mini/target.cpp +++ b/variants/wio-e5-mini/target.cpp @@ -18,20 +18,15 @@ static const Module::RfSwitchMode_t rfswitch_table[] = { }; VolatileRTCClock rtc_clock; -SensorManager sensors; +BME280I2C bme; +WIOE5SensorManager sensors(bme); #ifndef LORA_CR #define LORA_CR 5 #endif bool radio_init() { -// rtc_clock.begin(Wire); - -// #ifdef SX126X_DIO3_TCXO_VOLTAGE -// float tcxo = SX126X_DIO3_TCXO_VOLTAGE; -// #else -// float tcxo = 1.6f; -// #endif + Wire.begin(); radio.setRfSwitchTable(rfswitch_pins, rfswitch_table); @@ -71,3 +66,26 @@ mesh::LocalIdentity radio_new_identity() { RadioNoiseListener rng(radio); return mesh::LocalIdentity(&rng); // create new random identity } + +bool WIOE5SensorManager::querySensors(uint8_t requester_permissions, CayenneLPP& telemetry) { + if (!has_bme) return false; + + float temp(NAN), hum(NAN), pres(NAN); + + BME280::TempUnit tempUnit(BME280::TempUnit_Celsius); + BME280::PresUnit presUnit(BME280::PresUnit_bar); + + _bme->read(pres, temp, hum, tempUnit, presUnit); + + telemetry.addTemperature(TELEM_CHANNEL_SELF, temp); + telemetry.addRelativeHumidity(TELEM_CHANNEL_SELF, hum); + telemetry.addBarometricPressure(TELEM_CHANNEL_SELF, pres); + + return true; +} + +bool WIOE5SensorManager::begin() { + has_bme = _bme->begin(); + + return has_bme; +} \ No newline at end of file diff --git a/variants/wio-e5-mini/target.h b/variants/wio-e5-mini/target.h index f7a882ee..daf7e174 100644 --- a/variants/wio-e5-mini/target.h +++ b/variants/wio-e5-mini/target.h @@ -8,6 +8,9 @@ #include #include +#include +#include + class WIOE5Board : public STM32Board { public: const char* getManufacturerName() const override { @@ -21,10 +24,20 @@ public: } }; +class WIOE5SensorManager : public SensorManager { + BME280I2C* _bme; + bool has_bme = false; + +public: + WIOE5SensorManager(BME280I2C& bme) : _bme(&bme) {} + bool begin() override; + bool querySensors(uint8_t requester_permissions, CayenneLPP& telemetry) override; +}; + extern WIOE5Board board; extern WRAPPER_CLASS radio_driver; extern VolatileRTCClock rtc_clock; -extern SensorManager sensors; +extern WIOE5SensorManager sensors; bool radio_init(); uint32_t radio_get_rng_seed(); From 4c6f146b8b913f4036aad3219f32efc98276ab2b Mon Sep 17 00:00:00 2001 From: Florent Date: Sun, 1 Jun 2025 08:30:53 +0200 Subject: [PATCH 2/2] wioe5: integrate sensor in sensor mgr --- src/helpers/stm32/InternalFileSystem.cpp | 7 +++++-- variants/wio-e5-mini/target.cpp | 9 ++++----- variants/wio-e5-mini/target.h | 4 ++-- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/helpers/stm32/InternalFileSystem.cpp b/src/helpers/stm32/InternalFileSystem.cpp index 2714ec6b..dc032eb9 100644 --- a/src/helpers/stm32/InternalFileSystem.cpp +++ b/src/helpers/stm32/InternalFileSystem.cpp @@ -126,11 +126,14 @@ InternalFileSystem::InternalFileSystem(void) bool InternalFileSystem::begin(void) { + volatile bool format_fs; #ifdef FORMAT_FS - this->format(); + format_fs = true; + #else + format_fs = false; // you can always use debugger to force formatting ;) #endif // failed to mount, erase all sector then format and mount again - if ( !Adafruit_LittleFS::begin() ) + if ( format_fs || !Adafruit_LittleFS::begin() ) { // lfs format this->format(); diff --git a/variants/wio-e5-mini/target.cpp b/variants/wio-e5-mini/target.cpp index 7a2b0d39..e3dd2ec7 100644 --- a/variants/wio-e5-mini/target.cpp +++ b/variants/wio-e5-mini/target.cpp @@ -18,8 +18,7 @@ static const Module::RfSwitchMode_t rfswitch_table[] = { }; VolatileRTCClock rtc_clock; -BME280I2C bme; -WIOE5SensorManager sensors(bme); +WIOE5SensorManager sensors; #ifndef LORA_CR #define LORA_CR 5 @@ -73,9 +72,9 @@ bool WIOE5SensorManager::querySensors(uint8_t requester_permissions, CayenneLPP& float temp(NAN), hum(NAN), pres(NAN); BME280::TempUnit tempUnit(BME280::TempUnit_Celsius); - BME280::PresUnit presUnit(BME280::PresUnit_bar); + BME280::PresUnit presUnit(BME280::PresUnit_hPa); - _bme->read(pres, temp, hum, tempUnit, presUnit); + bme.read(pres, temp, hum, tempUnit, presUnit); telemetry.addTemperature(TELEM_CHANNEL_SELF, temp); telemetry.addRelativeHumidity(TELEM_CHANNEL_SELF, hum); @@ -85,7 +84,7 @@ bool WIOE5SensorManager::querySensors(uint8_t requester_permissions, CayenneLPP& } bool WIOE5SensorManager::begin() { - has_bme = _bme->begin(); + has_bme = bme.begin(); return has_bme; } \ No newline at end of file diff --git a/variants/wio-e5-mini/target.h b/variants/wio-e5-mini/target.h index daf7e174..4b510d56 100644 --- a/variants/wio-e5-mini/target.h +++ b/variants/wio-e5-mini/target.h @@ -25,11 +25,11 @@ public: }; class WIOE5SensorManager : public SensorManager { - BME280I2C* _bme; + BME280I2C bme; bool has_bme = false; public: - WIOE5SensorManager(BME280I2C& bme) : _bme(&bme) {} + WIOE5SensorManager() {} bool begin() override; bool querySensors(uint8_t requester_permissions, CayenneLPP& telemetry) override; };