From f37cc2a9c37b64a9844711546470c53d348951bf Mon Sep 17 00:00:00 2001 From: Jochen Vothknecht <jochen3120@gmail.com> Date: Tue, 3 Jul 2018 23:42:56 +0200 Subject: [PATCH] basic functionality working --- main/peripherals/sensors/bme280.cpp | 50 +++++++++++++++++++++++------ main/peripherals/sensors/bme280.h | 3 ++ main/qthing.h | 2 +- 3 files changed, 45 insertions(+), 10 deletions(-) diff --git a/main/peripherals/sensors/bme280.cpp b/main/peripherals/sensors/bme280.cpp index d27e4a4..b372222 100644 --- a/main/peripherals/sensors/bme280.cpp +++ b/main/peripherals/sensors/bme280.cpp @@ -8,21 +8,47 @@ typedef struct { qthing::bme280_measure_callback_t callback; } bme280_config_t; -static bme280_config_t cfg; +static std::vector<bme280_config_t> cfgs; #include "esp_log.h" static void measured(void *ignored) { + std::string topic; + while (true) { + vTaskDelay(1000 / portTICK_PERIOD_MS); - bme280_reading_data data = cfg.bme280.readSensorData(); + for (std::vector<bme280_config_t>::iterator it = cfgs.begin(); it != cfgs.end(); ++it) { + bme280_config_t cfg = *it; - ESP_LOGE("BME280", "Temperature: %.2f°C, Humidity: %.2f%%, Pressure: %.2fPa\n", - (double) data.temperature, - (double) data.humidity, - (double) data.pressure - ); + bme280_reading_data _data = cfg.bme280.readSensorData(); + qthing::bme280_data_t data = {_data.temperature, _data.humidity, _data.pressure}; - vTaskDelay(1000 / portTICK_PERIOD_MS); + if (is_mqtt_connected()) { + char tmp[16]; + + sprintf(tmp, "%0.2f", data.temperature); + topic = std::string(DEVICE_NAMESPACE) + cfg.topic + std::string("/temperature"); + publish_message(topic, tmp); + + sprintf(tmp, "%0.2f", data.humidity); + topic = std::string(DEVICE_NAMESPACE) + cfg.topic + std::string("/humidity"); + publish_message(topic, tmp); + + sprintf(tmp, "%0.2f", data.pressure); + topic = std::string(DEVICE_NAMESPACE) + cfg.topic + std::string("/pressure"); + publish_message(topic, tmp); + } + + if (cfg.callback != NULL) { + cfg.callback(data); + } + + ESP_LOGI((std::string("BME280[") + cfg.topic + std::string("]")).c_str(), "T: %.2f°C RH: %.2f%% P: %.2fPa", + data.temperature, + data.humidity, + data.pressure + ); + } } } @@ -33,15 +59,21 @@ namespace qthing { bme280.setDebug(false); bme280.init(sda, scl); - cfg = { + bme280_config_t cfg = { topic, bme280, callback }; + cfgs.push_back(cfg); + if (!measured_started) { measured_started = true; xTaskCreate(measured, "bme280_measured", 10000, NULL, 1, NULL); } } + + void add_bme280(gpio_num_t sda, gpio_num_t scl, std::string topic, uint8_t address) { + add_bme280(sda, scl, topic, NULL, address); + } } diff --git a/main/peripherals/sensors/bme280.h b/main/peripherals/sensors/bme280.h index 6f2e0a9..6d9265f 100644 --- a/main/peripherals/sensors/bme280.h +++ b/main/peripherals/sensors/bme280.h @@ -1,6 +1,9 @@ # pragma once #include <qthing.h> +#include "mqtt_common.h" + +#include <vector> #include <string> #include "freertos/FreeRTOS.h" diff --git a/main/qthing.h b/main/qthing.h index a4e3b86..ed07bc8 100644 --- a/main/qthing.h +++ b/main/qthing.h @@ -105,7 +105,7 @@ namespace qthing { 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); + void add_bme280(gpio_num_t sda, gpio_num_t scl, std::string topic, qthing::bme280_measure_callback_t callback = NULL, uint8_t address = 0x76); } // utility -- GitLab