Add DHT sensor

This commit is contained in:
Dmitry Borisenko
2020-09-04 15:35:35 +03:00
parent 26b5c173a2
commit a258c8c1b6
23 changed files with 402 additions and 311 deletions

View File

@@ -33,6 +33,9 @@ void cmd_init() {
sCmd.addCommand("ultrasonic-cm", ultrasonicCm);
sCmd.addCommand("dallas-temp", dallasTemp);
sCmd.addCommand("dht-temp", dhtTemp);
sCmd.addCommand("dht-hum", dhtHum);
@@ -42,13 +45,13 @@ void cmd_init() {
sCmd.addCommand("timerStart", timerStart_);
sCmd.addCommand("timerStop", timerStop_);
#ifdef DHT_ENABLED
sCmd.addCommand("dhtT", dhtT);
sCmd.addCommand("dhtH", dhtH);
sCmd.addCommand("dhtPerception", dhtP);
sCmd.addCommand("dhtComfort", dhtC);
sCmd.addCommand("dhtDewpoint", dhtD);
#endif
//#ifdef DHT_ENABLED
// sCmd.addCommand("dhtT", dhtT);
// sCmd.addCommand("dhtH", dhtH);
// sCmd.addCommand("dhtPerception", dhtP);
// sCmd.addCommand("dhtComfort", dhtC);
// sCmd.addCommand("dhtDewpoint", dhtD);
//#endif
#ifdef BMP_ENABLED
sCmd.addCommand("bmp280T", bmp280T);

View File

@@ -7,16 +7,18 @@ static const char* firstLine PROGMEM = "Тип элемента;Id;Виджет;
void addItem(String name) {
String item = readFile("items/" + name + ".txt", 1024);
name = deleteToMarkerLast(name, "-");
item.replace("id", name + String(getNewElementNumber("id.txt")));
item.replace("id", name + "-" + String(getNewElementNumber("id.txt")));
item.replace("order", String(getNewElementNumber("order.txt")));
if (item.indexOf("pin") != -1) { //all cases
if (item.indexOf("pin") != -1) { //all cases (random pins from available)
item.replace("pin", "pin[" + String(getFreePinAll()) + "]");
} else if (item.indexOf("gol") != -1) { //analog
item.replace("gol", "pin[" + String(getFreePinAnalog()) + "]");
} else if (item.indexOf("cin") != -1) { //ultrasonic
item.replace("cin", "pin[" + String(getFreePinAll()) + "," + String(getFreePinAll()) + "]");
} else if (item.indexOf("sal") != -1) { //dallas
} else if (item.indexOf("sal") != -1) { //dallas
item.replace("sal", "pin[2]");
} else if (item.indexOf("thd") != -1) { //dht11/22
item.replace("thd", "pin[2]");
}
item.replace("\r\n", "");

View File

@@ -2,7 +2,7 @@
#include "Global.h"
GMedian<10, int> medianFilter;
DHTesp dht;
//DHTesp dht;
Adafruit_BMP280 bmp;
Adafruit_Sensor *bmp_temp = bmp.getTemperatureSensor();
@@ -33,225 +33,225 @@ void sensorsInit() {
//=========================================================================================================================================
//=========================================Модуль сенсоров DHT=============================================================================
#ifdef DHT_ENABLED
//dhtT t 2 dht11 Температура#DHT,#t°C Датчики any-data 1
void dhtT() {
String value_name = sCmd.next();
String pin = sCmd.next();
String sensor_type = sCmd.next();
String widget_name = sCmd.next();
String page_name = sCmd.next();
String type = sCmd.next();
String page_number = sCmd.next();
//dhtT_value_name = value_name;
if (sensor_type == "dht11") {
dht.setup(pin.toInt(), DHTesp::DHT11);
}
if (sensor_type == "dht22") {
dht.setup(pin.toInt(), DHTesp::DHT22);
}
createWidgetByType(widget_name, page_name, page_number, type, value_name);
//sensors_reading_map[4] = 1;
}
void dhtT_reading() {
float value = 0;
static int counter;
if (dht.getStatus() != 0 && counter < 5) {
//MqttClient::publishStatus(dhtT_value_name, String(dht.getStatusString()));
counter++;
} else {
counter = 0;
value = dht.getTemperature();
if (String(value) != "nan") {
//eventGen(dhtT_value_name, "");
//jsonWriteStr(configLiveJson, dhtT_value_name, String(value));
//MqttClient::publishStatus(dhtT_value_name, String(value));
//Serial.println("[I] sensor '" + dhtT_value_name + "' data: " + String(value));
}
}
}
//dhtH h 2 dht11 Влажность#DHT,#t°C Датчики any-data 1
void dhtH() {
String value_name = sCmd.next();
String pin = sCmd.next();
String sensor_type = sCmd.next();
String widget_name = sCmd.next();
String page_name = sCmd.next();
String type = sCmd.next();
String page_number = sCmd.next();
//dhtH_value_name = value_name;
if (sensor_type == "dht11") {
dht.setup(pin.toInt(), DHTesp::DHT11);
}
if (sensor_type == "dht22") {
dht.setup(pin.toInt(), DHTesp::DHT22);
}
createWidgetByType(widget_name, page_name, page_number, type, value_name);
//sensors_reading_map[5] = 1;
}
void dhtH_reading() {
float value = 0;
static int counter;
if (dht.getStatus() != 0 && counter < 5) {
//MqttClient::publishStatus(dhtH_value_name, String(dht.getStatusString()));
counter++;
} else {
counter = 0;
value = dht.getHumidity();
if (String(value) != "nan") {
//eventGen(dhtH_value_name, "");
//jsonWriteStr(configLiveJson, dhtH_value_name, String(value));
//MqttClient::publishStatus(dhtH_value_name, String(value));
//Serial.println("[I] sensor '" + dhtH_value_name + "' data: " + String(value));
}
}
}
//dhtPerception Восприятие: Датчики 4
void dhtP() {
String widget_name = sCmd.next();
String page_name = sCmd.next();
String page_number = sCmd.next();
createWidgetByType(widget_name, page_name, page_number, "any-data", "dhtPerception");
//sensors_reading_map[6] = 1;
}
void dhtP_reading() {
byte value;
if (dht.getStatus() != 0) {
MqttClient::publishStatus("dhtPerception", String(dht.getStatusString()));
} else {
//value = dht.computePerception(jsonReadStr(configLiveJson, dhtT_value_name).toFloat(), jsonReadStr(configLiveJson, dhtH_value_name).toFloat(), false);
String final_line = perceptionStr(value);
jsonWriteStr(configLiveJson, "dhtPerception", final_line);
eventGen("dhtPerception", "");
MqttClient::publishStatus("dhtPerception", final_line);
if (mqtt.connected()) {
Serial.println("[I] sensor 'dhtPerception' data: " + final_line);
}
}
}
//dhtComfort Степень#комфорта: Датчики 3
void dhtC() {
String widget_name = sCmd.next();
String page_name = sCmd.next();
String page_number = sCmd.next();
createWidgetByType(widget_name, page_name, page_number, "anydata", "dhtComfort");
//sensors_reading_map[7] = 1;
}
void dhtC_reading() {
ComfortState cf;
if (dht.getStatus() != 0) {
MqttClient::publishStatus("dhtComfort", String(dht.getStatusString()));
} else {
//dht.getComfortRatio(cf, jsonReadStr(configLiveJson, dhtT_value_name).toFloat(), jsonReadStr(configLiveJson, dhtH_value_name).toFloat(), false);
String final_line = comfortStr(cf);
jsonWriteStr(configLiveJson, "dhtComfort", final_line);
eventGen("dhtComfort", "");
MqttClient::publishStatus("dhtComfort", final_line);
Serial.println("[I] sensor 'dhtComfort' send date " + final_line);
}
}
const String perceptionStr(byte value) {
String res;
switch (value) {
case 0:
res = F("Сухой воздух");
break;
case 1:
res = F("Комфортно");
break;
case 2:
res = F("Уютно");
break;
case 3:
res = F("Хорошо");
break;
case 4:
res = F("Неудобно");
break;
case 5:
res = F("Довольно неудобно");
break;
case 6:
res = F("Очень неудобно");
break;
case 7:
res = F("Невыносимо");
default:
res = F("Unknown");
break;
}
return res;
}
const String comfortStr(ComfortState value) {
String res;
switch (value) {
case Comfort_OK:
res = F("Отлично");
break;
case Comfort_TooHot:
res = F("Очень жарко");
break;
case Comfort_TooCold:
res = F("Очень холодно");
break;
case Comfort_TooDry:
res = F("Очень сухо");
break;
case Comfort_TooHumid:
res = F("Очень влажно");
break;
case Comfort_HotAndHumid:
res = F("Жарко и влажно");
break;
case Comfort_HotAndDry:
res = F("Жарко и сухо");
break;
case Comfort_ColdAndHumid:
res = F("Холодно и влажно");
break;
case Comfort_ColdAndDry:
res = F("Холодно и сухо");
break;
default:
res = F("Неизвестно");
break;
};
return res;
}
//dhtDewpoint Точка#росы: Датчики 5
void dhtD() {
String widget_name = sCmd.next();
String page_name = sCmd.next();
String page_number = sCmd.next();
createWidgetByType(widget_name, page_name, page_number, "anydata", "dhtDewpoint");
//sensors_reading_map[8] = 1;
}
void dhtD_reading() {
float value;
if (dht.getStatus() != 0) {
MqttClient::publishStatus("dhtDewpoint", String(dht.getStatusString()));
} else {
//value = dht.computeDewPoint(jsonReadStr(configLiveJson, dhtT_value_name).toFloat(), jsonReadStr(configLiveJson, dhtH_value_name).toFloat(), false);
jsonWriteInt(configLiveJson, "dhtDewpoint", value);
eventGen("dhtDewpoint", "");
MqttClient::publishStatus("dhtDewpoint", String(value));
Serial.println("[I] sensor 'dhtDewpoint' data: " + String(value));
}
}
#endif
////=========================================================================================================================================
////=========================================Модуль сенсоров DHT=============================================================================
//#ifdef DHT_ENABLED
////dhtT t 2 dht11 Температура#DHT,#t°C Датчики any-data 1
//void dhtT() {
// String value_name = sCmd.next();
// String pin = sCmd.next();
// String sensor_type = sCmd.next();
// String widget_name = sCmd.next();
// String page_name = sCmd.next();
// String type = sCmd.next();
// String page_number = sCmd.next();
// //dhtT_value_name = value_name;
// if (sensor_type == "dht11") {
// dht.setup(pin.toInt(), DHTesp::DHT11);
// }
// if (sensor_type == "dht22") {
// dht.setup(pin.toInt(), DHTesp::DHT22);
// }
// createWidgetByType(widget_name, page_name, page_number, type, value_name);
// //sensors_reading_map[4] = 1;
//}
//
//void dhtT_reading() {
// float value = 0;
// static int counter;
// if (dht.getStatus() != 0 && counter < 5) {
// //MqttClient::publishStatus(dhtT_value_name, String(dht.getStatusString()));
// counter++;
// } else {
// counter = 0;
// value = dht.getTemperature();
// if (String(value) != "nan") {
// //eventGen(dhtT_value_name, "");
// //jsonWriteStr(configLiveJson, dhtT_value_name, String(value));
// //MqttClient::publishStatus(dhtT_value_name, String(value));
// //Serial.println("[I] sensor '" + dhtT_value_name + "' data: " + String(value));
// }
// }
//}
//
////dhtH h 2 dht11 Влажность#DHT,#t°C Датчики any-data 1
//void dhtH() {
// String value_name = sCmd.next();
// String pin = sCmd.next();
// String sensor_type = sCmd.next();
// String widget_name = sCmd.next();
// String page_name = sCmd.next();
// String type = sCmd.next();
// String page_number = sCmd.next();
// //dhtH_value_name = value_name;
// if (sensor_type == "dht11") {
// dht.setup(pin.toInt(), DHTesp::DHT11);
// }
// if (sensor_type == "dht22") {
// dht.setup(pin.toInt(), DHTesp::DHT22);
// }
// createWidgetByType(widget_name, page_name, page_number, type, value_name);
// //sensors_reading_map[5] = 1;
//}
//
//void dhtH_reading() {
// float value = 0;
// static int counter;
// if (dht.getStatus() != 0 && counter < 5) {
// //MqttClient::publishStatus(dhtH_value_name, String(dht.getStatusString()));
// counter++;
// } else {
// counter = 0;
// value = dht.getHumidity();
// if (String(value) != "nan") {
// //eventGen(dhtH_value_name, "");
// //jsonWriteStr(configLiveJson, dhtH_value_name, String(value));
// //MqttClient::publishStatus(dhtH_value_name, String(value));
// //Serial.println("[I] sensor '" + dhtH_value_name + "' data: " + String(value));
// }
// }
//}
//
////dhtPerception Восприятие: Датчики 4
//void dhtP() {
// String widget_name = sCmd.next();
// String page_name = sCmd.next();
// String page_number = sCmd.next();
// createWidgetByType(widget_name, page_name, page_number, "any-data", "dhtPerception");
// //sensors_reading_map[6] = 1;
//}
//
//void dhtP_reading() {
// byte value;
// if (dht.getStatus() != 0) {
// MqttClient::publishStatus("dhtPerception", String(dht.getStatusString()));
// } else {
// //value = dht.computePerception(jsonReadStr(configLiveJson, dhtT_value_name).toFloat(), jsonReadStr(configLiveJson, dhtH_value_name).toFloat(), false);
// String final_line = perceptionStr(value);
// jsonWriteStr(configLiveJson, "dhtPerception", final_line);
// eventGen("dhtPerception", "");
// MqttClient::publishStatus("dhtPerception", final_line);
// if (mqtt.connected()) {
// Serial.println("[I] sensor 'dhtPerception' data: " + final_line);
// }
// }
//}
//
////dhtComfort Степень#комфорта: Датчики 3
//void dhtC() {
// String widget_name = sCmd.next();
// String page_name = sCmd.next();
// String page_number = sCmd.next();
// createWidgetByType(widget_name, page_name, page_number, "anydata", "dhtComfort");
// //sensors_reading_map[7] = 1;
//}
//
//void dhtC_reading() {
// ComfortState cf;
// if (dht.getStatus() != 0) {
// MqttClient::publishStatus("dhtComfort", String(dht.getStatusString()));
// } else {
// //dht.getComfortRatio(cf, jsonReadStr(configLiveJson, dhtT_value_name).toFloat(), jsonReadStr(configLiveJson, dhtH_value_name).toFloat(), false);
// String final_line = comfortStr(cf);
// jsonWriteStr(configLiveJson, "dhtComfort", final_line);
// eventGen("dhtComfort", "");
// MqttClient::publishStatus("dhtComfort", final_line);
// Serial.println("[I] sensor 'dhtComfort' send date " + final_line);
// }
//}
//
//const String perceptionStr(byte value) {
// String res;
// switch (value) {
// case 0:
// res = F("Сухой воздух");
// break;
// case 1:
// res = F("Комфортно");
// break;
// case 2:
// res = F("Уютно");
// break;
// case 3:
// res = F("Хорошо");
// break;
// case 4:
// res = F("Неудобно");
// break;
// case 5:
// res = F("Довольно неудобно");
// break;
// case 6:
// res = F("Очень неудобно");
// break;
// case 7:
// res = F("Невыносимо");
// default:
// res = F("Unknown");
// break;
// }
// return res;
//}
//
//const String comfortStr(ComfortState value) {
// String res;
// switch (value) {
// case Comfort_OK:
// res = F("Отлично");
// break;
// case Comfort_TooHot:
// res = F("Очень жарко");
// break;
// case Comfort_TooCold:
// res = F("Очень холодно");
// break;
// case Comfort_TooDry:
// res = F("Очень сухо");
// break;
// case Comfort_TooHumid:
// res = F("Очень влажно");
// break;
// case Comfort_HotAndHumid:
// res = F("Жарко и влажно");
// break;
// case Comfort_HotAndDry:
// res = F("Жарко и сухо");
// break;
// case Comfort_ColdAndHumid:
// res = F("Холодно и влажно");
// break;
// case Comfort_ColdAndDry:
// res = F("Холодно и сухо");
// break;
// default:
// res = F("Неизвестно");
// break;
// };
// return res;
//}
//
////dhtDewpoint Точка#росы: Датчики 5
//void dhtD() {
// String widget_name = sCmd.next();
// String page_name = sCmd.next();
// String page_number = sCmd.next();
// createWidgetByType(widget_name, page_name, page_number, "anydata", "dhtDewpoint");
// //sensors_reading_map[8] = 1;
//}
//
//void dhtD_reading() {
// float value;
// if (dht.getStatus() != 0) {
// MqttClient::publishStatus("dhtDewpoint", String(dht.getStatusString()));
// } else {
// //value = dht.computeDewPoint(jsonReadStr(configLiveJson, dhtT_value_name).toFloat(), jsonReadStr(configLiveJson, dhtH_value_name).toFloat(), false);
// jsonWriteInt(configLiveJson, "dhtDewpoint", value);
// eventGen("dhtDewpoint", "");
// MqttClient::publishStatus("dhtDewpoint", String(value));
// Serial.println("[I] sensor 'dhtDewpoint' data: " + String(value));
// }
//}
//#endif
//=========================================i2c bus esp8266 scl-4 sda-5 ====================================================================
//=========================================================================================================================================
//=========================================Модуль сенсоров bmp280==========================================================================

View File

@@ -1,6 +1,7 @@
#include "Utils/SysUtils.h"
#include "Utils/PrintMessage.h"
#include "Global.h"
#include "Utils/PrintMessage.h"
static const char* MODULE = "Main";
@@ -76,45 +77,48 @@ const String getMacAddress() {
return String(buf);
}
#ifdef ESP8266
void setLedStatus(LedStatus_t status) {
pinMode(LED_PIN, OUTPUT);
switch (status) {
case LED_OFF:
noTone(LED_PIN);
digitalWrite(LED_PIN, HIGH);
break;
case LED_ON:
noTone(LED_PIN);
digitalWrite(LED_PIN, LOW);
break;
case LED_SLOW:
tone(LED_PIN, 1);
break;
case LED_FAST:
tone(LED_PIN, 20);
break;
default:
break;
if (jsonReadBool(configSetupJson, "blink") == 1) {
pinMode(LED_PIN, OUTPUT);
switch (status) {
case LED_OFF:
noTone(LED_PIN);
digitalWrite(LED_PIN, HIGH);
break;
case LED_ON:
noTone(LED_PIN);
digitalWrite(LED_PIN, LOW);
break;
case LED_SLOW:
tone(LED_PIN, 1);
break;
case LED_FAST:
tone(LED_PIN, 20);
break;
default:
break;
}
}
}
#else
void setLedStatus(LedStatus_t status) {
pinMode(LED_PIN, OUTPUT);
switch (status) {
case LED_OFF:
digitalWrite(LED_PIN, HIGH);
break;
case LED_ON:
digitalWrite(LED_PIN, LOW);
break;
case LED_SLOW:
break;
case LED_FAST:
break;
default:
break;
if (jsonReadBool(configSetupJson, "blink") == 1) {
pinMode(LED_PIN, OUTPUT);
switch (status) {
case LED_OFF:
digitalWrite(LED_PIN, HIGH);
break;
case LED_ON:
digitalWrite(LED_PIN, LOW);
break;
case LED_SLOW:
break;
case LED_FAST:
break;
default:
break;
}
}
}
#endif

View File

@@ -1,20 +1,33 @@
#include "items/ItemsGlobal.h"
#include "items/SensorDhtClass.h"
#include "items/ItemsGlobal.h"
//#ifdef SensorDhtEnabled
//=========================================Модуль ультрозвукового дальномера==================================================================
//dht-temp;id;anydata;Сенсоры;Температура;order;pin;c[1]
//=========================================DHT Sensor==================================================================
//dht-temp;id;anydata;Сенсоры;Температура;order;pin;type[dht11];c[1]
//dht-hum;id;anydata;Сенсоры;Влажность;order;pin;type[dht11];c[1]
//=========================================================================================================================================
SensorDhtClass mySensorDht;
void DhtTemp() {
void dhtTemp() {
mySensorDht.update();
String key = mySensorDht.gkey();
sCmd.addCommand(key.c_str(), dhtReading);
sCmd.addCommand(key.c_str(), dhtReadingTemp);
mySensorDht.SensorDhtInit();
mySensorDht.clear();
}
void dhtReading() {
void dhtReadingTemp() {
String key = sCmd.order();
mySensorDht.SensorDhtRead(key);
mySensorDht.SensorDhtReadTemp(key);
}
void dhtHum() {
mySensorDht.update();
String key = mySensorDht.gkey();
sCmd.addCommand(key.c_str(), dhtReadingHum);
mySensorDht.SensorDhtInit();
mySensorDht.clear();
}
void dhtReadingHum() {
String key = sCmd.order();
mySensorDht.SensorDhtReadHum(key);
}
//#endif