From 9308cca8987484d63ed66a3a77a6973fe1269c66 Mon Sep 17 00:00:00 2001 From: andreas Date: Sat, 28 Oct 2023 20:25:00 +0200 Subject: [PATCH] intermediate: read BME280 --- lib/iictask/GwIicTask.cpp | 46 ++++++++++++++++++++++++++++++++++++++ lib/iictask/platformio.ini | 12 ++++++++-- platformio.ini | 6 +++++ 3 files changed, 62 insertions(+), 2 deletions(-) diff --git a/lib/iictask/GwIicTask.cpp b/lib/iictask/GwIicTask.cpp index 4949852..00a119a 100644 --- a/lib/iictask/GwIicTask.cpp +++ b/lib/iictask/GwIicTask.cpp @@ -7,6 +7,7 @@ #include "N2kMessages.h" #include "GwHardware.h" #include "GwXdrTypeMappings.h" +#include //#define GWSHT3X -1 #ifndef GWIIC_SDA @@ -55,6 +56,16 @@ class QMP6988Config{ offset=config->getInt(GwConfigDefinitions::QMP6988POffset); } }; + +class BME280Config{ + public: + bool active=true; + int iid=99; + long interval=2000; + BME280Config(GwConfigHandler *config){ + + } +}; void runIicTask(GwApi *api); void initIicTask(GwApi *api){ GwLog *logger=api->getLogger(); @@ -113,6 +124,17 @@ void initIicTask(GwApi *api){ LOG_DEBUG(GwLog::LOG,"QMP6988 configured but disabled"); } #endif + #ifdef GWBME280 + api->addCapability("BME280","true"); + BME280Config bme280Config(api->getConfig()); + if (bme280Config.active){ + LOG_DEBUG(GwLog::DEBUG,"BME280 configured and active, adding capability and xdr mapping"); + addTask=true; + } + else{ + LOG_DEBUG(GwLog::DEBUG,"BME280 configured but disabled"); + } + #endif if (addTask){ api->addUserTask(runIicTask,"iicTask",3000); } @@ -191,6 +213,30 @@ void runIicTask(GwApi *api){ }); } #endif + #ifdef GWBME280 + int baddr=GWBME280; + if (baddr < 0) baddr=0x76; + BME280Config bme280Config(api->getConfig()); + if (bme280Config.active){ + Adafruit_BME280 *bme280=new Adafruit_BME280(); + if (bme280->begin(baddr,&Wire)){ + uint32_t sensorId=bme280->sensorID(); + bool hasHumidity=sensorId == 0x60; //BME280, else BMP280 + LOG_DEBUG(GwLog::LOG,"initialized BME280 at %d, sensorId 0x%x",baddr,sensorId); + timers.addAction(bme280Config.interval,[logger,api,bme280,bme280Config,counterId,hasHumidity](){ + float pressure=bme280->readPressure(); + float temperature=bme280->readTemperature(); + float humidity=-1; + if (hasHumidity) humidity=bme280->readHumidity(); + LOG_DEBUG(GwLog::DEBUG,"BME280 read press=%.0f, temp=%.1f, humid=%02.0f",pressure,temperature,humidity); + }); + runLoop=true; + } + else{ + LOG_DEBUG(GwLog::ERROR,"unable to initialize BME280 sensor at address %d",baddr); + } + } + #endif if (! runLoop){ LOG_DEBUG(GwLog::LOG,"nothing to do for IIC task, finish"); vTaskDelete(NULL); diff --git a/lib/iictask/platformio.ini b/lib/iictask/platformio.ini index 626c358..5940b4e 100644 --- a/lib/iictask/platformio.ini +++ b/lib/iictask/platformio.ini @@ -8,5 +8,13 @@ build_flags= -D M5_ENV3 -D M5_CAN_KIT ${env.build_flags} -upload_port = /dev/esp32 -upload_protocol = esptool \ No newline at end of file + +[env:m5stack-atom-bme280] +board = m5stack-atom +lib_deps = + ${env.lib_deps} +build_flags= + -D GWBME280=-1 + -D M5_GROOVEIIC + -D M5_CAN_KIT + ${env.build_flags} diff --git a/platformio.ini b/platformio.ini index 4283ed7..893151f 100644 --- a/platformio.ini +++ b/platformio.ini @@ -34,6 +34,12 @@ lib_deps = WiFi Update Wire + SPI + adafruit/Adafruit BME280 Library @ 2.2.2 + adafruit/Adafruit BusIO @ 1.14.5 + adafruit/Adafruit Unified Sensor @ 1.1.13 + + board_build.embed_files = lib/generated/index.html.gz lib/generated/index.js.gz