add analog sensor

This commit is contained in:
Dmitry Borisenko
2020-08-28 02:49:26 +03:00
parent 74a7c8f528
commit c473f616b6
14 changed files with 286 additions and 212 deletions

View File

@@ -0,0 +1 @@
analog-adc;id;anydata;Сенсоры;Аналоговый;order;pin[0];map[1,100,1,100];c[0]

View File

@@ -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.Аналоговый сенсор"
}
},
{

Binary file not shown.

View File

@@ -1,26 +0,0 @@
#pragma once
#include <Arduino.h>
#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;

View File

@@ -0,0 +1,35 @@
#pragma once
#include <Arduino.h>
#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;

View File

@@ -1,5 +1,4 @@
#pragma once
#include <Arduino.h>
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();

View File

@@ -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();

3
include/Sensors.h Normal file
View File

@@ -0,0 +1,3 @@
#pragma once

View File

@@ -0,0 +1,2 @@
#include "Class/SensorAnalog.h"
SensorAnalog* mySensorAnalog;

View File

@@ -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");

View File

@@ -43,6 +43,13 @@ String itemsFile = "";
String itemsLine = "";
// Sensors
String sensorReadingMap;
String analog_value_names_list;
int enter_to_analog_counter;

View File

@@ -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;
}

View File

@@ -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, ";");

View File

@@ -42,7 +42,7 @@ void setup() {
cmd_init();
pm.info("Sensors");
sensors_init();
sensorsInit();
pm.info("Init");
all_init();