From 71b94318ebfe7deb90e0d42144fc63afa6ec6fca Mon Sep 17 00:00:00 2001 From: biver Date: Wed, 31 Aug 2022 21:33:12 +0300 Subject: [PATCH] =?UTF-8?q?=D1=82=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20=D0=BC?= =?UTF-8?q?=D0=BE=D0=B6=D0=BD=D0=BE=20=D0=BC=D0=B5=D0=BD=D1=8F=D1=82=D1=8C?= =?UTF-8?q?=20=D0=BF=D0=B8=D0=BD=D1=8B=20UART=20=D1=87=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=B7=20=D0=B2=D0=B5=D0=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/sensors/Mhz19/Mhz19.cpp | 24 +++++++++++++----------- src/modules/sensors/Mhz19/modinfo.json | 18 +++++++++--------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/modules/sensors/Mhz19/Mhz19.cpp b/src/modules/sensors/Mhz19/Mhz19.cpp index d17fb101..5a09930b 100644 --- a/src/modules/sensors/Mhz19/Mhz19.cpp +++ b/src/modules/sensors/Mhz19/Mhz19.cpp @@ -11,19 +11,16 @@ extern IoTGpio IoTgpio; -int rxPinCO2 = 14; // D5 // зеленый провод сенсора к D2 / 4 -int txPinCO2 = 16; // D0 // синий провод сенсора к D1/5 -SoftwareSerial swSerialCO2(rxPinCO2, txPinCO2); // RX, TX// ESP8266 D7 / D6 Blue/Green - +int rxPinCO2 ; // зеленый провод сенсора к прописаному по умолчанию D7 (GPIO13) +int txPinCO2 ; // синий провод сенсора к прописаному по умолчанию D6 (GPIO12) +SoftwareSerial* swSerialCO2 = nullptr; int MHZ19_request(int request); void MHZ19uart_init(); bool MHZ19uart_flag = true; -// int MHZ19C_PREHEATING_TIME = 2 * 60 * 1000;// покажет реальные данные после прогрева, через 2 мин. int MHZ19C_PREHEATING_TIME = 2 * 30 * 1000; // покажет реальные данные после прогрева, через 2 мин. -// int prevTemperature = 0; int temperature = 0; bool temperatureUpdated = false; int prevRange = 5000; @@ -48,7 +45,9 @@ class Mhz19uart : public IoTItem { txPinCO2 = jsonReadInt(parameters, "txPin"); range = jsonReadInt(parameters, "range"); ABC = jsonReadInt(parameters, "ABC"); + if (!swSerialCO2) swSerialCO2 = new SoftwareSerial(rxPinCO2, txPinCO2); } + //======================================================================================================= // doByInterval() @@ -69,11 +68,12 @@ class Mhz19uart : public IoTItem { //если сенсор предполагает использование общего объекта библиотеки для нескольких экземпляров сенсора, то в данной функции необходимо предусмотреть //создание и контроль соответствующих глобальных переменных +//замер по ШИМ создает задержку. вызываем его нечасто, по умолчанию раз в 5 минут class Mhz19pwm : public IoTItem { private: //======================================================================================================= // Секция переменных. - int pwmPin; ///// желтый провод сенсора к D8 (14-D5 ok) + int pwmPin; // желтый провод сенсора к прописаному по умолчанию D8 (GPIO15) public: //======================================================================================================= @@ -146,6 +146,7 @@ class Mhz19temp : public IoTItem { txPinCO2 = jsonReadInt(parameters, "txPin"); range = jsonReadInt(parameters, "range"); ABC = jsonReadInt(parameters, "ABC"); + if (!swSerialCO2) swSerialCO2 = new SoftwareSerial(rxPinCO2, txPinCO2); } //======================================================================================================= @@ -179,6 +180,7 @@ class Mhz19range : public IoTItem { txPinCO2 = jsonReadInt(parameters, "txPin"); range = jsonReadInt(parameters, "range"); ABC = jsonReadInt(parameters, "ABC"); + if (!swSerialCO2) swSerialCO2 = new SoftwareSerial(rxPinCO2, txPinCO2); } void doByInterval() { @@ -216,6 +218,7 @@ class Mhz19ABC : public IoTItem { txPinCO2 = jsonReadInt(parameters, "txPin"); range = jsonReadInt(parameters, "range"); ABC = jsonReadInt(parameters, "ABC"); + if (!swSerialCO2) swSerialCO2 = new SoftwareSerial(rxPinCO2, txPinCO2); } void doByInterval() { @@ -261,7 +264,7 @@ void *getAPI_Mhz19(String subtype, String param) { void MHZ19uart_init() { if (MHZ19uart_flag) { int reply; - swSerialCO2.begin(9600); + swSerialCO2->begin(9600); delay(50); @@ -427,7 +430,7 @@ int MHZ19_request(int request) { break; } - swSerialCO2.write(request_cmd, 9); + swSerialCO2->write(request_cmd, 9); Serial.print("Request : "); for (int i = 0; i < 9; i++) { @@ -441,7 +444,7 @@ int MHZ19_request(int request) { unsigned char response[9]; Serial.print("Response :"); - swSerialCO2.readBytes(response, 9); + swSerialCO2->readBytes(response, 9); for (int i = 0; i < 9; i++) { Serial.print(" "); @@ -536,7 +539,6 @@ int MHZ19_request(int request) { // byte c = {0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79}; // if nothing else matches, do the default // default is optional - break; } } diff --git a/src/modules/sensors/Mhz19/modinfo.json b/src/modules/sensors/Mhz19/modinfo.json index 2ab47bbc..22d135c2 100644 --- a/src/modules/sensors/Mhz19/modinfo.json +++ b/src/modules/sensors/Mhz19/modinfo.json @@ -13,8 +13,8 @@ "multiply": 1, "round": 1, "pin": 0, - "rxPin": 14, - "txPin": 16, + "rxPin": 13, + "txPin": 12, "int": 15, "range": 5000, "ABC": 1 @@ -30,7 +30,7 @@ "plus": 0, "multiply": 1, "round": 1, - "pin": 16, + "pin": 15, "int": 300 }, { @@ -44,8 +44,8 @@ "plus": 0, "multiply": 1, "round": 1, - "rxPin": 14, - "txPin": 16, + "rxPin": 13, + "txPin": 12, "ABC": 1, "int": 30 }, @@ -60,8 +60,8 @@ "plus": 0, "multiply": 1, "round": 1, - "rxPin": 14, - "txPin": 16, + "rxPin": 13, + "txPin": 12, "range": 5000, "ABC": 1, "int": 30 @@ -74,8 +74,8 @@ "widget": "anydataDef", "page": "Сенсоры", "descr": "ABC", - "rxPin": 14, - "txPin": 16, + "rxPin": 13, + "txPin": 12, "range": 5000, "ABC": 1, "int": 30