From 16b2498d6a32d5adb89951dae8a47549176bf7ba Mon Sep 17 00:00:00 2001 From: Dmitry Borisenko <49808844+DmitryBorisenko33@users.noreply.github.com> Date: Thu, 17 Sep 2020 22:49:55 +0300 Subject: [PATCH] bme 280 support --- data/items/bme280-hum.txt | 1 + data/items/bme280-press.txt | 1 + data/items/bme280-temp.txt | 1 + data/set.device.json | 5 +- include/Class/LineParsing.h | 8 +++ include/ItemsCmd.h | 9 ++- include/items/SensorAnalogClass.h | 10 +++- include/items/SensorBme280Class.h | 98 +++++++++++++++++-------------- include/items/SensorDhtClass.h | 1 + src/ItemsCmd.cpp | 5 +- src/items/SensorAnalogClass.cpp | 5 +- src/items/SensorBme280Class.cpp | 67 ++++++++++++++------- src/items/SensorDhtClass.cpp | 2 + 13 files changed, 139 insertions(+), 74 deletions(-) create mode 100644 data/items/bme280-hum.txt create mode 100644 data/items/bme280-press.txt create mode 100644 data/items/bme280-temp.txt diff --git a/data/items/bme280-hum.txt b/data/items/bme280-hum.txt new file mode 100644 index 00000000..fdd43613 --- /dev/null +++ b/data/items/bme280-hum.txt @@ -0,0 +1 @@ +bme280-hum;id;anydata;Сенсоры;Влажность;order;c[1] \ No newline at end of file diff --git a/data/items/bme280-press.txt b/data/items/bme280-press.txt new file mode 100644 index 00000000..a2adf9a3 --- /dev/null +++ b/data/items/bme280-press.txt @@ -0,0 +1 @@ +bme280-press;id;anydata;Сенсоры;Давление;order;c[1] \ No newline at end of file diff --git a/data/items/bme280-temp.txt b/data/items/bme280-temp.txt new file mode 100644 index 00000000..81599fb5 --- /dev/null +++ b/data/items/bme280-temp.txt @@ -0,0 +1 @@ +bme280-temp;id;anydata;Сенсоры;Температура;order;c[1] \ No newline at end of file diff --git a/data/set.device.json b/data/set.device.json index 3b829f05..01687169 100644 --- a/data/set.device.json +++ b/data/set.device.json @@ -68,7 +68,10 @@ "/set?addItem=dht11-temp": "11.Датчик температуры (DHT11)", "/set?addItem=dht11-hum": "12.Датчик влажности (DHT11)", "/set?addItem=dht22-temp": "13.Датчик температуры (DHT22, DHT33, DHT44, AM2302, RHT03)", - "/set?addItem=dht22-hum": "14.Датчик влажности (DHT22, DHT33, DHT44, AM2302, RHT03)" + "/set?addItem=dht22-hum": "14.Датчик влажности (DHT22, DHT33, DHT44, AM2302, RHT03)", + "/set?addItem=bme280-temp": "15.Датчик температуры bme280", + "/set?addItem=bme280-hum": "16.Датчик влажности bme280", + "/set?addItem=bme280-press": "17.Датчик давления bme280" } }, { diff --git a/include/Class/LineParsing.h b/include/Class/LineParsing.h index cae6765e..02b1d1ce 100644 --- a/include/Class/LineParsing.h +++ b/include/Class/LineParsing.h @@ -76,6 +76,9 @@ class LineParsing { if (arg.indexOf("type[") != -1) { _type = extractInner(arg); } + if (arg.indexOf("addr[") != -1) { + _addr = extractInner(arg); + } } } @@ -121,6 +124,10 @@ class LineParsing { String gtype() { return _type; } + String gaddr() { + return _addr; + } + void clear() { _key = ""; @@ -136,6 +143,7 @@ class LineParsing { _state = ""; _db = ""; _type = ""; + _addr = ""; } String extractInnerDigit(String str) { diff --git a/include/ItemsCmd.h b/include/ItemsCmd.h index c6eb6b0a..c799fbba 100644 --- a/include/ItemsCmd.h +++ b/include/ItemsCmd.h @@ -30,4 +30,11 @@ extern void dallasReading(); extern void dhtTemp(); extern void dhtReadingTemp(); extern void dhtHum(); -extern void dhtReadingHum(); \ No newline at end of file +extern void dhtReadingHum(); + +extern void bme280Temp(); +extern void bme280ReadingTemp(); +extern void bme280Hum(); +extern void bme280ReadingHum(); +extern void bme280Press(); +extern void bme280ReadingPress(); diff --git a/include/items/SensorAnalogClass.h b/include/items/SensorAnalogClass.h index e462a97e..59724c31 100644 --- a/include/items/SensorAnalogClass.h +++ b/include/items/SensorAnalogClass.h @@ -1,15 +1,21 @@ #pragma once #include + #include "Class/LineParsing.h" -#include "items/SensorConvertingClass.h" #include "Global.h" +#include "items/SensorConvertingClass.h" class SensorAnalogClass : public SensorConvertingClass { public: SensorAnalogClass() : SensorConvertingClass(){}; + void SensorAnalogInit() { + jsonWriteStr(configOptionJson, _key + "_pin", _pin); + jsonWriteStr(configOptionJson, _key + "_map", _map); + jsonWriteStr(configOptionJson, _key + "_с", _c); + } + int SensorAnalogRead(String key, String pin) { - int pinInt = pin.toInt(); int value; diff --git a/include/items/SensorBme280Class.h b/include/items/SensorBme280Class.h index 2660300d..a2074a11 100644 --- a/include/items/SensorBme280Class.h +++ b/include/items/SensorBme280Class.h @@ -1,45 +1,53 @@ -//#pragma once -//#include -//#include "Class/LineParsing.h" -//#include "Global.h" -//#include "items/SensorConvertingClass.h" -// -//class SensorBme280Class : public SensorConvertingClass { -// public: -// SensorBme280Class() : SensorConvertingClass(){}; -// -// void SensorBme280Init() { -// oneWire = new OneWire((uint8_t)_pin.toInt()); -// sensors.setOneWire(oneWire); -// sensors.begin(); -// sensors.setResolution(48); -// -// sensorReadingMap += _key + ","; -// //Bme280EnterCounter++; -// -// //jsonWriteInt(configOptionJson, _key + "_num", Bme280EnterCounter); -// jsonWriteStr(configOptionJson, _key + "_map", _map); -// jsonWriteStr(configOptionJson, _key + "_с", _c); -// } -// -// void SensorBme280Read(String key) { -// float value; -// byte num = sensors.getDS18Count(); -// sensors.requestTemperatures(); -// -// int cnt = jsonReadInt(configOptionJson, key + "_num"); -// -// for (byte i = 0; i < num; i++) { -// if (i == cnt) { -// value = sensors.getTempCByIndex(i); -// //value = this->mapping(key, value); -// float valueFl = this->correction(key, value); -// eventGen(key, ""); -// jsonWriteStr(configLiveJson, key, String(valueFl)); -// MqttClient::publishStatus(key, String(valueFl)); -// Serial.println("I sensor '" + key + "' data: " + String(valueFl)); -// } -// } -// } -//}; -//extern SensorBme280Class mySensorBme280; \ No newline at end of file +#pragma once +#include + +#include "Class/LineParsing.h" +#include "Global.h" +#include "items/SensorConvertingClass.h" + +Adafruit_BME280 bme; +Adafruit_Sensor *bme_temp = bme.getTemperatureSensor(); +Adafruit_Sensor *bme_pressure = bme.getPressureSensor(); +Adafruit_Sensor *bme_humidity = bme.getHumiditySensor(); + +class SensorBme280Class : public SensorConvertingClass { + public: + SensorBme280Class() : SensorConvertingClass(){}; + + void SensorBme280Init() { + bme.begin(hexStringToUint8(_addr)); + jsonWriteStr(configOptionJson, _key + "_map", _map); + jsonWriteStr(configOptionJson, _key + "_с", _c); + } + + void SensorBme280ReadTmp(String key) { + float value; + value = bme.readTemperature(); + float valueFl = this->correction(key, value); + eventGen(key, ""); + jsonWriteStr(configLiveJson, key, String(valueFl)); + MqttClient::publishStatus(key, String(valueFl)); + Serial.println("I sensor '" + key + "' data: " + String(valueFl)); + } + + void SensorBme280ReadHum(String key) { + float value; + value = bme.readHumidity(); + float valueFl = this->correction(key, value); + eventGen(key, ""); + jsonWriteStr(configLiveJson, key, String(valueFl)); + MqttClient::publishStatus(key, String(valueFl)); + Serial.println("I sensor '" + key + "' data: " + String(valueFl)); + } + + void SensorBme280ReadPress(String key) { + float value; + value = bme.readPressure(); + float valueFl = this->correction(key, value); + eventGen(key, ""); + jsonWriteStr(configLiveJson, key, String(valueFl)); + MqttClient::publishStatus(key, String(valueFl)); + Serial.println("I sensor '" + key + "' data: " + String(valueFl)); + } +}; +extern SensorBme280Class mySensorBme280; \ No newline at end of file diff --git a/include/items/SensorDhtClass.h b/include/items/SensorDhtClass.h index 0938f23e..3c9cb77a 100644 --- a/include/items/SensorDhtClass.h +++ b/include/items/SensorDhtClass.h @@ -4,6 +4,7 @@ #include "Class/LineParsing.h" #include "Global.h" #include "items/SensorConvertingClass.h" + DHTesp dht; class SensorDhtClass : public SensorConvertingClass { public: diff --git a/src/ItemsCmd.cpp b/src/ItemsCmd.cpp index 7ebc8f10..18104c6c 100644 --- a/src/ItemsCmd.cpp +++ b/src/ItemsCmd.cpp @@ -35,7 +35,10 @@ void cmd_init() { sCmd.addCommand("dht-temp", dhtTemp); sCmd.addCommand("dht-hum", dhtHum); - + + sCmd.addCommand("bme280-temp", bme280Temp); + sCmd.addCommand("bme280-hum", bme280Hum); + sCmd.addCommand("bme280-press", bme280Press); handle_time_init(); } diff --git a/src/items/SensorAnalogClass.cpp b/src/items/SensorAnalogClass.cpp index 103bd368..f7368ce6 100644 --- a/src/items/SensorAnalogClass.cpp +++ b/src/items/SensorAnalogClass.cpp @@ -8,12 +8,9 @@ SensorAnalogClass mySensorAnalog; void analogAdc() { mySensorAnalog.update(); String key = mySensorAnalog.gkey(); - String pin = mySensorAnalog.gpin(); sCmd.addCommand(key.c_str(), analogReading); sensorReadingMap += key + ","; - jsonWriteStr(configOptionJson, key + "_pin", pin); - jsonWriteStr(configOptionJson, key + "_map", mySensorAnalog.gmap()); - jsonWriteStr(configOptionJson, key + "_с", mySensorAnalog.gc()); + mySensorAnalog.SensorAnalogInit(); mySensorAnalog.clear(); } diff --git a/src/items/SensorBme280Class.cpp b/src/items/SensorBme280Class.cpp index f29d8d41..f07ae77e 100644 --- a/src/items/SensorBme280Class.cpp +++ b/src/items/SensorBme280Class.cpp @@ -1,20 +1,47 @@ -//#include "ItemsCmd.h" -//#include "items/SensorBme280Class.h" -////#ifdef SensorBme280Enabled -////=========================================Модуль ультрозвукового дальномера================================================================== -////Bme280-temp;id;anydata;Сенсоры;Температура;order;pin;c[1] -////========================================================================================================================================= -//SensorBme280Class mySensorBme280; -//void bme280Temp() { -// mySensorBme280.update(); -// String key = mySensorBme280.gkey(); -// sCmd.addCommand(key.c_str(), bme280Reading); -// mySensorBme280.SensorBme280Init(); -// mySensorBme280.clear(); -//} -// -//void bme280Reading() { -// String key = sCmd.order(); -// mySensorBme280.SensorBme280Read(key); -//} -////#endif \ No newline at end of file +#include "items/SensorBme280Class.h" + +#include "ItemsCmd.h" +//#ifdef SensorBme280Enabled +//=========================================Модуль ультрозвукового дальномера================================================================== +//bme280-temp;id;anydata;Сенсоры;Температура;order;c[1] +//bme280-hum;id;anydata;Сенсоры;Температура;order;c[1] +//bme280-press;id;anydata;Сенсоры;Температура;order;c[1] +//========================================================================================================================================= +SensorBme280Class mySensorBme280; + +void bme280Temp() { + mySensorBme280.update(); + String key = mySensorBme280.gkey(); + sCmd.addCommand(key.c_str(), bme280ReadingTemp); + mySensorBme280.SensorBme280Init(); + mySensorBme280.clear(); +} +void bme280ReadingTemp() { + String key = sCmd.order(); + mySensorBme280.SensorBme280ReadTmp(key); +} + +void bme280Hum() { + mySensorBme280.update(); + String key = mySensorBme280.gkey(); + sCmd.addCommand(key.c_str(), bme280ReadingHum); + mySensorBme280.SensorBme280Init(); + mySensorBme280.clear(); +} +void bme280ReadingHum() { + String key = sCmd.order(); + mySensorBme280.SensorBme280ReadHum(key); +} + +void bme280Press() { + mySensorBme280.update(); + String key = mySensorBme280.gkey(); + sCmd.addCommand(key.c_str(), bme280ReadingPress); + mySensorBme280.SensorBme280Init(); + mySensorBme280.clear(); +} +void bme280ReadingPress() { + String key = sCmd.order(); + mySensorBme280.SensorBme280ReadPress(key); +} +//#endif \ No newline at end of file diff --git a/src/items/SensorDhtClass.cpp b/src/items/SensorDhtClass.cpp index d323eebd..38363a8b 100644 --- a/src/items/SensorDhtClass.cpp +++ b/src/items/SensorDhtClass.cpp @@ -19,6 +19,8 @@ void dhtReadingTemp() { mySensorDht.SensorDhtReadTemp(key); } + + void dhtHum() { mySensorDht.update(); String key = mySensorDht.gkey();