diff --git a/data/items/analog-adc.txt b/data/items/analog-adc.txt new file mode 100644 index 00000000..3a7d70c6 --- /dev/null +++ b/data/items/analog-adc.txt @@ -0,0 +1 @@ +analog-adc;id;anydata;Сенсоры;Аналоговый;order;pin[0];map[1,100,1,100];c[0] \ No newline at end of file diff --git a/data/set.device.json b/data/set.device.json index 533ff559..c8ad7722 100644 --- a/data/set.device.json +++ b/data/set.device.json @@ -61,7 +61,8 @@ "/set?addItem=button-in": "4.Физическая кнопка", "/set?addItem=input-digit": "5.Окно ввода цифровых значений", "/set?addItem=input-time": "6.Окно ввода времени", - "/set?addItem=output-text": "7.Окно вывода любого текста, предупреждения, цифры" + "/set?addItem=output-text": "7.Окно вывода любого текста, предупреждения, цифры", + "/set?addItem=analog-adc": "8.Аналоговый сенсор" } }, { diff --git a/doc/orders.xlsm b/doc/orders.xlsm index 6589c1f8..d86f040e 100644 Binary files a/doc/orders.xlsm and b/doc/orders.xlsm differ diff --git a/include/Class/Sensor.h b/include/Class/Sensor.h deleted file mode 100644 index 4ef408e1..00000000 --- a/include/Class/Sensor.h +++ /dev/null @@ -1,26 +0,0 @@ -#pragma once - -#include -#include "Class/LineParsing.h" -#include "Global.h" - -class Sensor : public LineParsing { - public: - Sensor() : LineParsing(){}; - - void SensorInit() { - if (_pin != "") { - pinMode(_pin.toInt(), INPUT); - } - } - - void SensorRead(String key, String pin, String state) { - int pinInt = pin.toInt(); - analogWrite(pinInt, state.toInt()); - eventGen(key, ""); - jsonWriteInt(configLiveJson, key, state.toInt()); - MqttClient::publishStatus(key, state); - } -}; - -//extern Sensor* mySensor; \ No newline at end of file diff --git a/include/Class/SensorAnalog.h b/include/Class/SensorAnalog.h new file mode 100644 index 00000000..6e94a978 --- /dev/null +++ b/include/Class/SensorAnalog.h @@ -0,0 +1,35 @@ +#pragma once + +#include + +#include "Class/LineParsing.h" +#include "Global.h" + +class SensorAnalog : public LineParsing { + public: + SensorAnalog() : LineParsing(){}; + + void SensorAnalogInit() { + //if (_pin != "") { + // pinMode(_pin.toInt(), INPUT); + //} + } + + int SensorAnalogRead(String key, String pin) { + int pinInt = pin.toInt(); + int value; +#ifdef ESP32 + value = analogRead(pinInt); +#endif +#ifdef ESP8266 + pinInt = pinInt; + value = analogRead(A0); +#endif + + eventGen(key, ""); + jsonWriteInt(configLiveJson, key, value); + MqttClient::publishStatus(key, String(value)); + return value; + } +}; +extern SensorAnalog* mySensorAnalog; \ No newline at end of file diff --git a/include/Cmd.h b/include/Cmd.h index 9ef6054d..70883c34 100644 --- a/include/Cmd.h +++ b/include/Cmd.h @@ -1,5 +1,4 @@ #pragma once - #include extern void cmd_init(); @@ -22,6 +21,56 @@ extern void inputTimeSet(); extern void textOut(); extern void textOutSet(); +extern void analogAdc(); +extern void analogReading(); + + + + + + + + + +extern void sensorsInit(); + +extern void levelPr(); +extern void ultrasonicCm(); +extern void ultrasonic_reading(); + + +extern void analog_reading1(); +extern void analog_reading2(); +extern void dallas_reading(); +extern void dhtT_reading(); + +extern void dallas(); + +extern void bmp280T(); +extern void bmp280P(); +extern void bmp280T_reading(); +extern void bmp280P_reading(); + +extern void bme280T(); +extern void bme280P(); +extern void bme280H(); +extern void bme280A(); + +extern void bme280T_reading(); +extern void bme280P_reading(); +extern void bme280H_reading(); +extern void bme280A_reading(); + +extern void dhtT(); +extern void dhtH(); +extern void dhtP(); +extern void dhtC(); +extern void dhtD(); +extern void dhtH_reading(); +extern void dhtP_reading(); +extern void dhtC_reading(); +extern void dhtD_reading(); + extern void handle_time_init(); extern void stepper(); extern void stepperSet(); diff --git a/include/Global.h b/include/Global.h index e0317b4e..41fa5dc9 100644 --- a/include/Global.h +++ b/include/Global.h @@ -71,10 +71,12 @@ extern Bounce* buttons; extern boolean just_load; +// Json extern String configSetupJson; //все настройки extern String configLiveJson; //все данные с датчиков (связан с mqtt) extern String configOptionJson; //для трансфера +// Mqtt extern String chipId; extern String prex; extern String all_widgets; @@ -84,6 +86,12 @@ extern String order_loop; extern String itemsFile; extern String itemsLine; +// Sensors +extern String sensorReadingMap; + + + + extern String analog_value_names_list; extern int enter_to_analog_counter; @@ -165,45 +173,7 @@ extern void setLedStatus(LedStatus_t); extern void eventGen(String event_name, String number); extern String add_set(String param_name); -//Sensors -extern void sensors_init(); -extern void levelPr(); -extern void ultrasonicCm(); -extern void ultrasonic_reading(); - -extern void analog(); -extern void analog_reading1(); -extern void analog_reading2(); -extern void dallas_reading(); -extern void dhtT_reading(); - -extern void dallas(); - -extern void bmp280T(); -extern void bmp280P(); -extern void bmp280T_reading(); -extern void bmp280P_reading(); - -extern void bme280T(); -extern void bme280P(); -extern void bme280H(); -extern void bme280A(); - -extern void bme280T_reading(); -extern void bme280P_reading(); -extern void bme280H_reading(); -extern void bme280A_reading(); - -extern void dhtT(); -extern void dhtH(); -extern void dhtP(); -extern void dhtC(); -extern void dhtD(); -extern void dhtH_reading(); -extern void dhtP_reading(); -extern void dhtC_reading(); -extern void dhtD_reading(); //Timers extern void Timer_countdown_init(); diff --git a/include/Sensors.h b/include/Sensors.h new file mode 100644 index 00000000..45dcbb04 --- /dev/null +++ b/include/Sensors.h @@ -0,0 +1,3 @@ +#pragma once + + diff --git a/src/Class/SensorAnalog.cpp b/src/Class/SensorAnalog.cpp new file mode 100644 index 00000000..e1963f5a --- /dev/null +++ b/src/Class/SensorAnalog.cpp @@ -0,0 +1,2 @@ +#include "Class/SensorAnalog.h" +SensorAnalog* mySensorAnalog; \ No newline at end of file diff --git a/src/Cmd.cpp b/src/Cmd.cpp index 2e14c994..528403ac 100644 --- a/src/Cmd.cpp +++ b/src/Cmd.cpp @@ -3,9 +3,9 @@ #include "Class/Button.h" #include "Class/Input.h" #include "Class/LineParsing.h" +#include "Class/OutputModule.h" #include "Class/Pwm.h" #include "Class/Switch.h" -#include "Class/OutputModule.h" //----------------------------- #include "Class/NotAsinc.h" #include "Global.h" @@ -36,7 +36,12 @@ void cmd_init() { sCmd.addCommand("input-time", inputTime); sCmd.addCommand("output-text", textOut); - +#ifdef ANALOG_ENABLED + sCmd.addCommand("analog-adc", analogAdc); +#endif + + + @@ -45,11 +50,6 @@ void cmd_init() { sCmd.addCommand("timerStart", timerStart_); sCmd.addCommand("timerStop", timerStop_); - - -#ifdef ANALOG_ENABLED - sCmd.addCommand("analog", analog); -#endif #ifdef LEVEL_ENABLED sCmd.addCommand("levelPr", levelPr); sCmd.addCommand("ultrasonicCm", ultrasonicCm); @@ -253,7 +253,6 @@ void textOutSet() { myText->OutputModuleChange(key, state); } - //void text() { // String number = sCmd.next(); // String widget_name = sCmd.next(); @@ -490,8 +489,8 @@ void fileExecute(const String &filename) { csvExecute(cmdStr); } -void csvExecute(String &cmdStr) { - cmdStr.replace(";"," "); +void csvExecute(String &cmdStr) { + cmdStr.replace(";", " "); cmdStr += "\r\n"; cmdStr.replace("\r\n", "\n"); cmdStr.replace("\r", "\n"); @@ -499,12 +498,12 @@ void csvExecute(String &cmdStr) { while (cmdStr.length()) { String buf = selectToMarker(cmdStr, "\n"); count++; - if (count > 1)sCmd.readStr(buf); + if (count > 1) sCmd.readStr(buf); cmdStr = deleteBeforeDelimiter(cmdStr, "\n"); } } -void spaceExecute(String &cmdStr) { +void spaceExecute(String &cmdStr) { cmdStr += "\r\n"; cmdStr.replace("\r\n", "\n"); cmdStr.replace("\r", "\n"); diff --git a/src/Global.cpp b/src/Global.cpp index 04a4041f..aa11740f 100644 --- a/src/Global.cpp +++ b/src/Global.cpp @@ -43,6 +43,13 @@ String itemsFile = ""; String itemsLine = ""; // Sensors +String sensorReadingMap; + + + + + + String analog_value_names_list; int enter_to_analog_counter; diff --git a/src/Init.cpp b/src/Init.cpp index 99c1d98b..bbaa6f60 100644 --- a/src/Init.cpp +++ b/src/Init.cpp @@ -23,31 +23,36 @@ void all_init() { } void Device_init() { - logging_value_names_list = ""; - enter_to_logging_counter = LOG1 - 1; + sensorReadingMap = ""; + + + + + + logging_value_names_list = ""; + + + + + + enter_to_logging_counter = LOG1 - 1; analog_value_names_list = ""; enter_to_analog_counter = 0; - dallas_value_name = ""; enter_to_dallas_counter = 0; - levelPr_value_name = ""; ultrasonicCm_value_name = ""; - dhtT_value_name = ""; dhtH_value_name = ""; - bmp280T_value_name = ""; bmp280P_value_name = ""; - bme280T_value_name = ""; bme280P_value_name = ""; bme280H_value_name = ""; bme280A_value_name = ""; int array_sz = sizeof(sensors_reading_map) / sizeof(sensors_reading_map[0]); - for (int i = 0; i < array_sz; i++) { sensors_reading_map[i] = 0; } diff --git a/src/Sensors.cpp b/src/Sensors.cpp index a23b5d3e..e617d608 100644 --- a/src/Sensors.cpp +++ b/src/Sensors.cpp @@ -1,3 +1,5 @@ +#include "Class/SensorAnalog.h" +#include "Cmd.h" #include "Global.h" GMedian<10, int> medianFilter; @@ -17,67 +19,161 @@ const String comfortStr(ComfortState value); void bmp280T_reading(); -void sensors_init() { +void sensorsInit() { ts.add( - SENSORS, 1000, [&](void *) { - static int counter; - counter++; - -#ifdef LEVEL_ENABLED - if (sensors_reading_map[0] == 1) - ultrasonic_reading(); -#endif - - if (counter > 10) { - counter = 0; - -#ifdef ANALOG_ENABLED - if (sensors_reading_map[1] == 1) - analog_reading1(); - if (sensors_reading_map[2] == 1) - analog_reading2(); -#endif - -#ifdef DALLAS_ENABLED - if (sensors_reading_map[3] == 1) - dallas_reading(); -#endif - -#ifdef DHT_ENABLED - if (sensors_reading_map[4] == 1) - dhtT_reading(); - if (sensors_reading_map[5] == 1) - dhtH_reading(); - if (sensors_reading_map[6] == 1) - dhtP_reading(); - if (sensors_reading_map[7] == 1) - dhtC_reading(); - if (sensors_reading_map[8] == 1) - dhtD_reading(); -#endif - -#ifdef BMP_ENABLED - if (sensors_reading_map[9] == 1) - bmp280T_reading(); - if (sensors_reading_map[10] == 1) - bmp280P_reading(); -#endif - -#ifdef BME_ENABLED - if (sensors_reading_map[11] == 1) - bme280T_reading(); - if (sensors_reading_map[12] == 1) - bme280P_reading(); - if (sensors_reading_map[13] == 1) - bme280H_reading(); - if (sensors_reading_map[14] == 1) - bme280A_reading(); -#endif + SENSORS, 10000, [&](void *) { + String buf = sensorReadingMap; + while (buf.length()) { + String tmp = selectToMarker(buf, ","); + sCmd.readStr(tmp); + buf = deleteBeforeDelimiter(buf, ","); } }, nullptr, true); } +// static int counter; +// counter++; +// +//#ifdef LEVEL_ENABLED +// if (sensors_reading_map[0] == 1) +// ultrasonic_reading(); +//#endif +// +// if (counter > 10) { +// counter = 0; +// +//#ifdef ANALOG_ENABLED +// if (sensors_reading_map[1] == 1) +// //analog_reading1(); +// if (sensors_reading_map[2] == 1) +// //analog_reading2(); +//#endif +// +//#ifdef DALLAS_ENABLED +// if (sensors_reading_map[3] == 1) +// dallas_reading(); +//#endif +// +//#ifdef DHT_ENABLED +// if (sensors_reading_map[4] == 1) +// dhtT_reading(); +// if (sensors_reading_map[5] == 1) +// dhtH_reading(); +// if (sensors_reading_map[6] == 1) +// dhtP_reading(); +// if (sensors_reading_map[7] == 1) +// dhtC_reading(); +// if (sensors_reading_map[8] == 1) +// dhtD_reading(); +//#endif +// +//#ifdef BMP_ENABLED +// if (sensors_reading_map[9] == 1) +// bmp280T_reading(); +// if (sensors_reading_map[10] == 1) +// bmp280P_reading(); +//#endif +// +//#ifdef BME_ENABLED +// if (sensors_reading_map[11] == 1) +// bme280T_reading(); +// if (sensors_reading_map[12] == 1) +// bme280P_reading(); +// if (sensors_reading_map[13] == 1) +// bme280H_reading(); +// if (sensors_reading_map[14] == 1) +// bme280A_reading(); +//#endif +// } + +//==============================================Модуль аналогового сенсора=========================================================================================== +//analog-adc;id;anydata;Сенсоры;Аналоговый;order;pin[0];map[1,100,1,100];c[0] +//=================================================================================================================================================================== +#ifdef ANALOG_ENABLED +void analogAdc() { + mySensorAnalog = new SensorAnalog(); + mySensorAnalog->update(); + String key = mySensorAnalog->gkey(); + String pin = mySensorAnalog->gpin(); + sCmd.addCommand(key.c_str(), analogReading); + sensorReadingMap += key + ","; + jsonWriteStr(configOptionJson, key + "_pin", pin); + mySensorAnalog->clear(); +} + +void analogReading() { + String key = sCmd.order(); + String pin = jsonReadStr(configOptionJson, key + "_pin"); + mySensorAnalog->SensorAnalogRead(key, pin); +} + +//analog adc 0 Аналоговый#вход,#% Датчики any-data 1 1023 1 100 1 +//void analog() { +// String value_name = sCmd.next(); +// String pin = sCmd.next(); +// String widget_name = sCmd.next(); +// String page_name = sCmd.next(); +// String type = sCmd.next(); +// String analog_start = sCmd.next(); +// String analog_end = sCmd.next(); +// String analog_start_out = sCmd.next(); +// String analog_end_out = sCmd.next(); +// String page_number = sCmd.next(); +// analog_value_names_list += value_name + ","; +// enter_to_analog_counter++; +// jsonWriteStr(configOptionJson, value_name + "_st", analog_start); +// jsonWriteStr(configOptionJson, value_name + "_end", analog_end); +// jsonWriteStr(configOptionJson, value_name + "_st_out", analog_start_out); +// jsonWriteStr(configOptionJson, value_name + "_end_out", analog_end_out); +// createWidgetByType(widget_name, page_name, page_number, type, value_name); +// if (enter_to_analog_counter == 1) { +// sensors_reading_map[1] = 1; +// } +// if (enter_to_analog_counter == 2) { +// sensors_reading_map[2] = 1; +// } +//} +// +//void analog_reading1() { +// String value_name = selectFromMarkerToMarker(analog_value_names_list, ",", 0); +//#ifdef ESP32 +// int analog_in = analogRead(34); +//#endif +//#ifdef ESP8266 +// int analog_in = analogRead(A0); +//#endif +// int analog = map(analog_in, +// jsonReadInt(configOptionJson, value_name + "_st"), +// jsonReadInt(configOptionJson, value_name + "_end"), +// jsonReadInt(configOptionJson, value_name + "_st_out"), +// jsonReadInt(configOptionJson, value_name + "_end_out")); +// jsonWriteInt(configLiveJson, value_name, analog); +// eventGen(value_name, ""); +// MqttClient::publishStatus(value_name, String(analog)); +// Serial.println("[I] sensor '" + value_name + "' data: " + String(analog)); +//} +// +//void analog_reading2() { +// String value_name = selectFromMarkerToMarker(analog_value_names_list, ",", 1); +//#ifdef ESP32 +// int analog_in = analogRead(35); +//#endif +//#ifdef ESP8266 +// int analog_in = analogRead(A0); +//#endif +// int analog = map(analog_in, +// jsonReadInt(configOptionJson, value_name + "_st"), +// jsonReadInt(configOptionJson, value_name + "_end"), +// jsonReadInt(configOptionJson, value_name + "_st_out"), +// jsonReadInt(configOptionJson, value_name + "_end_out")); +// jsonWriteInt(configLiveJson, value_name, analog); +// eventGen(value_name, ""); +// MqttClient::publishStatus(value_name, String(analog)); +// Serial.println("[I] sensor '" + value_name + "' data: " + String(analog)); +//} +#endif + //========================================================================================================================================= //=========================================Модуль измерения уровня в баке================================================================== #ifdef LEVEL_ENABLED @@ -161,74 +257,6 @@ void ultrasonic_reading() { } #endif //========================================================================================================================================= -//=========================================Модуль аналогового сенсора====================================================================== -#ifdef ANALOG_ENABLED -//analog adc 0 Аналоговый#вход,#% Датчики any-data 1 1023 1 100 1 -void analog() { - String value_name = sCmd.next(); - String pin = sCmd.next(); - String widget_name = sCmd.next(); - String page_name = sCmd.next(); - String type = sCmd.next(); - String analog_start = sCmd.next(); - String analog_end = sCmd.next(); - String analog_start_out = sCmd.next(); - String analog_end_out = sCmd.next(); - String page_number = sCmd.next(); - analog_value_names_list += value_name + ","; - enter_to_analog_counter++; - jsonWriteStr(configOptionJson, value_name + "_st", analog_start); - jsonWriteStr(configOptionJson, value_name + "_end", analog_end); - jsonWriteStr(configOptionJson, value_name + "_st_out", analog_start_out); - jsonWriteStr(configOptionJson, value_name + "_end_out", analog_end_out); - createWidgetByType(widget_name, page_name, page_number, type, value_name); - if (enter_to_analog_counter == 1) { - sensors_reading_map[1] = 1; - } - if (enter_to_analog_counter == 2) { - sensors_reading_map[2] = 1; - } -} - -void analog_reading1() { - String value_name = selectFromMarkerToMarker(analog_value_names_list, ",", 0); -#ifdef ESP32 - int analog_in = analogRead(34); -#endif -#ifdef ESP8266 - int analog_in = analogRead(A0); -#endif - int analog = map(analog_in, - jsonReadInt(configOptionJson, value_name + "_st"), - jsonReadInt(configOptionJson, value_name + "_end"), - jsonReadInt(configOptionJson, value_name + "_st_out"), - jsonReadInt(configOptionJson, value_name + "_end_out")); - jsonWriteInt(configLiveJson, value_name, analog); - eventGen(value_name, ""); - MqttClient::publishStatus(value_name, String(analog)); - Serial.println("[I] sensor '" + value_name + "' data: " + String(analog)); -} - -void analog_reading2() { - String value_name = selectFromMarkerToMarker(analog_value_names_list, ",", 1); -#ifdef ESP32 - int analog_in = analogRead(35); -#endif -#ifdef ESP8266 - int analog_in = analogRead(A0); -#endif - int analog = map(analog_in, - jsonReadInt(configOptionJson, value_name + "_st"), - jsonReadInt(configOptionJson, value_name + "_end"), - jsonReadInt(configOptionJson, value_name + "_st_out"), - jsonReadInt(configOptionJson, value_name + "_end_out")); - jsonWriteInt(configLiveJson, value_name, analog); - eventGen(value_name, ""); - MqttClient::publishStatus(value_name, String(analog)); - Serial.println("[I] sensor '" + value_name + "' data: " + String(analog)); -} -#endif -//========================================================================================================================================= //=========================================Модуль температурного сенсора ds18b20=========================================================== #ifdef DALLAS_ENABLED //dallas temp1 2 1 Температура Датчики anydata 1 @@ -242,7 +270,7 @@ void dallas() { String page_name = sCmd.next(); String type = sCmd.next(); String page_number = sCmd.next(); - oneWire = new OneWire((uint8_t) pin.toInt()); + oneWire = new OneWire((uint8_t)pin.toInt()); sensors.setOneWire(oneWire); sensors.begin(); sensors.setResolution(12); @@ -256,7 +284,7 @@ void dallas_reading() { byte num = sensors.getDS18Count(); String dallas_value_name_tmp_buf = dallas_value_name; sensors.requestTemperatures(); - for (byte i = 0; i < num; i++) { + for (byte i = 0; i < num; i++) { temp = sensors.getTempCByIndex(i); String buf = selectToMarker(dallas_value_name_tmp_buf, ";"); dallas_value_name_tmp_buf = deleteBeforeDelimiter(dallas_value_name_tmp_buf, ";"); diff --git a/src/main.cpp b/src/main.cpp index be59f86e..c77ad247 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -42,7 +42,7 @@ void setup() { cmd_init(); pm.info("Sensors"); - sensors_init(); + sensorsInit(); pm.info("Init"); all_init();