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