From bc5e03226c22b0cd71e298bf2fdb86aa40c10f93 Mon Sep 17 00:00:00 2001 From: Jochen Vothknecht <jochen3120@gmail.com> Date: Tue, 3 Jul 2018 13:25:15 +0200 Subject: [PATCH] adding basic code / bme280 lib --- .gitmodules | 3 ++ components/esp32-bme280 | 1 + main/component.mk | 2 +- main/peripherals/sensors/bme280.cpp | 47 +++++++++++++++++++++++++++++ main/peripherals/sensors/bme280.h | 11 +++++++ main/qthing.h | 12 ++++++++ 6 files changed, 75 insertions(+), 1 deletion(-) create mode 160000 components/esp32-bme280 create mode 100644 main/peripherals/sensors/bme280.cpp create mode 100644 main/peripherals/sensors/bme280.h diff --git a/.gitmodules b/.gitmodules index 202aca1..bb365c3 100644 --- a/.gitmodules +++ b/.gitmodules @@ -20,3 +20,6 @@ [submodule "components/ESP32-Digital-RGB-LED-Drivers"] path = components/ESP32-Digital-RGB-LED-Drivers url = git@git.services.c3pb.de:c3pb/ESP32-Digital-RGB-LED-Drivers.git +[submodule "components/esp32-bme280"] + path = components/esp32-bme280 + url = git@git.services.c3pb.de:c3pb/esp32-bme280.git diff --git a/components/esp32-bme280 b/components/esp32-bme280 new file mode 160000 index 0000000..12ce1ee --- /dev/null +++ b/components/esp32-bme280 @@ -0,0 +1 @@ +Subproject commit 12ce1eee7a3bfa1746f1f4e7a78a034fc1b67d33 diff --git a/main/component.mk b/main/component.mk index f0bac74..4095bde 100644 --- a/main/component.mk +++ b/main/component.mk @@ -1,4 +1,4 @@ CXXFLAGS += -std=c++17 -COMPONENT_SRCDIRS := . device peripherals +COMPONENT_SRCDIRS := . device peripherals peripherals/sensors COMPONENT_ADD_INCLUDEDIRS := . \ No newline at end of file diff --git a/main/peripherals/sensors/bme280.cpp b/main/peripherals/sensors/bme280.cpp new file mode 100644 index 0000000..d27e4a4 --- /dev/null +++ b/main/peripherals/sensors/bme280.cpp @@ -0,0 +1,47 @@ +#include "bme280.h" + +static bool measured_started = false; + +typedef struct { + std::string topic; + BME280 bme280; + qthing::bme280_measure_callback_t callback; +} bme280_config_t; + +static bme280_config_t cfg; + +#include "esp_log.h" +static void measured(void *ignored) { + while (true) { + + bme280_reading_data data = cfg.bme280.readSensorData(); + + ESP_LOGE("BME280", "Temperature: %.2f°C, Humidity: %.2f%%, Pressure: %.2fPa\n", + (double) data.temperature, + (double) data.humidity, + (double) data.pressure + ); + + vTaskDelay(1000 / portTICK_PERIOD_MS); + } +} + +namespace qthing { + + void add_bme280(gpio_num_t sda, gpio_num_t scl, std::string topic, qthing::bme280_measure_callback_t callback, uint8_t address) { + BME280 bme280 = BME280(address); + bme280.setDebug(false); + bme280.init(sda, scl); + + cfg = { + topic, + bme280, + callback + }; + + if (!measured_started) { + measured_started = true; + xTaskCreate(measured, "bme280_measured", 10000, NULL, 1, NULL); + } + } +} diff --git a/main/peripherals/sensors/bme280.h b/main/peripherals/sensors/bme280.h new file mode 100644 index 0000000..6f2e0a9 --- /dev/null +++ b/main/peripherals/sensors/bme280.h @@ -0,0 +1,11 @@ +# pragma once + +#include <qthing.h> +#include <string> + +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" + +#include "driver/gpio.h" + +#include "BME280.h" diff --git a/main/qthing.h b/main/qthing.h index dc3123f..a4e3b86 100644 --- a/main/qthing.h +++ b/main/qthing.h @@ -94,6 +94,18 @@ namespace qthing { void add_ledstrip(gpio_num_t gpio, uint16_t num_leds, qthing::led_strip_types_t led_type); void set_color_handler(led_color_handler_t led_color_handler); void set_led_strip_fps(uint8_t fps); + + + // BME280 + typedef struct { + float temperature; + float humidity; + float pressure; + } bme280_data_t; + + typedef std::function<void(bme280_data_t)> bme280_measure_callback_t; + + void add_bme280(gpio_num_t sda, gpio_num_t scl, std::string topic, qthing::bme280_measure_callback_t callback, uint8_t address = 0x76); } // utility -- GitLab